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

2018-2019-1 20165316 《資訊安全系統設計基礎》第七週學習總結

2018-2019-1 20165316 《資訊安全系統設計基礎》第七週學習總結

教材學習內容總結

8.1 異常

  • 異常(exception)就是控制流中的突變,用來響應處理器狀態中的某些變化。具體過程是:處理器狀態中的變化(事件)觸發從應用程式到異常處理程式的突發的控制轉移(異常);在異常處理程式完成處理後,它將控制返回給被中斷的程式或者終止。

  • 異常可以分為四類——中斷(interrupt)、陷阱(trap)、故障(fault)和終止(abort)。
    • 中斷是非同步發生的,是來自處理器外部的 I/O 裝置的訊號的結果,中斷處理程式將控制返回到下一條指令。除了它,其他異常均為同步發生,叫做故障指令(fault instruction)。
    • 陷阱是有意的異常,是執行一條指令的結果,陷阱處理程式將控制返回到下一條指令,它最重要的用途是在使用者程式和核心之間提供一個像過程一樣的介面,叫做系統呼叫。
    • 故障由錯誤情況引起,它可能能夠被故障處理程式修正。如果故障修理成功,則返回原指令,否則終止程式。
    • 終止是不可恢復的致命錯誤造成的後果,通常是一些硬體錯誤,具有終止應用程式的能力。

  • Linux/x86-64 系統中的異常
    • C程式用 syscall 函式可以直接呼叫任何系統呼叫。
    • 從系統呼叫返回時,%rcx 和 %rll 都會被破壞,%rax 包含返回值。

8.2 程序

  • 程序的經典定義就是一個執行中程式的例項。
  • 系統中每個程式都執行在某個程序的上下文(context)中。上下文是由程式正確執行所需的狀態組成的。這個狀態包括存放在記憶體中的程式的程式碼和資料,它的棧、通用目的暫存器的內容、程式計數器、環境變數以及開啟檔案描述符的集合。
  • 地址空間底部是保留給使用者程式的,包括通常的程式碼、資料、堆和棧段。程式碼段總是從地址 0x400000 開始。
  • 在核心排程了一個新的程序執行後,它就搶佔當前程序,並使用一種稱為上下文切換的機制來將控制轉移到新的程序,上下文切換:1)儲存當前程序的上下文,2)恢復某個先前被搶佔的程序被儲存的上下文,3)將控制傳遞給這個新恢復的程序。

8.4 程序控制

  • 父程序通過呼叫 fork 函式建立一個新的執行的子程序。
  • 新建立的子程序幾乎但不完全與父程序相同。子程序相當於從 fork() 函式繼續執行。但是子程序和父程序有不同的 PID,這也是它們最大的區別。
  • 在父程序中,fork 返回子程序的 PID。在子程序中,fork 返回 0。子程序的 PID 總是為非零。
  • 一個程序可以通過呼叫 waitpid 函式來等待它的子程序終止或者停止,waitpid 返回導致 waitpid 返回已終止子程序的 PID。
  • execve 函式在當前程序的上下文中載入並執行一個新程式。

程式碼託管

上週考試錯題總結

Linux shell建立的每個程序開始都預設開啟的檔案有(ABC)

A .標準輸入(fd=0)

B .標準輸出(fd=1)

C .標準錯誤(fd=2)

D .顯示器和鍵盤

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積)
目標 1000行 30篇 400小時
第一週 156/200 2/2 20/20
第二週 121/200 2/2 18/30
第三週 107/200 2/2 15/30
第四周 111/200 2/2 16/30
第五週 101/200 1/1 18/30
第六週 110/200 2/2 19/30
第七週 90/200 1/1 18/30