看板 Grad-ProbAsk 關於我們 聯絡資訊
(1) 這個畫圖應該比較好懂. 可惜我不太會用BBS畫 先說幾個重點: 1. child copy parent的當前所有的環境變數, 包含PC, 所以child出生後會執行fork() 的下一行 2. fork( )傳回child's pid給parent, 傳0給child 3. parent和child執行順序不一定, 這裡假設parent先執行, 不考慮cascading termination. 令一開始的process是P0 P0輸出 "start of test" 第一個fork, 生出P1(假設pid = 1001) 輸出 "my pid = 1001" 第二個fork, 生出P2(假設pid = 1002) 輸出 "my pid = 1002" P0結束 考慮P1 輸出 "my pid = 0" 第二個fork, 生出P3(假設pid = 1003) 輸出 "my pid = 1003" P1結束 考慮P2 輸出 "my pid = 0" P2結束 考慮P3 輸出 "my pid = 0" P3結束 可能的輸出結果為 "start of test" "my pid = 1001" "my pid = 1002" "my pid = 0" "my pid = 1003" "my pid = 0" "my pid = 0" (2) (a) 16 bits (b) pointer內存放memory的physical address, 所以大小為14 bits (c) 3 + (14 - 12 ) = 5 bits (d) 16 * 2 ^ (16 - 12) = 256 bits = 32 bytes. (e) inverted page table entry 數 = memory frame 數 = 2^(14-12) = 4個 有錯請更正~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.231.189.87
lightergogo:感謝回答 03/17 19:36
assassin88:我是第二題的(b)(d)不會算 可否解釋一下14, 16的原因嗎 03/17 19:40
assassin88:第二個fork,生出P2(假設pid = 1002) 請問1002可設別的? 03/17 19:45
lightergogo:d.frame個數=64k/4096=16 而題目說一個entry佔16bits 03/17 19:46
lightergogo:所以16*16 = 256 bits = 32bytes 03/17 19:47
assassin88:frame個數應該是以physical為準吧? 03/17 19:54
lightergogo:打錯 應該是page個數=64k/4096=16 03/17 19:57
uminchu185:PID是自己假設的, 範圍從2~32768都行 03/17 19:57
uminchu185:pointer那題是C語言的東西, 指標內存放memory實體位址 03/17 19:59
uminchu185:再用運算子"*"取出位址的內容 03/17 20:01
holik0123:我想問一個CHILD PROCESS 如果去FORK 那他的 PID會改變? 03/17 20:31
holik0123:例如17995那題要再執行都要判斷PID值 我有點搞不懂 03/17 20:34
uminchu185:不會改變行程的pid, 你要判斷的是fork()傳回的值 03/17 21:38
uminchu185:像這題是剛好是有宣告個變數叫pid, 用來接收fork()傳回 03/17 21:39
uminchu185:的內容. 03/17 21:40
holik0123:那可以請問你FORK==0他的意思是? 03/17 22:00
uminchu185:if(fork()==0) //只有新行程會進入if 03/17 22:28
holik0123:我那時算是第一次回圈有4個未FORK的PROCESS進入第二次 03/17 22:50
holik0123:迴圈 第二次有16個未FORK進入第三次可是這樣是錯的 03/17 22:52
holik0123:可以指點一下嗎? 03/17 22:52
http://uminchu185.myweb.hinet.net/1.png
會有9個行程進入i = 1; 接下來只看P0, P0含自己會有9個行程進入i = 2. 所以共有9*9個行程進入i = 2, ... 最後i = 2結束時有9*9*9個行程. ※ 編輯: uminchu185 來自: 125.231.189.87 (03/17 23:23)