<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文揭開操作系統(tǒng)的神秘面紗

          共 3027字,需瀏覽 7分鐘

           ·

          2020-10-16 12:30


          點(diǎn)擊「閱讀原文」查看良許原創(chuàng)精品視頻。


          1 操作系統(tǒng)簡介

          在如今的世界里,絕大多數(shù)人都會(huì)對(duì)WindowsLinuxMacOS等操作系統(tǒng)有一定的使用經(jīng)驗(yàn),但是很多時(shí)候?qū)Σ僮飨到y(tǒng)本身并沒有太多感知。畢竟與用戶直接打交道的大多數(shù)是各種炫酷的客戶端軟件,包含精美的字體、圖標(biāo)和圖片等。

          圖1 Windows10

          雖然一般來說這樣漂亮的用戶界面通常不屬于操作系統(tǒng),但可看作它是操作系統(tǒng)的一部分,通過操作系統(tǒng)來完成其底層復(fù)雜的與硬件層面的交互工作。

          現(xiàn)今的計(jì)算機(jī)是一個(gè)極其復(fù)雜的系統(tǒng),一般由一個(gè)或多個(gè)處理器,以及一些主內(nèi)存、磁盤、網(wǎng)絡(luò)接口、各種外設(shè)以及各種其他輸入/輸出設(shè)備組成。如果每個(gè)程序員都必須詳細(xì)了解所有這些硬件層面的原理和機(jī)制,然后才能編寫相應(yīng)的代碼,那么可想而知這樣的效率會(huì)有多低。

          圖2 操作系統(tǒng)所處層次結(jié)構(gòu)

          此外,管理所有這些組件并優(yōu)化使用它們是一件非常困難的工作。因此,計(jì)算機(jī)配備了一層稱為操作系統(tǒng)的軟件,其作用是為用戶程序提供簡潔方便的計(jì)算機(jī)模型,并統(tǒng)一管理所需要的資源。

          圖3 計(jì)算機(jī)基本硬件組成

          在這里,我們看到計(jì)算機(jī)最底部是各種硬件,包括芯片,主板,磁盤,鍵盤,顯示器等。在硬件之上則是軟件。大多數(shù)計(jì)算機(jī)都有兩種操作模式:內(nèi)核模式和用戶模式。

          內(nèi)核模式Kernel Mode

          在內(nèi)核模式下,程序具有硬件的所有控制權(quán)限,可以執(zhí)行所有CPU指令,可以訪問任意地址的內(nèi)存。在內(nèi)核模式下的任何異常都是災(zāi)難性的,將會(huì)導(dǎo)致整臺(tái)機(jī)器停機(jī)。

          用戶模式User Mode

          在用戶模式下,程序沒有對(duì)硬件的直接控制權(quán)限,也不能直接訪問地址的內(nèi)存。程序是通過調(diào)用系統(tǒng)接口API來訪問硬件和內(nèi)存。在這種保護(hù)模式下,即使程序發(fā)送崩潰也是可以恢復(fù)的。

          操作系統(tǒng)可以看作是最基本的軟件,它運(yùn)行在內(nèi)核模式(也稱為管理程序模式)下。在這種模式下,它可以完全訪問所有硬件,并且可以執(zhí)行機(jī)器可以執(zhí)行的任何指令。

          而在用戶模式下運(yùn)行的一般都為直接面向用戶的應(yīng)用軟件,在該模式下只能使用一部分機(jī)器指令。特別是,那些影響機(jī)器控制或「I/O輸入輸出」的指令在用戶模式程序中是禁止的。

          2 操作系統(tǒng)作用

          看起來操作系統(tǒng)好像就是橫跨在用戶應(yīng)用軟件和底層硬件之間的橋梁,通過運(yùn)行在內(nèi)核模式進(jìn)行硬件的控制和調(diào)度。事實(shí)上,操作系統(tǒng)的作用可大致分為兩大方面。

          作為計(jì)算機(jī)硬件的抽象層

          大多數(shù)計(jì)算機(jī)在機(jī)器語言級(jí)別上的體系結(jié)構(gòu)是極其原始的,主要說的是指令集,內(nèi)存組織,I/O處理和總線結(jié)構(gòu)。在這樣的結(jié)構(gòu)下是沒辦法進(jìn)行自定義編程的,特別是對(duì)于I/O操作而言。因而,沒有理智的程序員愿意在硬件級(jí)別處理磁盤和內(nèi)存。

          為了解決這樣尷尬的局面,從而產(chǎn)生了一個(gè)稱為磁盤驅(qū)動(dòng)程序的軟件。它用來處理硬件并提供一個(gè)接口來讀取和寫入磁盤塊,而使得我們無需關(guān)注其細(xì)節(jié)。這本身就是操作系統(tǒng)最初具有的功能之一,包含許多用于控制I/O設(shè)備的驅(qū)動(dòng)程序。

          圖4 讓人頭疼的設(shè)備驅(qū)動(dòng)

          但是對(duì)于大多數(shù)應(yīng)用程序來說,光有驅(qū)動(dòng)程序是不夠的。因此,所有操作系統(tǒng)都為使用磁盤提供了另一層抽象而又便于理解的概念:文件。程序可以創(chuàng)建,寫入和讀取文件,而不需要處理硬件層面中復(fù)雜的工作原理和實(shí)現(xiàn)細(xì)節(jié)。

          這種所謂對(duì)硬件層面的抽象是管理所有這些復(fù)雜底層硬件的關(guān)鍵。一個(gè)好的抽象系統(tǒng)將幾乎不可能完成的任務(wù)變成可以進(jìn)行管理的任務(wù)。所以事實(shí)上操作系統(tǒng)所干的事,首先是定義和實(shí)現(xiàn)抽象。然而是使用這些抽象來解決上層用戶的問題。

          圖5 「文件」是操作系統(tǒng)最重要的抽象概念

          「文件」是幾乎每個(gè)計(jì)算機(jī)用戶都可以理解的一種抽象。一個(gè)文本,一個(gè)照片,一封保存的電子郵件,一首周杰倫的歌或一個(gè)網(wǎng)頁,這些都可看作是抽象出來的文件。正是通過操作系統(tǒng)的抽象作用,使得我們可以在處理文本、照片、郵件的時(shí)候只需要點(diǎn)擊幾下,而不需要去考慮在SATA磁盤中數(shù)據(jù)的存放格式發(fā)生了如何變化。

          圖4 操作系統(tǒng)對(duì)硬件層的抽象

          顯而易見的是,操作系統(tǒng)的主要任務(wù)之一是隱藏硬件,并以簡單且好看的抽象形式呈現(xiàn)程序,以方便用戶的使用。這也是Windows系統(tǒng)持續(xù)幾十年的市場占額的原因所在,相較于其它的系統(tǒng),Windows以更接近用戶體驗(yàn)的抽象方式從而贏得了市場。

          作為計(jì)算機(jī)的資源管理器

          上面的作用簡單來說就是操作系統(tǒng)為用戶層面的應(yīng)用程序提供了一種硬件的抽象,是自頂向下的作用。除此之外,操作系統(tǒng)還可以作為自底向上的中間人對(duì)應(yīng)用程序所需要的資源進(jìn)行管理和分發(fā)。在自下而上的流程中,操作系統(tǒng)的工作是在需要處理器、內(nèi)存和I/O設(shè)備的各種程序之間提供有序且受控的分配。

          圖4 操作系統(tǒng)對(duì)底層資源的管理

          打個(gè)比方,我們知道操作系統(tǒng)允許多個(gè)程序同時(shí)運(yùn)行并占用內(nèi)存。想象一下,如果在一臺(tái)計(jì)算機(jī)上運(yùn)行的三個(gè)程序都試圖在同一臺(tái)打印機(jī)上同時(shí)打印輸出,將會(huì)發(fā)生什么。三個(gè)程序調(diào)用打印機(jī)打印可看作是對(duì)資源對(duì)請求,如果沒有操作系統(tǒng)對(duì)資源請求的管理和分配,那么整個(gè)計(jì)算機(jī)的輸出結(jié)果將會(huì)是完全混亂的。

          圖5 多個(gè)程序同時(shí)調(diào)用打印機(jī)的錯(cuò)誤輸出

          打印機(jī)這個(gè)例子還只是最簡單直接的資源請求和分配問題,而其它比如網(wǎng)絡(luò)資源、內(nèi)存資源的請求沖突問題的影響就更大了。如果處理不好資源請求之間的問題,不同應(yīng)用程序之間則會(huì)發(fā)生嚴(yán)重的串?dāng)_,以致出現(xiàn)各種無法調(diào)試的錯(cuò)誤。

          操作系統(tǒng)主要是以時(shí)間和空間這兩種方式進(jìn)行復(fù)用或共享資源。對(duì)資源進(jìn)行時(shí)分復(fù)用時(shí),不同的程序或用戶輪流使用它。他們中的第一個(gè)開始使用資源,然后再使用另一個(gè),依此類推。

          圖6 操作系統(tǒng)在時(shí)間維度上分配資源

          這實(shí)際上就是所謂時(shí)間片的概念,在時(shí)間的緯度上為每個(gè)程序分配一段資源占用的機(jī)會(huì)。還是共享打印機(jī)的例子,當(dāng)有多個(gè)程序都想用打印機(jī)的時(shí)候,就按照時(shí)間發(fā)送的順序在打印機(jī)上線性排序,一個(gè)一個(gè)來。

          另一種是空間多路復(fù)用。最主要的區(qū)別在于不是每個(gè)程序輪流使用,而是每個(gè)程序都獲得了一部分資源。

          圖7 操作系統(tǒng)在空間維度上分配資源

          例如,通常將主存儲(chǔ)器劃分為幾個(gè)可同時(shí)使用的區(qū)域,每個(gè)程序可以同時(shí)占用。假設(shè)有足夠的內(nèi)存來容納多個(gè)程序,那么相較于所有內(nèi)存分配個(gè)一個(gè)程序而言,一次將多個(gè)子內(nèi)存分配給多個(gè)程序就更有效。

          當(dāng)然,這會(huì)引起公平性以及安全性等問題,這也是操作系統(tǒng)需要解決的問題之一。進(jìn)行空間多路復(fù)用的另一個(gè)資源是磁盤。

          在絕大數(shù)系統(tǒng)中,單個(gè)磁盤可以同時(shí)容納來自多個(gè)程序或用戶的文件。而操作系統(tǒng)在這其中的作用就是根據(jù)用戶或程序來確定其對(duì)應(yīng)的一塊磁盤區(qū)域,從而保證程序正常的運(yùn)行。

          總結(jié)

          操作系統(tǒng)復(fù)雜性絕不是幾篇文章可以介紹的完的,但是這些理論上的思想正是操作系統(tǒng)架構(gòu)形成的基礎(chǔ)。了解操作系統(tǒng)能夠讓我們真正走進(jìn)程序代碼執(zhí)行的內(nèi)部,從高級(jí)語言出發(fā)進(jìn)而理解硬件層面的執(zhí)行,從而能夠真正從平臺(tái)及系統(tǒng)層面優(yōu)化我們代碼的性能。


          良許個(gè)人微信


          添加良許個(gè)人微信即送3套程序員必讀資料


          → 精選技術(shù)資料共享

          → 高手如云交流社群





          本公眾號(hào)全部博文已整理成一個(gè)目錄,請?jiān)诠娞?hào)里回復(fù)「m」獲取!

          推薦閱讀:

          國慶期間,我造了臺(tái)計(jì)算機(jī)

          Linux下如何刪除長時(shí)間不使用的舊文件?

          計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí)總結(jié)


          5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲取!!


          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人插人人操人人射 | 热久久综合免费频99热 | 欧美日韩精品在线视频 | 香蕉视频一区二区 | 波多野结衣一区二区 |