20155335 俞昆 第六周《信息安全系統設計基礎》
阿新 • • 發佈:2017-10-30
tpi unix ddb 強制 所有 系列 總結 class 統一
教材學習內容總結
- 當Unix系統級函數遇到錯誤時,它們典型地會返回―1,並設置全局整數變量errno來表示什麽出錯了。程序員應該總是檢查錯誤,但是不幸的是,許多人都忽略了錯誤檢查,因為它使代碼變得臃腫,而且難以讀懂。
- 回收子進程的兩種方法:1,內核的init進程 2,父進程waitpid函數
- 如果父進程沒有回收它的僵死子進程就終止了,那麽內核就會安排init進城來回收它們。init進程的PID為1,並且是在系統初始化時創建的。
- 一個進程可以通過調用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 俞昆 第六周《信息安全系統設計基礎》