《現(xiàn)代操作系統(tǒng)(中文第四版)》筆記 第一章 引論

引言

計算機系統(tǒng)總的來說分為軟件和硬件,如下圖所示。多數(shù)計算機有兩種運行模式:內(nèi)核態(tài)和用戶態(tài)。軟件中最基礎(chǔ)的部分是操作系統(tǒng), 它運行在內(nèi)核態(tài)。操作系統(tǒng)具有對所有硬件的完全訪問權(quán)限,可以執(zhí)行機器能夠運行的任何指令。 其他軟件運行在用戶態(tài),只能使用部分機器指令。特別指出,哪些會影響極其的控制或可進行I/O操作的指令,在用戶態(tài)中的程序是禁止的。 無法直接運行指令,則只能通過操作系統(tǒng)提供的接口來達到目的。

image.png

操作系統(tǒng)由硬件進行保護,防止用戶試圖對其進行修改。

大家都操作過Windows、Linux等操作系統(tǒng),感覺這是不是就是操作系統(tǒng)? 這些與用戶交互的程序,實際上并不是操作系統(tǒng)的一部分,經(jīng)它們使用操作系統(tǒng)來完成工作,基于圖標的稱為圖形用戶界面(GUI, Graphical User Interface),我們所用的Windows就是這種,可以看到各種圖標; 基于文本的則通常稱為shell, 比如我們在Windows中使用cmd命令, 或者在Ubuntu中是Xshell等軟件程序。

不過,在嵌入式系統(tǒng)(沒有內(nèi)核態(tài))或解釋系統(tǒng)(如基于Java的操作系統(tǒng),它采用解釋方式,而非硬件方式區(qū)分組件), 上述劃分的邊界是比較模糊的。

1.1 什么是操作系統(tǒng)

操作系統(tǒng)是一種運行在內(nèi)核態(tài)的軟件,但這個說法并不總符合事實, 不過操作系統(tǒng)概括起來主要有兩個作用:

1.為應用程序(程序員)提供資源集的清晰抽象
2.管理硬件資源

第二點好理解, 第一點用大白話說就是給上層提供相應的接口或者方法, 讓上層應用程序可以使用資源。

另外,對于操作系統(tǒng)的理解,從不同角度看的,有不同的定義,

自頂向下看:操作系統(tǒng)為應用程序提供基本抽象,從而使應用程序在此基礎(chǔ)上可以組合功能。也就是說操作系統(tǒng)給應用程序提供良好、清晰、優(yōu)雅、一致的接口。(操作系統(tǒng)的實際用戶是應用程序,當然是通過應用程序員)應用程序直接和操作系統(tǒng)提供的這些接口打交道。

自底向上看:操作系統(tǒng)用來管理復雜系統(tǒng)的各個部分,對資源的請求進行分配,調(diào)節(jié)不同程序見相互沖突的資源請求。其中, 資源的管理有兩種不同方式實現(xiàn)多路復用(共享)資源:時間上復用和空間上復用

時間上復用:當一種資源在時間上復用時,就是不同程序或者用戶輪流使用它,大家排隊使用。例如:若在操作系統(tǒng)上只有一個CPU,而多個程序需要在CPU上運行,操作系統(tǒng)則首先把該CPU分配給某個程序,在它運行足夠長的時間后,另外一個程序進入CPU,以此類推

空間上復用:每個程序都得到資源的一部分,就不用排隊了,這就是多個位置,一人坐一個。例如:通常在若干個運行程序之間分配內(nèi)存,這樣每個運行程序都可以同時駐入內(nèi)存,這樣就提高了CPU的效率

以上兩種方式的公平和保護問題,由操作系統(tǒng)解決

1.2 操作系統(tǒng)的歷史

image.png

1.3 計算機硬件簡介

以下是一個常見的個人計算機構(gòu)成


image.png
處理器

處理器是計算機最重要的部分,就相當于人的大腦一樣,它會從計算機的內(nèi)存中取出指令去執(zhí)行。
在每個CPU基本周期中首先從內(nèi)存中取出指令,然后進行解碼分析指令的類型和操作數(shù),然后再去執(zhí)行,以此類推。程序按照這種方式被執(zhí)行完成。

每一個CPU都有一套自己的指令集,所以x86不能執(zhí)行ARM程序,ARM處理器也不能執(zhí)行x86程序。由于用來訪問內(nèi)存以得到指令或數(shù)據(jù)的時間要比執(zhí)行指令花費的時間長度的多,所以CPU內(nèi)部都有一些用來保存關(guān)鍵變量和臨時數(shù)據(jù)的寄存器。這樣,通常在指令集中可以提供一些將寄存器中的數(shù)據(jù)調(diào)入內(nèi)存的指令。除了一些用來保存臨時結(jié)果和變量的通用寄存器之外,還有一些只對程序員可見的專用寄存器。

專用寄存器的分類:

  • 程序計數(shù)器:它保存了將要取出的下一條指令的內(nèi)存地址,在指令取出后,程序計數(shù)器就被更新指向后繼的指令。

  • 堆棧指針:它指向當前內(nèi)存的棧頂位置,在函數(shù)調(diào)用中,棧的作用有:參數(shù)傳遞、局部變量分配、保存調(diào)用的返回地址、保存寄存器狀態(tài)以供恢復。棧由棧幀(stack Frame)組成。一次函數(shù)調(diào)用包括將數(shù)據(jù)和控制從代碼的一個部分傳遞到另外一個部分,棧幀與某個過程調(diào)用一一映射。每個函數(shù)的每次調(diào)用,都有它自己獨立的一個棧幀,這個棧幀中維持著所需要的各種信息。

  • 程序狀態(tài)字寄存器:這個寄存器包含了條件碼位、CPU優(yōu)先級、模式(用戶態(tài)或者內(nèi)核態(tài)),以及其他控制位

對操作系統(tǒng)來說,它必須知道所有的寄存器。在時間共享CPU中,操作系統(tǒng)經(jīng)常會終止正在運行的某個程序啟動另外一個程序,當操作系統(tǒng)去終止某個程序的時候,必須將這個程序中的所有寄存器值保存起來,以便再次啟動該程序時,可以把這些寄存器重新裝載。

現(xiàn)代CPU的讀取指令機制:

流水線機制:一個CPU可以有單獨的取指單元、解碼單元和執(zhí)行單元,于是當他執(zhí)行指令n的時候,還可以對指令n+1解碼,并且讀取指令n+2。

超標量CPU:這種機制中有多個執(zhí)行單元,例如:一個CPU用于整數(shù)算數(shù)運算,一個CPU用于浮點數(shù)算數(shù)運算,一個CPU用于布爾運算。兩個或更多的指令同時被取出、解碼并裝入暫存緩沖區(qū)中直到它們執(zhí)行完畢。只要有一個執(zhí)行單元空閑,就檢查保持緩沖區(qū)中是否還有可處理的指令,如果有,就把指令從緩沖區(qū)中移出并執(zhí)行。這種設計存在一種隱含的作用,即程序的指令經(jīng)常不會按照順序執(zhí)行。

image.png

CPU模式的切換

可以通過TRAP指令將用戶態(tài)切換成內(nèi)核態(tài),并啟用操作系統(tǒng)。當在工作完成之后,在系統(tǒng)調(diào)用后面的指令把控制權(quán)返回給用戶程序。

超線程和多核技術(shù)參見深入理解計算機第一章內(nèi)容

存儲器

存儲器是計算機第二重要的器件,存儲器是采用一種分層的結(jié)構(gòu),頂層的存儲器速度較高,容量較小,與底層的存儲器相比每位成本較高,其差別往往是十億數(shù)量級。


image.png
  • 寄存器:和CPU一樣快,32為CPU中容量為32位,64位CPU中為64位,小于1KB
  • 高速緩存:由硬件控制。主存被分割成高速緩存行,大小為64字節(jié),地址0至63對應高速緩存行0,地址64至127對應高速緩存行1,以此類推。下面詳細介紹:
  1. L1緩存:一般與處理器同片封裝,訪問速度幾乎和寄存器一樣快,用來將已解碼的指令調(diào)入CPU的執(zhí)行引擎,通常是2-4個時鐘周期,大小為8KB-128KB
  2. L2緩存:可以在處理器中也可以在外部,訪問速度大約是是10個時鐘周期,大小為64KB-8MB
  3. L3緩存:在處理器外部被多核處理器共享,訪問速度大約是30~40個時鐘周期,大小為4MB-128MB
    image.png

    在多核芯片中,L2緩存是否被所有
    image.png
  • 主存:系統(tǒng)存儲的主力。通常稱主存為隨機訪問存儲器(RAM)
  • 磁盤:磁盤是一種機械裝置,因此在磁盤上隨機訪問數(shù)據(jù)時會較慢。但是容量較大。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容