※ 本文為 swallow.bbs. 轉寄自 cd.twbbs.org 更新時間: 2013-01-31 01:53:38
看板 P_RedWolf
作者 標題 [OS] 羅習五 10/16
時間 Thu Oct 16 10:06:21 2008
※ 引述《ch890333 (紅狼)》之銘言:
第三章投影片
Context switch (必發生在kernel mode)
- context switch overhead
os fash 記憶體, 瞬間進行數百次。
圖: 紅切換到藍(時間到或紅結束)
紅做完後切到 kernel mode, 把cpu中的相關資訊存到Task control block(紅)
從Task control block(藍)載入cpu, 回到user mode跑藍
(圖的藍色接cpu線應該要反向)
Process Creation
-parent的parent的...的亞當夏娃是手動一行一行刻出來的 可看成演化樹(之後有圖)
Resource sharting
-子只能共用父的一半(視os設定), 避免無限fork
Execution (分兩種)
-平行執行
-等子回報後 才繼續下一步
Address space
-父子相同
-當子load program 後會改變
Ex: (in unix)
fork
exec可在fork後使用,原資料會被拋棄, process memory會被更新
exec()當中重要的參數是執行檔(????)的路徑
投影片寫的是kernel mode的程式碼, bty 標準的fork內只可以寫c, cpp不吃
fork過程()
-先做memory cpy
-作Task
-把Task設為ready 並放到ready queue
-到scheduler開始執行
TCB在???就是表示一個process
ls如何運作??
shell 執行fork 後wait
fork出來 exec(ls), 然後把執行檔位置換成ls(長條圖下方兩塊), 結束
回到parent 用wait看執行時間等child資料 or 回收執行失敗的資源
(圖有錯 return 0;)
main.....?????恍神3min......
強者救我 sr0.....
gcc static 要看的檔案.c 後可strace
parent pid = 8088 (此為投影片範例 )
child pid =
投影片中parent執行else child執行if
自己回家做做看 用gdb()看pid
pid 是否為零可以讓程式好寫, parent可以用pid(表)來看child(們)的狀態
child很少需要關心parent ;getppid()
Process Termination
-自然老死(正常結束 下為不正常結束)
-失去控制被os kill
-root或parent 爽爽就 kill
parent掛了child??
有些os會強制child跟著kill
Cooperation Process
-Independent: os要保證不會互相干擾
-Cooperation: 共同作同一件事
共享記憶體/加速/Modularity/方便 (=..=)
Producer-Consumer Problem
-buffer被清空 consumer要不到 (大不了不做)
-buffer被productorn塞滿 (會摳盪...奶油溢出來XDD)
int in=0;
int out=0;
->這兩個是用來指buffer的頭尾
=> producer: 只改in
consumer: in會讀入 只改out =>程式執行會順利是因為in/out只會被一個程式修改
這個雖然記憶體浪費一單位(4byte) 但在多核心上執行效率比要好
--
紅狼太難畫了 我可不可以畫隻紅色的波利就好?
『紅色波利』
◢◣
--
* Origin: 中正築夢園 (CcuDream.twbbs.org) ★ From: 140.123.104.234
*carlcarl 推薦:推薦這篇文章 08/10/16
*ht19880723 轉錄:本文已轉錄到看板 P_ht19880723 08/10/21
*ch890333 推薦:推薦這篇文章 08/10/21
*ht19880723 加分:sorry 補加分 08/10/21
--
※ 看板: Swallow 文章推薦值: 0 目前人氣: 0 累積人氣: 132
回列表(←)
分享