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