1. 程式人生 > 實用技巧 >作業系統 第八節 CPU管理的直觀想法

作業系統 第八節 CPU管理的直觀想法

文章目錄

1 CPU的工作原理

CPU通過地址匯流排來指定儲存器單元,CPU與記憶體或其它器件之間的資料傳輸是通過資料匯流排來進行的

CPU從CS:IP指向的記憶體單元取出指令並執行,執行完後IP+1指向下一條指令,接著CPU取出下一條指令並執行

CPU不斷地取指,執行,只要設定好CS:IP的初值即可,讓它指向一段程式的開始地址,CPU就從這裡開始不斷地取指執行

2 CPU進行不同工作時的效率

對於下面的一段程式,fprintf()是一條I/O指令,如果將這條指令更換成一條任意的計算指令,那麼效率會提高(10^6)倍,也就是說執行一條I/O指令所耗費的時間是足以執行大量的計算指令

在程式中I/O指令執行耗費的時間遠大於單純計算用的時間,I/O指令執行非常慢
在這裡插入圖片描述
如果在一個程式中,前面有10^6條計算指令,後面只有一條I/O指令,那麼當CPU執行完前面的計算指令後,會等待處理I/O,這段執行I/O的時間約等於執行前面計算指令的時間,CPU在I/O處理時,只是在等待,那麼CPU的效率只有50%

實際中,每二三十條計算指令就會伴隨一條I/O指令,如果CPU在I/O處理這段時間只是等待,那麼效率會更低,如何讓CPU在等待的這段時間工作,使其高效,不停息工作是CPU管理的問題,我們需要使CPU忙碌起來

3 如何管理CPU使其高效率執行

管理CPU使其高效工作可以類比時間分配的問題,做飯時,先去燒水,燒水的時間淘米,洗菜,燒完水後蒸米,蒸米的時間炒菜

CPU的管理思想:多道程式,交替執行

對於單道程式想要執行兩個任務,需要先完成任務A,其中包括A任務對於CPU的需求和對於裝置dev1(如印表機)和dev2的使用,只有等完成程式A後,才可以去執行程式B,但是在任務A中使用dev1時,CPU是空閒的

如果使用多道程式,交替執行的方式,當任務A使用dev1時,CPU不要等待轉去為任務B服務,當任務A需要CPU時,發出提示,這時CPU再回去為任務A服務,這樣的處理思想,對於多個程式也仍適用,交替執行不僅提高了CPU的工作效率,且提高了裝置的使用效率,從而提高整體工作效率

在這裡插入圖片描述

在這裡插入圖片描述
一個CPU上交替地執行多個程式稱為 併發

4 如何完成程式間地切換

CPU根據CS:IP的指向取指執行,在恰當的時刻更改CS:IP的指向就可以完成併發

但是切換到另一個程式後,新的程式也要使用CPU,即使用CPU內的各個暫存器,並更改裡面的值以便使用,所以我們需要儲存切換前程式的詳細資訊

只更改CS:IP是不夠的,還需要記錄一些內容,為了繼續成功執行切換前的程式,我們需要記錄切換前程式的一些資訊,如切換前程式的各個暫存器內值,每個程式有了一個存放資訊的結構:PCB

在這裡插入圖片描述

5 程序與程式

將正在執行的程式稱為程序,磁碟中的沒跑起來的程式稱為靜態程式

執行的程式和靜態的程式是不一樣的,對於所有程序,需要儲存它們的“樣子”,即將它們的資訊,狀態儲存起來,存到各自對應的PCB中

程序是正在執行的程式:
1,程序有開始,有結束,程式沒有
2,程序會走走停停,走停對程式沒有意義
3,程序需要記錄暫存器的值ax,bx等,程式不需要