1. 程式人生 > >20155335 俞昆 第六周《信息安全系統設計基礎》

20155335 俞昆 第六周《信息安全系統設計基礎》

tpi unix ddb 強制 所有 系列 總結 class 統一

教材學習內容總結

  • Unix系統級函數遇到錯誤時,它們典型地會返回―1,並設置全局整數變量errno來表示什麽出錯了。程序員應該總是檢查錯誤,但是不幸的是,許多人都忽略了錯誤檢查,因為它使代碼變得臃腫,而且難以讀懂。
  • 回收子進程的兩種方法:1,內核的init進程 2,父進程waitpid函數
  1. 如果父進程沒有回收它的僵死子進程就終止了,那麽內核就會安排init進城來回收它們。init進程的PID為1,並且是在系統初始化時創建的。
  2. 一個進程可以通過調用waitpid函數來等待它的子進程終止或停止。
  • Unix外殼和Web服務器這樣的程序大量使用了fork和e×ecve函數。外殼是一個交互型的應用程序,它代表用戶運行其他程序。最早的外殼是Sh程序,後面出現了一些變種,比如csh、tcsh、ksh和bash。外殼執行一系列的讀/求值(readeaUte)步驟然後終止。
  • 在某些情況下,read和write傳送的字節比應用程序要求的要少,這些不足值不表示有錯誤
    • 數據傳送指令有四個變種:movb傳送字節、movw傳送字、movl傳送雙字、movq傳送四字。
    • 匯編代碼也使用後綴‘l‘來表示4字節整數和8字節雙精度浮點數。二者之所以不矛盾使用為使用的是一組完全不同的指令和寄存器。
    • 指令可以對16個寄存器的低位字節中存放的不同大小的數據進行操作
    • 操作數:立即數、寄存器、內存引用。
    • 數據傳送指令:MOV類。
    • 源操作數指定一個立即數,目的操作數指定一個位置。
    • cltq指令只作用於寄存器%eax和%rax
    • 局部變量通常是保存在寄存中,而不是內存中。訪問寄存器比訪問內存要快得多。
    • 當強制類型轉換既涉及大小有涉及C語言中的符號變化時,操作應該先改變大小。
    • 棧指針%rsp保存著棧頂元素的地址。
    • 壓棧:先移動指針,再存儲數據。出棧:先讀數據,再上移指針。
    • 棧和程序代碼以及其他形式的程序數據都是放在統一內存中,所以程序可以用標準的內存尋址方法訪問棧內的任意位置。
    • ADD:addb\w\l\q

1、判定等待集合的成員(由參數pid確定) pid>0,等待集合就是一個單獨的子進程,它的進程ID等於pid pid=-1,等待集合就是由父進程所有的子進程組成的

2、修改默認行為 WNOHANG:默認行為是掛起調用進程,直到有子進程終止 WUNTRCED:默認行為是只返回已經終止的子進程 WNOHANG|WUNTRCED:立即返回

3、檢查已回收子進程的退出狀態

4、錯誤條件 如果調用進程沒有子進程,那麽waitpid返回-1,設置errno為ECHILD 如果waidpid函數被一個信號中斷,那麽它返回-1,並設置errno為EINTR

5、wait函數

6、使用waitpid的示例

  • 8.4.4 讓進程休眠

教材學習中的問題和解決過程

代碼調試中的問題和解決過程

文件上傳出現了問題,重新整理了一下

20155335 俞昆 第六周《信息安全系統設計基礎》