《现代操作系统》第1章读书笔记-- 引论(未完成)
第1章 引論
現(xiàn)代計算機(jī)系統(tǒng)由一個或多個處理器、主存、磁盤、打印機(jī)、鍵盤、鼠標(biāo)、顯示器、網(wǎng)絡(luò)接口以及各種其他輸入/輸出設(shè)備組成。一般而言,現(xiàn)代計算機(jī)系統(tǒng)是一個復(fù)雜的系統(tǒng)。如果每位應(yīng)用程序員都不得不掌握系統(tǒng)的所有細(xì)節(jié),那就不可能再編寫代碼了。而且,管理這些部件并加以優(yōu)化使用,是一件挑戰(zhàn)性極強(qiáng)的工作。所以,計算機(jī)安裝了一層軟件,稱為操作系統(tǒng),它的任務(wù)是為用戶程序提供一個更好、更簡單、更清晰的計算機(jī)模型,并管理剛才提到的所有設(shè)備。
用戶與操作系統(tǒng)交互的程序,基于文本的通常稱為shell,而基于圖標(biāo)的則稱為圖形用戶界面(GUI),它們實際上并不是操作系統(tǒng)的一部分,盡管這些程序使用操作系統(tǒng)來完成工作。
下圖給出了這里所討論的主要部件的一個簡化視圖。圖的底部是硬件。硬件包括芯片、電路板、磁盤、鍵盤、顯示器以及類似的設(shè)備。在硬件的頂部是軟件。多數(shù)計算機(jī)有兩種運行模式:內(nèi)核態(tài)和用戶態(tài)。軟件中最基礎(chǔ)的部分是操作系統(tǒng),它運行在內(nèi)核態(tài)(也稱為管態(tài),核心態(tài))。在這個模式中,操作系統(tǒng)具有對所有硬件的完全訪問權(quán),可以執(zhí)行機(jī)器能夠運行的任何指令。軟件的其余部分運行在用戶態(tài)下。 在用戶態(tài)下,只使用了機(jī)器指令中的一個子集。特別地,那些會影響機(jī)器的控制或可進(jìn)行I/O操作的指令,在用戶臺中的程序里是禁止的。在本書中,我們會不斷討論內(nèi)核態(tài)和用戶態(tài)之間的差別,這些差別在操作系統(tǒng)的運行中扮演著極其重要的角色。
1.1 什么是操作系統(tǒng)
作為擴(kuò)展機(jī)器的操作系統(tǒng)
作為資源管理者的操作系統(tǒng)
1.2操作系統(tǒng)歷史
第一代:真空管和穿孔卡片(1945-1955)
第二代:晶體管和批處理系統(tǒng)(1955-1965)
第三代:集成電路和多道程序設(shè)計(1965-1980)
第四代:個人計算機(jī)(1980至今)
第五代:移動計算機(jī)(1990至今)
1.3計算機(jī)硬件簡介
從概念上講,一臺簡單的個人計算機(jī)可以抽象成類似于下圖的模型。CPU、內(nèi)存以及I/O設(shè)備都由一條系統(tǒng)總線連接起來并通過總線與其他設(shè)備通信。
1.3.1處理器
計算機(jī)的“大腦”是CPU,它從內(nèi)存中取出指令并執(zhí)行之。在每個CPU基本周期中,首先從內(nèi)存中取出指令,解碼以確定其類型和操作數(shù),接著執(zhí)行之,然后取指、解碼并執(zhí)行下一條指令。按照這一方式,程序被執(zhí)行完成。
每個CPU都有一套可執(zhí)行的專門指令集。所以,x86處理器不能執(zhí)行ARM程序,而ARM處理器也不能執(zhí)行x86程序。由于用來訪問內(nèi)存以得到指令或數(shù)據(jù)的時間要比執(zhí)行指令花費的時間長得多,因此,所有的CPU內(nèi)都會有一些用來保存關(guān)鍵變量和臨時數(shù)據(jù)的寄存器。這樣,通常在指令集中提供一些指令,用以講一個字從內(nèi)存調(diào)入寄存器,以及將一個字從寄存器存入內(nèi)存。其他的指令可以把來自寄存器、內(nèi)存的操作數(shù)組合,或者用兩者產(chǎn)生一個結(jié)果,如將兩個字相加并把結(jié)果存在寄存器或內(nèi)存中。
除了用來保存變量和臨時結(jié)果的通用寄存器外,多數(shù)計算機(jī)還有一些對程序員可見的專用寄存器。其中之一是程序寄存器,它保存了將要取出的下一條指令的內(nèi)存地址。在指令取出之后,程序計數(shù)器就被更新以便指向后繼的指令。
另一個寄存器是堆棧指針,它指向內(nèi)存中當(dāng)前棧的頂端。該棧包含了每個執(zhí)行過程的棧幀。一個過程的棧幀保存了有關(guān)的輸入?yún)?shù)、局部變量以及那些沒有保存在寄存器中的臨時變量。
當(dāng)然還有程序狀態(tài)字(Program Status Word,PSW) 寄存器。這個寄存器包含了條件碼位(由比較指令設(shè)置)、CPU優(yōu)先級、模式(用戶態(tài)或內(nèi)核態(tài)),以及各種其他控制位。用戶程序通常讀入整個PSW,但是,只對其中的少量字段寫入。在系統(tǒng)調(diào)用和I/O中,PSW的作用很重要。
操作系統(tǒng)必須知曉所有的寄存器。在時間多路復(fù)用(time multiplexing)CPU中,操作系統(tǒng)經(jīng)常會中止正在運行的某個程序并啟動(或再啟動)另一個程序。每次停止一個運營著的程序時,操作系統(tǒng)必須保存所有的寄存器值,這樣在稍后該程序被再次運行時,可以把這些寄存器重新裝入。
為了改善性能,CPU設(shè)計師早就放棄了同時讀取、解碼和執(zhí)行一條指令的簡單模型。許多現(xiàn)代CPU具有同時取出多條指令的機(jī)制。例如,一個CPU可以有單獨的取指單元、解碼單元和執(zhí)行單元,于是當(dāng)它執(zhí)行指令n時,還可以對指令n+1解碼,并且讀取指令n+2. 這樣的機(jī)制稱為流水線(pipeline) ,下圖a是一個有著三個階段的流水線示意圖。更長的流水線也是常見的。
在多數(shù)的流水線設(shè)計中,一旦一條指令被取進(jìn)流水線中,它就必須被執(zhí)行完畢,即便前一條取出的指令是條件轉(zhuǎn)移,它也必須被執(zhí)行完畢。
比流水線更先進(jìn)的設(shè)計是超標(biāo)量CPU,如圖b所示。在這種設(shè)計中,有多個執(zhí)行單元,例如,一個CPU用于整數(shù)算數(shù)運算,一個CPU用于浮點算術(shù)運算,一個CPU用于布爾運算。兩個或更多的指令被同時取出、解碼并裝入暫存緩沖區(qū)中,直至它們執(zhí)行完畢。只要有一個執(zhí)行單元空閑,就檢查保持緩沖區(qū)中是否還有可處理的指令,如果有,就把指令從緩沖區(qū)中移出并執(zhí)行之。這種設(shè)計存在一種隱含的作用,即程序的指令經(jīng)常不按順序執(zhí)行。在多數(shù)情況下,硬件負(fù)責(zé)保證這種運算的結(jié)果與順序執(zhí)行指令時的結(jié)果相同,但是,仍然有部分令人煩惱的復(fù)雜情形被強(qiáng)加給操作系統(tǒng)處理,我們會在后面討論這種情況。
除了用在嵌入式系統(tǒng)中的非常簡單的CPU之外,多數(shù)CPU都有兩種模式,即前面提到的內(nèi)核態(tài)和用戶態(tài)。通常,在PSW中有一個二進(jìn)制位控制這兩種模式。當(dāng)在內(nèi)核態(tài)運行時,CPU可以執(zhí)行指令集中的每一條指令,并且使用硬件的每種功能。在臺式機(jī)和服務(wù)器上,操作系統(tǒng)在內(nèi)核態(tài)下運行,從而可以訪問整個硬件。而在大多數(shù)嵌入式系統(tǒng)中,一部分操作系統(tǒng)運行在內(nèi)核態(tài),其余的部分則運行在用戶態(tài)。
相反,用戶程序在用戶態(tài)下執(zhí)行,僅允許執(zhí)行整個指令集的一個子集和訪問所有功能的一個子集。一般而言,在用戶態(tài)中有關(guān)I/O和內(nèi)存保護(hù)的所有指令是禁止的。當(dāng)然,將PSW中的模式位設(shè)置成內(nèi)核態(tài)也是禁止的。
為了從操作系統(tǒng)中獲得服務(wù),用戶程序必須使用系統(tǒng)調(diào)用(system call) 以陷入內(nèi)核并調(diào)用操作系統(tǒng)。TRAP指令把用戶態(tài)切換成內(nèi)核態(tài),并啟用操作系統(tǒng)。當(dāng)有關(guān)工作完成之后,在系統(tǒng)調(diào)用后面的指令把控制權(quán)返回給用戶程序。到目前為止,請讀者把它看成一個特別的過程調(diào)用指令,該指令具有從用戶態(tài)切換到內(nèi)核態(tài)的特別能力。
有必要指出的是,計算機(jī)使用陷阱而不是一條指令來執(zhí)行系統(tǒng)調(diào)用。其他的多數(shù)陷阱是由硬件引起的,用于警告有異常情況發(fā)生,如試圖被零除或浮點下溢等。在所有的情況下,操作系統(tǒng)都得到控制權(quán)并決定如何處理異常情況。有時,由于出錯的原因,程序不得不停止。在其他情況下可以忽略出錯(如下溢數(shù)可以被置為零)。
多線程和多核芯片
Moore定律指出,芯片中晶體管的數(shù)量每18個月翻一番。Moore定律已經(jīng)保持了30年,有希望至少再保持10年。在那以后,每個晶體管中原子的數(shù)目會變得太少,并且量子力學(xué)將扮演重要角色,這將阻止晶體管尺寸的進(jìn)一步縮小。
使用大量的晶體管引發(fā)了一個問題:如何處理它們呢? 這里我們可以看到一種處理方式:具有多個功能部件的超標(biāo)量體系結(jié)構(gòu)。 但是,隨著晶體管數(shù)量的增加,再多晶體管也是可能的。一個由此而來的必然結(jié)果是,在CPU芯片中加入了更大的緩存,人們肯定會這么做,然而,原先獲得的有用效果將最終消失。
顯然,下一步不僅是由多個功能部件,某些控制邏輯也會出現(xiàn)多個。 Intel Pentium 4 引入了被稱為==多線程(Multithreading)或超線程(hyperthreading)==的特性。近似地說,多線程允許CPU保持兩個不同的線程狀態(tài),然后在納秒級的時間尺度內(nèi)來回切換。(線程是一個輕量級進(jìn)程,即一個運行中的程序。將在第2中討論。)例如,如果某個進(jìn)程需要從內(nèi)存中讀出一個字(需要花費多個時鐘周期),多線程CPU則可以切換至另一個線程。多線程不提供真正的并行處理。在一個時刻只有一個進(jìn)程在運行,但是線程的切換時間則減少到納秒數(shù)量級。
1.3.2存儲器
1.3.3磁盤
1.3.4I/O設(shè)備
1.3.5總線
1.3.6啟動計算機(jī)
1.4操作系統(tǒng)大觀園
大型機(jī)操作系統(tǒng)
服務(wù)器操作系統(tǒng)
多處理器操作系統(tǒng)
個人計算機(jī)操作系統(tǒng)
掌上計算機(jī)操作系統(tǒng)
嵌入式操作系統(tǒng)
傳感器節(jié)點操作系統(tǒng)
實時操作系統(tǒng)
智能卡操作系統(tǒng)
1.5操作系統(tǒng)概念
進(jìn)程
地址空間
文件
輸入/輸出
保護(hù)
shell
個體重復(fù)系統(tǒng)發(fā)育
1.6系統(tǒng)調(diào)用
用于進(jìn)程管理的系統(tǒng)調(diào)用
用于文件管理的系統(tǒng)調(diào)用
用于目標(biāo)管理的系統(tǒng)調(diào)用
各種系統(tǒng)調(diào)用
Windows Win32 API
1.7操作系統(tǒng)結(jié)構(gòu)
單體系統(tǒng)
層次式系統(tǒng)
微內(nèi)核
客戶端-服務(wù)器模式
虛擬機(jī)
外核
1.8依靠C的世界
C語言
頭文件
大型編程項目
運行模型
總結(jié)
以上是生活随笔為你收集整理的《现代操作系统》第1章读书笔记-- 引论(未完成)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性代数的问题:是否存在这样的矩阵,它满
- 下一篇: 《现代操作系统》第7章读书笔记--虚拟化