1. 程式人生 > >2018-2019-1 20165206 《信息安全系統設計基礎》第七周學習總結

2018-2019-1 20165206 《信息安全系統設計基礎》第七周學習總結

src 經典 ... c函數 上下文切換 鍵盤 fork函數 指令 for

- 2018-2019-1 20165206 《信息安全系統設計基礎》第七周學習總結

- 教材學習內容總結

- 異常

  • 異常是異常控制流的一種形式,它一部分由硬件實現,一部分由操作系統實現。異常是控制流中的突變,用來響應處理器狀態中的某些變化。

  • 異常處理程序運行在內核模式下,它們對所以的系統資源都有完全的訪問權限。

  • 異常的種類:異常可分為四類,中斷、陷阱、故障和終止。
    中斷是異步產生的,是來自處理器外部的I/O設備的信號的結果。
    陷阱是有意的異常,是執行一條指令的結果。
    故障由錯誤情況引起,它可能能夠被故障處理程序修正。
    終止是不可恢復的致命錯誤造成的結果,通常是一些硬件錯誤。

技術分享圖片

  • 系統調用

技術分享圖片

- 進程

  • 進程的經典定義是一個執行中的程序的實例。

  • 進程提供給應用程序的關鍵抽象:一個獨立的邏輯控制流,它提供一個假象,好像我們的程序獨占地使用處理器;一個私有的地址空間,它提供一個假象,好像我們的程序獨占地使用內存系統。

  • 並發流:一個邏輯流的執行在時間上與另一個流重疊。這兩個流稱為並發地執行。

  • 操作系統內核使用一種稱為上下文切換的較高層形式的異常控制流來實現多任務。

- 進程控制

  • 每個進程都有一個唯一的正數進程ID,PID。getpid函數返回調用進程的PID。getppid函數返回它的父進程的PID。

  • 可以認為進程總是處於下面三種狀態之一:
    1、運行:進程要麽在CPU上執行,要麽在等待被執行且最終會被內核調度。

2、停止:進程的執行被掛起,且不會被調度。

3、終止:進程永遠地停止了。

  • 進程終止的三種原因:收到一個信號,該信號的默認行為是終止進程、從主程序返回、調用exit函數。

  • fork函數:父進程通過調用fork函數創建一個新的運行的子程序。
    它只被調用一次,卻會返回兩次:一次是在父進程中,一次是在新創建的子進程中。
    在父進程中,fork返回子進程的PID。

代碼運行效果:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

  • exec函數:在Linux中,並不存在一個exec()的函數形式,exec指的是一組函數,一共有6個,分別是:
    int execl(const char path, const char arg, ...);
    int execlp(const char file, const char
    arg, ...);
    int execle(const char path, const char arg, ..., char const envp[]);
    int execv(const char
    path, char const argv[]);
    int execvp(const char
    file, char const argv[]);
    int execve(const char
    path, char const argv[], char const envp[]);
    其中只有execve是真正意義上的系統調用,其它都是在此基礎上經過包裝的庫函數。

exec函數族的作用是根據指定的文件名找到可執行文件,並用它來取代調用進程的內容,換句話說,就是在調用進程內部執行一個可執行文件。

代碼運行效果:

技術分享圖片

- 發送信號:

  • 用/bin/kill程序發送信號

  • 從鍵盤發送信號

  • 用kill函數發送信號

  • 用alarm函數發送信號

- 上周錯題總結

  • 第一題:
    write(2)的第一個參數fd可能來自()
    A .
    open(2)
    B .
    create(2)
    C .
    creat(2)
    D .
    close(2)

  • 答案:A C

2018-2019-1 20165206 《信息安全系統設計基礎》第七周學習總結