操作系统概述 记录操作系统相关知识
生活随笔
收集整理的這篇文章主要介紹了
操作系统概述 记录操作系统相关知识
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
操作系統(tǒng)
- 現(xiàn)代計(jì)算機(jī)系統(tǒng)由一個或多個處理器、主存、打印機(jī)、鍵盤、鼠標(biāo)、顯示器、網(wǎng)絡(luò)接口以及各種輸入/輸出設(shè)備構(gòu)成。
- 上面提到的這些東西都屬于硬件資源,用戶不會直接和硬件進(jìn)行交互,計(jì)算機(jī)安裝了一層軟件,這層軟件能夠通過響應(yīng)用戶輸入的指令達(dá)到控制硬件的效果,從而滿足用戶需求,這種軟件稱之為 操作系統(tǒng)
- 常見的操作系統(tǒng)主要有Windows, Linux等,這種帶有圖形界面的操作系 統(tǒng)被稱為圖形用戶界面(GUI),而基于文本、命令行的通常稱為Shell。
- 操作系統(tǒng)的簡化圖如上圖所示,最下面的是硬件,硬件包括芯片、電路板、磁盤、鍵盤、顯示器等,在硬件之上是軟件。大部分計(jì)算機(jī)有兩種運(yùn)行模式:內(nèi)核態(tài) 和 用戶態(tài),軟件中最基 礎(chǔ)的部分是操作系統(tǒng),它運(yùn)行在內(nèi)核態(tài) 中,內(nèi)核態(tài)也稱為 管態(tài)和核心態(tài),它們都是操作系統(tǒng)的運(yùn)行狀態(tài),只不過是不同的叫法而已。操作系統(tǒng)具有硬件的訪問權(quán),可以執(zhí)行機(jī)器能夠運(yùn)行的任何指令。
- 軟件的其余部分運(yùn)行在 用戶態(tài)下。用戶接口程序(shell或者GUI)處于用戶態(tài)中,并且它們位于用戶態(tài)的最低層,允許用戶運(yùn)行其他程序,例如Web瀏覽器、電子郵件閱讀器、音樂播放器等。而且,越靠近用戶態(tài)的應(yīng)用程序越容易編 寫,如果你不喜歡某個電子郵件閱讀器你可以重新寫一個或者換一個,但你不能自行寫一個操作系統(tǒng)或 者是中斷處理程序。這個程序由硬件保護(hù),防止外部對其進(jìn)行修改。
CPU
- CPU主要和內(nèi)存進(jìn)行交互,從內(nèi)存中提取指令并執(zhí)行。一個CPU的執(zhí)行周期是從內(nèi)存中提取第一條指令、解碼并決定它的類型和操作數(shù),執(zhí)行,然后再提取、解碼執(zhí)行后續(xù)的指令。 重復(fù)該循環(huán)直到程序運(yùn)行完畢。
- 每個CPU都有一組可以執(zhí)行的特定指令集。因此,x86的CPU不能執(zhí)行ARM的程序并且ARM的 CPU也不能執(zhí)行x86的程序。由于訪問內(nèi)存獲取執(zhí)行數(shù)據(jù)要比執(zhí)行指令花費(fèi)的時間長,因此所有的 CPU內(nèi)部都會包含一些寄存器來保存關(guān)鍵變量和臨時結(jié)果。因此,在指令集中通常會有一些指令用于把關(guān)鍵字從內(nèi)存中加載到寄存器中,以及把關(guān)鍵字從寄存器存入到內(nèi)存中。還有一些其他的指令會把來自寄存器和內(nèi)存的操作數(shù)進(jìn)行組合,例如add操作就會把兩個操作數(shù)相加并把結(jié)果保存到內(nèi)存中。
- 除了用于保存變量和臨時結(jié)果的通用寄存器外,大多數(shù)計(jì)算機(jī)還具有幾個特殊的寄存器,這些寄存器對于程序員是可見的。
- 其中之一就是程序計(jì)數(shù)器(program counter),程序計(jì)數(shù)器會指示下一條需要從內(nèi)存提取指令的地址。提取指令后,程序計(jì)數(shù)器將更新為下一條需要提取的地址。
- 另一個寄存器是堆棧指針(stack pointer),它指向內(nèi)存中當(dāng)前棧的頂端。堆棧指針會包含輸入過程 中的有關(guān)參數(shù)、局部變量以及沒有保存在寄存器中的臨時變量。
- 還有一個寄存器是PSW(Program Status Word)程序狀態(tài)字寄存器,這個寄存器是由操作系統(tǒng)維護(hù)的8個字節(jié)(64位)long類型的數(shù)據(jù)集合。它會跟蹤當(dāng)前系統(tǒng)的狀態(tài)。除非發(fā)生系統(tǒng)結(jié)束,否則可以 忽略PSW。用戶程序通常可以讀取整個PSW,但通常只能寫入其某些字段。PSW在系統(tǒng)調(diào)用和I / O 中起著重要作用。
- 操作系統(tǒng)必須了解所有的寄存器。在時間多路復(fù)用(time multiplexing)的CPU中,操作系統(tǒng)往往 停止運(yùn)行一個程序轉(zhuǎn)而運(yùn)行另外一個。每次當(dāng)操作系統(tǒng)停止運(yùn)行一個程序時,操作系統(tǒng)會保存所有寄存 器的值,以便于后續(xù)重新運(yùn)行該程序。
為了提升性能,CPU設(shè)計(jì)人員早就放棄了同時去讀取、解碼和執(zhí)行一條簡單的指令。許多現(xiàn)代的CPU 都具有同時讀取多條指令的機(jī)制。例如,一個CPU可能會有單獨(dú)訪問、解碼和執(zhí)行單元,所以,當(dāng) CPU執(zhí)行第N條指令時,還可以對N + 1條指令解碼,還可以讀取N + 2條指令。像這樣的組織形式 被稱為流水線(pipeline),
- ?比流水線更先進(jìn)的設(shè)計(jì)是 超標(biāo)量(superscalar) CPU,下面是超標(biāo)量CPU的設(shè)計(jì)
- 在上面這個設(shè)計(jì)中,存在多個執(zhí)行單元,例如,一個用來進(jìn)行整數(shù)運(yùn)算、一個用來浮點(diǎn)數(shù)運(yùn)算、一個用來布爾運(yùn)算。兩個或者更多的指令被一次性取出、解碼并放入緩沖區(qū)中,直至它們執(zhí)行完畢。只要一個 執(zhí)行單元空閑,就會去檢查緩沖區(qū)是否有可以執(zhí)行的指令。如果有,就把指令從緩沖區(qū)中取出并執(zhí)行。 這種設(shè)計(jì)的含義是應(yīng)用程序通常是無序執(zhí)行的。在大多數(shù)情況下,硬件負(fù)責(zé)保證這種運(yùn)算的結(jié)果與順序 執(zhí)行指令時的結(jié)果相同。
- 除了用在嵌入式系統(tǒng)中非常簡單的CPU之外,多數(shù)CPU都有兩種模式,即前面已經(jīng)提到的內(nèi)核態(tài)和 用戶態(tài)。通常情況下,PSW寄存器中的一個二進(jìn)制位會控制當(dāng)前狀態(tài)是內(nèi)核態(tài)還是用戶態(tài)。當(dāng)運(yùn)行在 內(nèi)核態(tài)時,CPU能夠執(zhí)行任何指令集中的指令并且能夠使用硬件的功能。在臺式機(jī)和服務(wù)器上,操作系統(tǒng)通常以內(nèi)核模式運(yùn)行,從而可以訪問完整的硬件。在大多數(shù)嵌入式系統(tǒng)中,一部分運(yùn)行在內(nèi)核態(tài) 下,剩下的一部分運(yùn)行在用戶態(tài)下。
- 用戶應(yīng)用程序通常運(yùn)行在用戶態(tài)下,在用戶態(tài)下,CPU只能執(zhí)行指令集中的一部分并且只能訪問硬件 的一部分功能。一般情況下,在用戶態(tài)下,有關(guān)I/O和內(nèi)存保護(hù)的所有指令是禁止執(zhí)行的。當(dāng)然,設(shè)置 PSW模式的二進(jìn)制位為內(nèi)核態(tài)也是禁止的。
- 為了獲取操作系統(tǒng)的服務(wù),用戶程序必須使用系統(tǒng)調(diào)用(system call),系統(tǒng)調(diào)用會轉(zhuǎn)換為內(nèi)核態(tài)并 且調(diào)用操作系統(tǒng)。TRAP指令用于把用戶態(tài)切換為內(nèi)核態(tài)并啟用操作系統(tǒng)。當(dāng)有關(guān)工作完成之后,在 系統(tǒng)調(diào)用后面的指令會把控制權(quán)交給用戶程序。我們會在后面探討操作系統(tǒng)的調(diào)用細(xì)節(jié)。
- 需要注意的是操作系統(tǒng)在進(jìn)行系統(tǒng)調(diào)用時會存在陷阱。大部分的陷阱會導(dǎo)致硬件發(fā)出警告,比如說試圖 被零除或浮點(diǎn)下溢等。在所有的情況下,操作系統(tǒng)都能得到控制權(quán)并決定如何處理異常情況。有時, 由于出錯的原因,程序不得不停止。
多線程與多核芯片
- Intel Pentinum 4也就是奔騰處理器引入了被稱為多線程(multithreading)或 超線程 (hyperthreading, Intel公司的命名)的特性,x86處理器和其他一些CPU芯片就是這樣做的。 包括SSPARC、Power5、Intel Xeon和Intel Core系列。近似地說,多線程允許CPU保持兩個不同的線程狀態(tài)并且在納秒級(nanosecond)的時間完成切換。例如,如果一個進(jìn)程想要從內(nèi)存中讀取指令(這通常會經(jīng)歷幾個時鐘周期),多線程CPU則可以切換至另一個線程。多線程不會提供真正的并行處理。在一個時刻只有一個進(jìn)程在運(yùn)行。
- 對于操作系統(tǒng)來講,多線程是有意義的,因?yàn)槊總€線程對操作系統(tǒng)來說都像是一個單個的CPU。比如 一個有兩個CPU的操作系統(tǒng),并且每個CPU運(yùn)行兩個線程,那么這對于操作系統(tǒng)來說就可能是4個 CPU。
- 除了多線程之外,現(xiàn)在許多CPU芯片上都具有四個、八個或更多完整的處理器或內(nèi)核。多核芯片在其 上有效地承載了四個微型芯片,每個微型芯片都有自己的獨(dú)立CPU。
帶有共享L2緩存的4核芯片?
帶有分離L2緩存的4核芯片??
- 如果要說在絕對核心數(shù)量方面,沒有什么能贏過現(xiàn)代GPU(Graphics Processing Unit) , GPU是 指由成千上萬個微核組成的處理器。它們擅長處理大量并行的簡單計(jì)算。
內(nèi)存
- 計(jì)算機(jī)中第二個主要的組件就是內(nèi)存。理想情況下,內(nèi)存應(yīng)該非常快速(比執(zhí)行一條指令要快,從而不會 拖慢CPU執(zhí)行效率),而且足夠大且便宜,但是目前的技術(shù)手段無法滿足三者的需求。于是采用了不同 的處理方式,存儲器系統(tǒng)采用一種分層次的結(jié)構(gòu)
- 存儲分級
- 頂層的存儲器速度最高,但是容量最小,成本非常高,層級結(jié)構(gòu)越向下,其訪問效率越慢,容量越大, 但是造價(jià)也就越便宜。
寄存器
- 存儲器的頂層是CPU中的寄存器,它們用和CPU 一樣的材料制成,所以和CPU 一樣快。程序必須 在軟件中自行管理這些寄存器(即決定如何使用它們)
高速緩存
- 位于寄存器下面的是高速緩存,它多數(shù)由硬件控制。主存被分割成高速緩存行為64 字節(jié),內(nèi)存地址的0 - 63對應(yīng)高速緩存行0,地址64 - 127對應(yīng)高速緩存行的1,等等。使用最頻繁 的高速緩存行保存在位于CPU內(nèi)部或非常靠近CPU的高速緩存中。當(dāng)應(yīng)用程序需要從內(nèi)存中讀取關(guān)鍵詞的時候,高速緩存的硬件會檢查所需要的高速緩存行是否在高速緩存中。如果在的話,那么這就 是高速緩存命中(cache hit)。高速緩存滿足了該請求,并且沒有通過總線將內(nèi)存請求發(fā)送到主內(nèi)存。高速緩存命中通常需要花費(fèi)兩個時鐘周期。緩存未命中需要從內(nèi)存中提取,這會消耗大量的時間。 高速緩存行會限制容量的大小因?yàn)樗脑靸r(jià)非常昂貴。有一些機(jī)器會有兩個或者三個高速緩存級別,每 一級高速緩存比前一級慢且容量更大。
- 緩存在計(jì)算機(jī)很多領(lǐng)域都扮演了非常重要的角色,不僅僅是RAM緩存行。
- 隨機(jī)存儲器(RAM):內(nèi)存中最重要的一種,表示既可以從中讀取數(shù)據(jù),也可以寫入數(shù)據(jù)。當(dāng)機(jī) 器關(guān)閉時,內(nèi)存中的信息會丟失。
- 大量的可用資源被劃分為小的部分,這些可用資源的一部分會獲得比其他資源更頻繁的使用權(quán),緩存經(jīng) 常用來提升性能。操作系統(tǒng)無時無刻的不在使用緩存。例如,大多數(shù)操作系統(tǒng)在主機(jī)內(nèi)存中保留(部分)頻繁使用的文件,以避免重復(fù)從磁盤重復(fù)獲取。舉個例子,類似于/home/ast/projects/minix3/src/kernel/clock.c這樣的場路徑名轉(zhuǎn)換成的文件所在磁盤地址 的結(jié)果也可以保存緩存中,以避免重復(fù)尋址。另外,當(dāng)一個Web頁面(URL)的地址轉(zhuǎn)換為網(wǎng)絡(luò)地址(IP 地址)后,這個轉(zhuǎn)換結(jié)果也可以緩存起來供將來使用。
在任何緩存系統(tǒng)中,都會有下面這幾個噬需解決的問題
- -何時把新的內(nèi)容放進(jìn)緩存
- -把新的內(nèi)容應(yīng)該放在緩存的哪一行
- -在需要空閑空間時,應(yīng)該把哪塊內(nèi)容從緩存中移除
- -應(yīng)該把移除的內(nèi)容放在某個較大存儲器的何處
并不是每個問題都與每種緩存情況有關(guān)。對于CPU緩存中的主存緩存行,當(dāng)有緩存未命中時,就會調(diào) 入新的內(nèi)容。通常通過所引用內(nèi)存地址的高位計(jì)算應(yīng)該使用的緩存行。
- 緩存是解決問題的一種好的方式,所以現(xiàn)代CPU設(shè)計(jì)了兩種緩存。第一級緩存或者說是L1 cache 總是位于CPU內(nèi)部,用來將已解碼的指令調(diào)入CPU的執(zhí)行引擎。對于那些頻繁使用的關(guān)鍵字,多數(shù) 芯片有第二個L1 cache。典型的L1 cache的大小為16 KB。另外,往往還設(shè)有二級緩存,也就是L2 cache,用來存放最近使用過的關(guān)鍵字,一般是兆字節(jié)為單位。L1 cache和L2 cache最大的不 同在于是否存在延遲。訪問L1 cach e沒有任何的延遲,然而訪問L2 cache會有1 - 2個時鐘周期的 延后。
什么是時鐘周期?
- 計(jì)算機(jī)處理器或CPU的速度由時鐘周期來確定,該時鐘周期是振蕩器兩個脈沖 之間的時間量。一般而言,每秒脈沖數(shù)越高,計(jì)算機(jī)處理器處理信息的速度就越快。時鐘速度以 Hz為單位測量,通常為兆赫(MHz)或千兆赫(GHz)。例如,一個4 GHz處理器每秒執(zhí)行 4,000,000,000個時鐘周期。
- 計(jì)算機(jī)處理器可以在每個時鐘周期執(zhí)行一條或多條指令,這具體取決于處理器的類型。早期的計(jì)算機(jī)處理器和較慢的CPU在每個時鐘周期只能執(zhí)行一條指令,而現(xiàn)代處理器在每個時鐘周期可以 執(zhí)行多條指令。
主存
- 在上面的層次結(jié)構(gòu)中再下一層是主存,這是內(nèi)存系統(tǒng)的主力軍,主存通常叫做RAM(Random Access Memory),由于1950年代和1960年代的計(jì)算機(jī)使用微小的可磁化鐵氧體磁芯作為主存儲器,因此舊時有時將其稱為核心存儲器。所有不能再高速緩存中得到滿足的內(nèi)存訪問請求都會轉(zhuǎn)往主存中。
- 除了主存之外,許多計(jì)算機(jī)還具有少量的非易失性隨機(jī)存取存儲器。它們與RAM不同,在電源斷電后,非易失性隨機(jī)訪問存儲器并不會丟失內(nèi)容。ROM(Read Only Memory)中的內(nèi)容一旦存儲后就不 會再被修改。它非常快而且便宜。(如果有人問你,有沒有什么又快又便宜的內(nèi)存設(shè)備,那就是ROM 了)在計(jì)算機(jī)中,用于啟動計(jì)算機(jī)的引導(dǎo)加載模塊(也就是bootstrap )就存放在ROM中。另外,一 些I/O卡也采用ROM處理底層設(shè)備控制。
- EEPROM(Electrically Erasable PROM,)和閃存(flash memory)也是非易失性的,但是與 ROM相反,它們可以擦除和重寫。不過重寫它們需要比寫入RAM更多的時間,所以它們的使用方式 與ROM相同,但是與ROM不同的是他們可以通過重寫字段來糾正程序中出現(xiàn)的錯誤。
- 閃存也通常用來作為便攜性的存儲媒介。閃存是數(shù)碼相機(jī)中的膠卷,是便攜式音樂播放器的磁盤。閃存 的速度介于RAM和磁盤之間。另外,與磁盤存儲器不同的是,如果閃存擦除的次數(shù)太多,會出現(xiàn)磨損。
- 還有一類是CMOS,它是易失性的。許多計(jì)算機(jī)都會使用CMOS存儲器保持當(dāng)前時間和日期。
磁盤
- 下一個層次是磁盤(硬盤),磁盤同RAM相比,每個二進(jìn)制位的成本低了兩個數(shù)量級,而且經(jīng)常也有兩個數(shù)量級大的容量。磁盤唯一的問題是隨機(jī)訪問數(shù)據(jù)時間大約慢了三個數(shù)量級。磁盤訪問慢的原因是因?yàn)榇疟P的構(gòu)造不同
磁盤驅(qū)動器的構(gòu)造
- 磁盤是一種機(jī)械裝置,在一個磁盤中有一個或多個金屬盤片,它們以5400rpm、7200rpm、10800rpm 或更高的速度旋轉(zhuǎn)。從邊緣開始有一個機(jī)械臂懸橫在盤面上,這類似于老式播放塑料唱片33轉(zhuǎn)唱機(jī)上 的拾音臂。信息會寫在磁盤一系列的同心圓上。在任意一個給定臂的位置,每個磁頭可以讀取一段環(huán)形區(qū)域,稱為磁道(track)。把一個給定臂的位置上的所有磁道合并起來,組成了一個柱面 (cylinder),,,
- 每個磁道劃分若干扇區(qū),扇區(qū)的值是512字節(jié)。在現(xiàn)代磁盤中,較外部的柱面比較內(nèi)部的柱面有更多的扇區(qū)。機(jī)械臂從一個柱面移動到相鄰的柱面大約需要1ms。而隨機(jī)移到一個柱面的典型時間為5ms至10ms,具體情況以驅(qū)動器為準(zhǔn)。一旦磁臂到達(dá)正確的磁道上,驅(qū)動器必須等待所需的扇區(qū)旋轉(zhuǎn)到磁頭之下,就開始讀寫,低端硬盤的速率是50MB/S,而高速磁盤的速率是160MB/S。
- 需要注意,固態(tài)硬盤(SolidStateDisk,SSD)不是磁盤,固態(tài)硬盤并沒有可以移動的部分,外形也不像唱片,并且數(shù)據(jù)是存儲在存儲器(閃存)中,與磁盤唯一的相似之處就是它也存儲了大量即使在電源關(guān)閉也不會丟失的數(shù)據(jù)。
- 許多計(jì)算機(jī)支持一種著名的虛擬內(nèi)存機(jī)制,這種機(jī)制使得期望運(yùn)行的存儲空間大于實(shí)際的物理存儲空間。其方法是將程序放在磁盤上,而將主存作為一部分緩存,用來保存最頻繁使用的部分程序,這種機(jī)制需要快速映像內(nèi)存地址,用來把程序生成的地址轉(zhuǎn)換為有關(guān)字節(jié)在RAM中的物理地址。這種映像由CPU中的一個稱為存儲器管理單元(MMU)的部件來完成。
- 緩存和MMU的出現(xiàn)是對系統(tǒng)的性能有很重要的影響,在多道程序系統(tǒng)中,從一個程序切換到另一個程序的機(jī)制稱為上下文切換(contextswitch),對來自緩存中的資源進(jìn)行修改并把其寫回磁盤是很有必要的。
I/O設(shè)備
- CPU和存儲器不是操作系統(tǒng)需要管理的全部,I/O設(shè)備也與操作系統(tǒng)關(guān)系密切。可以參考上面這個圖片,I/O設(shè)備一般包括兩個部分:設(shè)備控制器和設(shè)備本身。控制器本身是一塊芯片或者一組芯片,它能夠控制物理設(shè)備。它能夠接收操作系統(tǒng)的指令,例如,從設(shè)備中讀取數(shù)據(jù)并完成數(shù)據(jù)的處理。打印機(jī)接收用戶輸入的命令,打印文章
- 在許多情況下,實(shí)際控制設(shè)備的過程是非常復(fù)雜而且存在諸多細(xì)節(jié)。因此控制器的工作就是為操作系統(tǒng)提供一個更簡單(但仍然非常復(fù)雜)的接口。也就是屏蔽物理細(xì)節(jié)。任何復(fù)雜的東西都可以加一層代理來解決,這是計(jì)算機(jī)或者人類社會很普世的一個解決方案
- I/O設(shè)備另一部分是設(shè)備本身,設(shè)備本身有一個相對簡單的接口,這是因?yàn)榻涌诩炔荒茏龊芏喙ぷ?#xff0c;而且也已經(jīng)被標(biāo)準(zhǔn)化了。例如,標(biāo)準(zhǔn)化后任何一個SATA磁盤控制器就可以適配任意一種SATA磁盤,所以標(biāo)準(zhǔn)化是必要的。ATA代表高級技術(shù)附件(ATAttachment),而SATA表示串行高級技術(shù)附件(SerialATA)。
- AT是啥?它是舊M公司的第二代個人計(jì)算機(jī)的高級技術(shù)成果,使用1984年推出的6MHz80286處理器,這個處理器是當(dāng)時最強(qiáng)大的。現(xiàn)在SATA是很多計(jì)算機(jī)的標(biāo)準(zhǔn)硬盤接口。由于實(shí)際的設(shè)備接口隱藏在控制器中,所以操作系統(tǒng)看到的是對控制器的接口,這個接口和設(shè)備接口有很大區(qū)別。操作系統(tǒng)通過操控控制器接口操控設(shè)備接口。
- 每種類型的設(shè)備控制器都是不同的,所以需要不同的軟件進(jìn)行控制。專門與控制器進(jìn)行信息交流,發(fā)出命令處理指令接收響應(yīng)的軟件,稱為設(shè)備驅(qū)動程序(devicedriver)。每個控制器廠家都應(yīng)該針對不同的操作系統(tǒng)提供不同的設(shè)備驅(qū)動程序。為了使設(shè)備驅(qū)動程序能夠工作,必須把它安裝在操作系統(tǒng)中,這樣能夠使它在內(nèi)核態(tài)中運(yùn)行。
要將設(shè)備驅(qū)動程序裝入操作系統(tǒng),一般有三個途徑
- 每個設(shè)備控制器都有少量用于通信的寄存器,例如,一個最小的磁盤控制器也會有用于指定磁盤地址、內(nèi)存地址、扇區(qū)計(jì)數(shù)的寄存器。要激活控制器,設(shè)備驅(qū)動程序會從操作系統(tǒng)獲取一條指令,然后翻譯成對應(yīng)的值,并寫入設(shè)備寄存器中,所有設(shè)備寄存器的結(jié)合構(gòu)成了I/O端口空間。
- 在一些計(jì)算機(jī)中,設(shè)備寄存器會被映射到操作系統(tǒng)的可用地址空間,使他們能夠向內(nèi)存一樣完成讀寫操作。在這種計(jì)算機(jī)中,不需要專門的I/O指令,用戶程序可以被硬件阻擋在外,防止其接觸這些存儲器地址(例如,采用基址寄存器和變址寄存器)。在另一些計(jì)算機(jī)中,設(shè)備寄存器被放入一個專門的I/O端口空間,每個寄存器都有一個端口地址。在這些計(jì)算機(jī)中,特殊的IN和OUT指令會在內(nèi)核態(tài)下啟用,它能夠允許設(shè)備驅(qū)動程序和寄存器進(jìn)行讀寫。前面第一種方式會限制特殊的I/O指令但是允許一些地址空間;后者不需要地址空間但是需要特殊的指令,這兩種應(yīng)用都很廣泛。
實(shí)現(xiàn)輸入和輸出的方式有三種
- 在最簡單的方式中,用戶程序會發(fā)起系統(tǒng)調(diào)用,內(nèi)核會將其轉(zhuǎn)換為相應(yīng)驅(qū)動程序的程序調(diào)用,然后設(shè)備驅(qū)動程序啟動I/O并循環(huán)檢查該設(shè)備,看該設(shè)備是否完成了工作(一般會有一些二進(jìn)制位用來指示設(shè)備仍在忙碌中)。當(dāng)I/O調(diào)用完成后,設(shè)備驅(qū)動程序把數(shù)據(jù)送到指定的地方并返回。然后操作系統(tǒng)會將控制權(quán)交給調(diào)用者。這種方式稱為忙等待(busywaiting),這種方式的缺點(diǎn)是要一直占據(jù)CPU,CPU會一直輪詢I/O設(shè)備直到I/O操作完成。
-
第二種方式是設(shè)備驅(qū)動程序啟動設(shè)備并且讓該設(shè)備在操作完成時發(fā)生中斷。設(shè)備驅(qū)動程序在這個時刻返回。操作系統(tǒng)接著在需要時阻塞調(diào)用者并安排其他工作進(jìn)行。當(dāng)設(shè)備驅(qū)動程序檢測到該設(shè)備操作完成時,它發(fā)出一個中斷通知操作完成。
中斷
- 啟動設(shè)備并發(fā)出中斷的過程
- 如上圖所示,這是一個三步的I/O過程,第一步,設(shè)備驅(qū)動程序會通過寫入設(shè)備寄存器告訴控制器應(yīng)該做什么。然后,控制器啟動設(shè)備。當(dāng)控制器完成讀取或?qū)懭氡桓嬷枰獋鬏數(shù)淖止?jié)后,它會在步驟2中使用某些總線向中斷控制器發(fā)送信號。如果中斷控制器準(zhǔn)備好了接收中斷信號(如果正忙于一個優(yōu)先級較高的中斷,則可能不會接收),那么它就會在CPU的一個引腳上面聲明。這就是步驟3
- 在第四步中,中斷控制器把該設(shè)備的編號放在總線上,這樣CPU可以讀取總線,并且知道哪個設(shè)備完成了操作(可能同時有多個設(shè)備同時運(yùn)行)。
- 一旦CPU決定去實(shí)施中斷后,程序計(jì)數(shù)器和PSW就會被壓入到當(dāng)前堆棧中并且CPU會切換到內(nèi)核態(tài)。設(shè)備編號可以作為內(nèi)存的一個引用,用來尋找該設(shè)備中斷處理程序的地址。這部分內(nèi)存稱作中斷向量(interruptvector)。一旦中斷處理程序(中斷設(shè)備的設(shè)備驅(qū)動程序的一部分)開始后,它會移除棧中的程序計(jì)數(shù)器和PSW寄存器,并把它們進(jìn)行保存,然后查詢設(shè)備的狀態(tài)。在中斷處理程序全部完成后,它會返回到先前用戶程序尚未執(zhí)行的第一條指令,這個過程如下
中斷過程
- 實(shí)現(xiàn)I/O的第三種方式是使用特殊的硬件:直接存儲器訪問(DirectMemoryAccess,DMA)芯片。它可以控制內(nèi)存和某些控制器之間的位流,而無需CPU的干預(yù)。CPU會對DMA芯片進(jìn)行設(shè)置,說明需要傳送的字節(jié)數(shù),有關(guān)的設(shè)備和內(nèi)存地址以及操作方向。當(dāng)DMA芯片完成后,會造成中斷,中斷過程就像上面描述的那樣。
- 當(dāng)另一個中斷處理程序正在運(yùn)行時,中斷可能(并且經(jīng)常)發(fā)生在不合宜的時間。因此,CPU可以禁用中斷,并且可以在之后重啟中斷。在CPU關(guān)閉中斷后,任何已經(jīng)發(fā)出中斷的設(shè)備,可以繼續(xù)保持其中斷信號處理,但是CPU不會中斷,直至中斷再次啟用為止。如果在關(guān)閉中斷時,已經(jīng)有多個設(shè)備發(fā)出了中斷信號,中斷控制器將決定優(yōu)先處理哪個中斷,通常這取決于事先賦予每個設(shè)備的優(yōu)先級,最高優(yōu)先級的設(shè)備優(yōu)先贏得中斷權(quán),其他設(shè)備則必須等待。
總線
- 個人計(jì)算機(jī)的組件圖在小型計(jì)算機(jī)已經(jīng)使用了多年,并用在早期的舊MPC中。然而,隨著處理器核內(nèi)存變得越來越快,單個總線處理所有請求的能力也達(dá)到了上線,其中也包括舊MPC總線。必須放棄使用這種模式。其結(jié)果導(dǎo)致了其他總線的出現(xiàn),它們處理I/O設(shè)備以及CPU到存儲器的速度都更快。這種演變的結(jié)果導(dǎo)致了下面這種結(jié)構(gòu)的出現(xiàn)。
- —個大型的x86系統(tǒng)的結(jié)構(gòu)如上圖中的x86系統(tǒng)包含很多總線,高速緩存、內(nèi)存、PCIe、PCI、USB、SATA和DMI,每條總線都有不同的傳輸速率和功能。操作系統(tǒng)必須了解所有的總線配置和管理。其中最主要的總線是PCIe(PeripheralComponentInterconnectExpress)總線。
- Intel發(fā)明的PCIe總線也是作為之前古老的PCI總線的繼承者,而古老的PCI總線也是為了取代古董級別的ISA(IndustryStandardArchitecture)總線而設(shè)立的。數(shù)十Gb/s的傳輸能力使得PCIe比它的前身快很多,而且它們本質(zhì)上也十分不同。直到發(fā)明PCIe的2004年,先前大多數(shù)總線都是并行且共享的。共享總線架構(gòu)(sharedbusarchiteture)表示多個設(shè)備使用一些相同的電線傳輸數(shù)據(jù)。因此,當(dāng)多個設(shè)備同時發(fā)送數(shù)據(jù)時,此時你需要一個決策者來決定誰能夠使用總線。而PCIe則不—樣,它使用專門的端到端鏈路。傳統(tǒng)PCI中使用的并行總線架構(gòu)表示通過多條電線發(fā)送相同的數(shù)據(jù)字。例如,在傳統(tǒng)的PCI總線上,一個32位數(shù)據(jù)通過32條并行的電線發(fā)送。而PCIe則不同,它選用了串行總線架構(gòu)(serialbusarchitecture),并通過單個連接(稱為通道)發(fā)送消息中的所有比特?cái)?shù)據(jù),就像網(wǎng)絡(luò)數(shù)據(jù)包一樣。這樣做會簡化很多,因?yàn)椴辉俅_保所有32位數(shù)據(jù)在同一時刻準(zhǔn)確到達(dá)相同的目的地。通過將多個數(shù)據(jù)通路并行起來,并行性仍可以有效利用。例如,可以使用32條數(shù)據(jù)通道并行傳輸32條消息。
- 在上圖結(jié)構(gòu)中,CPU通過DDR3總線與內(nèi)存對話,通過PCIe總線與外圍圖形設(shè)備(GPU)對話,通過DMI(DirectMediaInterface)總線經(jīng)集成中心與所有其他設(shè)備對話。而集成控制中心通過串行總線與USB設(shè)備對話,通過SATA總線與硬盤和DVD驅(qū)動器對話,通過PCIe傳輸以太網(wǎng)絡(luò)幀。
- 不僅如此,每一個核USB(UnivversalSerialBus)是用來將所有慢速I/O設(shè)備(比如鍵盤和鼠標(biāo))與計(jì)算機(jī)相連的設(shè)備。USB1.0可以處理總計(jì)12Mb/s的負(fù)載,而USB2.0將總線速度提高到480Mb/s,而USB3.0能達(dá)到不小于5Gb/s的速率。所有的USB設(shè)備都可以直接連接到計(jì)算機(jī)并能夠立刻開始工作,而不像之前那樣要求重啟計(jì)算機(jī)。
- SCSI(SmallComputerSystemInterface)總線是一種高速總線,用在高速硬盤,掃描儀和其他需要較大帶寬的設(shè)備上。現(xiàn)在,它們主要用在服務(wù)器和工作站中,速度可以達(dá)到640MB/S。
計(jì)算機(jī)啟動過程
- 那么有了上面一些硬件再加上操作系統(tǒng)的支持,我們的計(jì)算機(jī)就可以開始工作了,那么計(jì)算機(jī)的啟動過程是怎樣的呢?下面只是一個簡要版的啟動過程
- 在每臺計(jì)算機(jī)上有一塊雙親板,也就是母板,母板也就是主板,它是計(jì)算機(jī)最基本也就是最重要的部件之一。主板一般為矩形電路板,上面安裝了組成計(jì)算機(jī)的主要電路系統(tǒng),一般有BIOS芯片、I/O控制芯片、鍵盤和面板控制開關(guān)接口、指示燈插接件、擴(kuò)充插槽、主板及插卡的直流電源供電接插件等元件。
- 在母板上有一個稱為基本輸入輸出系統(tǒng)(BasicInputOutputSystem,BIOS)的程序。在BIOS內(nèi)有底層I/O軟件,包括讀鍵盤、寫屏幕、磁盤I/O以及其他過程。如今,它被保存在閃存中,它是非易失性的,但是當(dāng)BIOS中發(fā)現(xiàn)錯誤時,可以由操作系統(tǒng)進(jìn)行更新。
- 在計(jì)算機(jī)啟動(booted)時,BIOS開啟,它會首先檢查所安裝的RAM的數(shù)量,鍵盤和其他基礎(chǔ)設(shè)備是否已安裝并且正常響應(yīng)。接著,它開始掃描PCIe和PCI總線并找出連在上面的所有設(shè)備。即插即用的設(shè)備也會被記錄下來。如果現(xiàn)有的設(shè)備和系統(tǒng)上一次啟動時的設(shè)備不同,則新的設(shè)備將被重新配置。然后BIOS通過嘗試存儲在CMOS存儲器中的設(shè)備清單嘗試啟動設(shè)備
- CMOS是ComplementaryMetalOxideSemiconductor(互補(bǔ)金屬氧化物半導(dǎo)體)的縮寫。它是指制造大規(guī)模集成電路芯片用的一種技術(shù)或用這種技術(shù)制造出來的芯片,是電腦主板上的一塊可讀寫的RAM芯片。因?yàn)榭勺x寫的特性,所以在電腦主板上用來保存BIOS設(shè)置完電腦硬件參數(shù)后的數(shù)據(jù),這個芯片僅僅是用來存放數(shù)據(jù)的。而對BIOS中各項(xiàng)參數(shù)的設(shè)定要通過專門的程序。BIOS設(shè)置程序一般都被廠商整合在芯片中,在開機(jī)時通過特定的按鍵就可進(jìn)入BIOS設(shè)置程序,方便地對系統(tǒng)進(jìn)行設(shè)置。因此BIOS設(shè)置有時也被叫做CMOS設(shè)置。
- 用戶可以在系統(tǒng)啟動后進(jìn)入一個BIOS配置程序,對設(shè)備清單進(jìn)行修改。然后,判斷是否能夠從外部CD-ROM和USB驅(qū)動程序啟動,如果啟動失敗的話(也就是沒有),系統(tǒng)將從硬盤啟動,boots設(shè)備中的第一個扇區(qū)被讀入內(nèi)存并執(zhí)行。該扇區(qū)包含一個程序,該程序通常在引導(dǎo)扇區(qū)末尾檢查分區(qū)表以確定哪個分區(qū)處于活動狀態(tài)。然后從該分區(qū)讀入第二個啟動加載程序,該加載器從活動分區(qū)中讀取操作系統(tǒng)并啟動它。
- 然后操作系統(tǒng)會詢問BIOS獲取配置信息。對于每個設(shè)備來說,會檢查是否有設(shè)備驅(qū)動程序。如果沒有,則會向用戶詢問是否需要插入CD-ROM驅(qū)動(由設(shè)備制造商提供)或者從Internet上下載。一旦有了設(shè)備驅(qū)動程序,操作系統(tǒng)會把它們(設(shè)備驅(qū)動程序)加載到內(nèi)核中,然后初始化表,創(chuàng)建所需的后臺進(jìn)程,并啟動登錄程序或GUI。
總結(jié)
以上是生活随笔為你收集整理的操作系统概述 记录操作系统相关知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十节 lxml.etree解析HTML
- 下一篇: C语言 项目 CRM系统(客户信息管理系