2018-2019-1 20165320 《資訊安全系統設計基礎》第七週學習總結
教材知識點總結
異常控制流
介紹:現代系統通過使控制流發生突變來對異常情況作出反應,這些突變稱為異常控制流。
異常:異常控制流的一種形式,一部分由硬體實現,一部分由作業系統實現。
異常處理的三種情況
處理程式將控制返回給當前指令Icurr,當事件發生時正在執行的指令。
處理程式將控制返回給Inext,如果沒有發生異常將會執行的下一條指令。
處理程式終止被中斷的程式。
異常表:
異常的剖析:
異常與過程呼叫的不同之處:
1、過程呼叫時,在跳轉處理程式之前,處理器將返回地址壓入棧中。根據異常的型別,返回地址要麼是當前指令,要麼是下一條指令。
2、處理器也把一些額外的處理器狀態壓到棧裡,在處理程式返回時,重新開始執行被中斷的程式會需要這些狀態。
3、如果控制從使用者轉移到核心,所有的這些專案都被壓到核心棧中,而不是壓到使用者棧中。
4、異常處理程式在核心模式下。
異常的類別
中斷:非同步發生,來自處理器外部的I/O裝置的訊號的結果。
陷阱:有意的異常,是執行一條指令的結果。
故障:故障由錯誤情況引起,它可能被故障處理程式修正。
終止:終止是不可恢復的致命錯誤造成的結果,通常是一些硬體錯誤。
異常屬性表:
Linux/x86-64
除法錯誤:除零,或結果對於目標運算元來說太大。
一般保護故障:程式引用已給未定義的虛擬記憶體區域。
缺頁:重新執行產生故障的指令。
機器檢查:檢測到致命的硬體錯誤。
屬性表:
系統呼叫:C程式用syscall函式可以直接呼叫任何系統呼叫。
程序
定義:一個執行中程式的例項
程序控制
獲取程序ID:getpid函式返回呼叫程序的PID,gettpid返回的是它的父程序的PID。
pid_t getpid(void); pid_t getppid(void);
建立和終止程序:
程序的三種狀態:
1、執行:程序在CPU中或等待被執行。
2、終止:程序永遠地停止。
3、停止:程序的執行被掛起,且不會被排程。
fork函式建立一個新的執行的子程序:
pid_t fork(void);
呼叫一次,返回兩次。
課上任務
參考虛擬碼實現ls的功能,提交程式碼的編譯,執行結果截圖
相關知識點:
- 函式 DIR opendir(const char pathname),即開啟檔案目錄,返回的就是指向DIR結構體的指標。
- 通過readdir函式讀取到的檔名儲存在結構體dirent的d_name成員中。
參考了上學期Java學習搭檔的程式碼如下:
執行結果:
實現ls -l 的功能,提交測試截圖
相關知識點:
dirent結構體:
stat結構體:
執行截圖: