2018-2019-1 20165220 《資訊安全系統設計基礎》第7周學習總結
教材學習內容總結
控制流:控制轉移序列。
控制轉移:從一條指令到下一條指令。
異常控制流:現代作業系統通過使控制流發生突變來對系統狀態做出反應,這些突變稱為異常控制流。
一、異常(硬體觸發異常,軟體處理異常)
1、異常的剖析,如下圖所示:
2、異常處理
異常表:當處理器檢測到有事件發生時,它會通過跳轉表,進行一個間接過程呼叫(異常),到異常處理程式。
異常號:系統中可能的某種型別的異常都分配了一個唯一的非負整數的異常號。異常號是到異常表中的索引。
異常類似於過程呼叫,但有一些重要的不同之處。
一旦硬體觸發了異常,異常處理程式則由軟體完成。
3、異常的類別——中斷、陷阱、故障和終止
a)中斷處理:非同步是指硬體中斷不是由任何一條指令造成的,而是由外部I/O裝置的事件造成的。
b)陷阱和系統呼叫:系統呼叫是一些封裝好的函式,內部通過指令int n實現。
陷阱最重要的用途是提供系統呼叫。系統呼叫執行在核心模式中,並且可以訪問核心中的棧。
系統呼叫的引數是通過通用暫存器而不是棧來傳遞的,如,%eax儲存系統呼叫號,%ebx,%ecx,%edx,%esi,%edi,%ebp最多儲存六個引數,%esp不能用,因為進入核心模式後,會覆蓋掉它。
c)故障
d)終止
二、程序(作業系統層):邏輯控制流,私有地址空間,多工,併發,並行,上下文,上下文切換,排程。
程序就是一個執行中的程式例項。系統中的每個程式都是執行在某個程序的上下文中的。
程序提供給應用程式的關鍵抽象:a)一個獨立的邏輯控制流 ;b)一個私有的地址空間
一些概念:併發流:併發流一個邏輯流的執行在時間上與另一個流重疊,叫做~
併發:多個流併發執行的一般現象稱為併發。
多工:多個程序併發叫做多工。
並行:併發流在不同的cpu或計算機上,叫~
3、私有地址空間
一個程序為每個程式提供它自己的私有地址空間。
執行應用程式程式碼的程序初始時是在使用者模式中的。程序從使用者模式變為核心模式的唯一方法是通過異常。
linux提供了/proc檔案系統,它允許使用者模式程序訪問核心資料結構的內容。
4、上下文切換,排程
上下文切換:作業系統核心使用叫上下文切換的異常控制流來實現多工。
上下文切換:a)儲存當前程序的上下文;b)恢復某個先前被搶佔的程序被儲存的上下文; c)將控制傳遞給這個新恢復的程序
排程:核心中的排程器實現排程。
當核心代表使用者執行上下文切換時,可能會發生上下文切換。如果系統呼叫發生阻塞,那麼核心可以讓當前程序休眠,切換到另一個程序,如read系統呼叫,或者sleep會顯示地請求讓呼叫程序休眠。一般,即使系統呼叫沒有阻塞,核心亦可以決定上下文切換,而不是將控制返回給呼叫程序。
中斷也可能引起上下文切換。如,定時器中斷。
三、訊號(作業系統和應用程式之間):程序之間傳送訊號
一種更高層次的軟體形式的異常,稱為unix訊號,它允許程序中斷其他程序。
低層的硬體異常是由核心異常處理程式處理的,正常情況下,對使用者程序而言是不可見的。訊號提供了一種機制,通知使用者程序發生了這些異常。
1、訊號處理過程
1)傳送訊號:核心通過更新目的程序中上下文中的某個狀態,傳送一個訊號給目的程序。傳送訊號有兩個原因:a)核心檢測到一個系統事件; b)一個程序呼叫kill函式,心事發送訊號
2)接收訊號:,目的程序就接收了訊號。程序可以忽略這個訊號,終止或者通過執行訊號處理程式捕獲這個訊號。
注意:待處理訊號,一種型別的訊號只能有一種待處理訊號,多餘的不會排隊,而是會舍掉 ; 訊號還可以阻塞。
2、傳送訊號:/bin/kill , kill函式,鍵盤,alarm函式
程序組:每個程序都只屬於一個程序組,程序組是由一個程序組ID來標識的。預設的,一個子程序和它的父程序同屬於一個程序組。
在任何時刻,至多隻有一個前臺作業和0個或多個後臺作業。外殼為每個作業建立一個獨立的程序組,一個作業對應一個程序組。