1. 程式人生 > >2018-2019-1 20165320 《資訊安全系統設計基礎》第七週學習總結

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結構體:

執行截圖: