中斷、異常和系統呼叫
阿新 • • 發佈:2021-10-04
作業系統的特徵
-
併發:同時發生但是執行有順序。
一段時間內可以執行的程式。cpu可以通過程序排程執行相應的程式,一個程式可以被建立為一個程序。 批處理系統: 將一組程式讀入外接儲存器中,再逐個將此程式載入記憶體中執行。直到一個程式執行完才載入下一個。 多道批處理系統:就是將多個程式一起載入記憶體中,如果有一個程式阻塞,就呼叫另外一個程式去執行,提高cpu的利用率。 這就是併發,意在提高cpu的利用率,不讓當前執行程式阻塞後,使得cpu空閒。、 並行:就是同時執行。比如一個cpu核心執行add指令的同時,另外一個cpu核心執行sub指令。add和sub指令是同時執行的。
-
共享(硬體資源的共享)
同時訪問的共享: 可以被同時訪問共享的資源,那麼它的資源必然是不可修改的。不怕因為其中某個執行緒對資源造成破壞導致其他執行緒受到影響。 互斥訪問的共享: 一個執行緒依賴另外一個執行緒的結果,那麼這個資源就是互斥訪問的,如果兩個執行緒不相互依賴,但是訪問相同的區域,那麼這個區域也是互斥的,因為每個執行緒訪問的方式不同,如果訪問的是不相同的塊,那麼這個資源是共享(這裡以記憶體為例)
共享在系統內部是互斥或者分時訪問的。不同的資源有不同的訪問方式。兩個記憶體同時訪問一個主存,但是訪問的是主存中的不同塊,那麼這個主存就可以被真正的共享,否則就是互斥共享。
-
虛擬
虛擬就是將有限的硬體資源抽象出來,使得每個程式好像都有自己獨有的一套硬體資源。 cpu -> process dis -> file memory -> address 等等。
-
非同步
就是計算不是一直執行到d的。是走走停停的。 例如在一個批處理系統中,一個程式可以佔用整個系統資源,但是程式的執行過程中,有時候會需要等待某些資源的結果,而需要程序阻塞,等待資源結果準備好後,在繼續執行,而這是cpu資源則造成浪費。那麼在多道批處理系統中,有多個程式併發執行,如果一個程序阻塞,那麼作業系統通過程序排程,將另外一個程序啟用。使用cpu資源。當cpu空閒時並且等待的資源已經處理好了,那麼作業系統在排程那個程序。完成那個工作。這就是走走停停,非同步執行。
書本的內容是有滯後性的,學習作業系統是站在一個更高的角度看作業系統,而不是把眼觀關注在某個瑣碎的點,學習框架也是如此。
啟動
BIOS(base input/output system):讓系統開機能夠然該系統對外設進行檢測
bootloader:載入os到記憶體中,讓cpu可以執行作業系統。
作業系統的開機過程:
電腦開機 -> Bios啟動進行自檢(判斷電腦執行的元件是不是都齊全)-> 89b將bootloader載入記憶體並將硬體控制權交給bootloader -> bootloader再將os載入記憶體中再將控制權交給os
作業系統與外設和硬體互動:
-
中斷
定義: 外設向作業系統發出請求的通知 源頭: 外設(例如:鍵盤,滑鼠,網絡卡,音效卡啥的) 時間: 非同步的,就是系統不知道什麼時候會產生中斷,比如說網絡卡接到一份報文,那麼就要立即通知作業系統處理 響應: 打斷先有執行程式,但是使用者感知不強.作業系統處理後,使得被打斷的程式繼續執行.
-
異常
定義: 應用被動產生的請求 源頭: 應用執行出現異常(陣列下標越界, 空物件啥的) 時間: 同步的,就是當前執行的程式發生異常,會立即通知系統,這個同步指的是當前佔用cpu的程式發出的異常,如果 是沒有佔用cpu的程式出現的異常就是非同步的(這顯然不可能發生) 響應: 當執行程式出現異常時,作業系統保持執行程式的所有執行狀態,並且判斷該異常能否處理,如果可以就處理異 常,處理好後繼續執行程式,如果異常無法處理那麼作業系統就殺死這個程式。
-
系統呼叫
定義: 應用向作業系統發出請求 源頭: 應用主動向作業系統發出的請求。 時間: 同步和非同步: 同步:發出請求的時間點是同步的,和異常一樣。 非同步:請求發出後,如果cpu資源空閒,那麼該程式就要阻塞,執行其他程式,當請求處理結束後該程式 才繼續執行,但是作業系統不知道請求什麼時候處理結束,這就是非同步的。 響應: 保留執行程式目前的所有狀態,直到作業系統處理完請求後,程式才繼續執行。
處理:
中斷: 硬體:外設產生中斷標記,cpu產生中斷號並通知作業系統。 軟體:作業系統保留當前執行程式的所有狀態,按照中斷號去終端表查詢處理該中斷的例程來處理服務,清楚中斷標 記,恢復被中斷程式的狀態。異常: 當前程式產生異常,作業系統儲存當前程式的執行狀態,作業系統根據異常編號處理異常,如果異常不能處理就殺死 該程式,不然就處理好異常繼續執行程式。系統呼叫: 執行的程式通過作業系統的介面(如windows的win32)向作業系統發出請求。 作業系統有兩個狀態: 一個時使用者態:沒有訪問和控制硬體的許可權,應用一般執行再這個狀態上。 一個是核心態:擁有對所有硬體的訪問和控制權限。 一個程式向作業系統發起系統呼叫請求,作業系統從使用者態變為核心態執行響應的請求,但是這個轉變會有很多開銷 的代價: 具體開銷有: 1.對映開銷:就是說我們要把使用者態的請求的所有資訊對映到核心態來。 2.堆疊的維護:作業系統和應用都有各自的堆疊。 3.引數的檢查:檢查系統呼叫的引數是否合法,不然會導致非法的操作,例如訪問其他程式的記憶體。 4.處理後的資料:核心態處理完後將資料賦值回程序的堆疊中。 5.硬體chache和記憶體的轉變,比如cache中的資料會被重新整理。cpu重新載入資料,訪問記憶體是耗時的。 這些開銷的主要目的就是提供一個安全可靠的系統,開銷的代價是指的。