看板 Grad-ProbAsk 關於我們 聯絡資訊
http://i.imgur.com/w2BzFNg.jpg 想請教各位1.1這題 網路上找到某份似乎是答案的答案給C 我的疑問是 Linux不是預設有copy on write嗎 這樣剛fork出來時不是會共用相同space嗎? 動到的時候才會複製一份吧? 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.9.220.247 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1477066695.A.8F4.html
ken52011219: Fork 時就會複製了10/22 00:23
ken52011219: 若有變更 Address space才開始複製 代表需要用到ker10/22 00:31
ken52011219: nel mode 的instruction 這樣mode切換頻率太高10/22 00:31
ken52011219: CPU utilization 會下降 不會這樣設計10/22 00:32
A4P8T6X9: 覺得答案錯XDD10/22 08:36
ken52011219: 應該是沒錯啦 @@ 原文「 A new process is created10/22 11:15
ken52011219: by the fork() System Call. The new process consis10/22 11:16
ken52011219: t of a copy of the address space of the original10/22 11:17
ken52011219: process.」 P.115有寫道10/22 11:17
A4P8T6X9: ok, 剛看一下應該是我錯了,vfork 才會共用10/22 12:02
w181496: 原文那段指的是沒copy on write的fork吧 如果有COW那也一10/22 12:59
w181496: 樣是複製一份嗎@@?10/22 12:59
ken52011219: 假如使用Copy on write 就會像你一開始所說的如此10/22 13:21
ken52011219: 但使用Copy on write 的前提是 此Virtual memory re10/22 13:22
ken52011219: gion that is mapped privately10/22 13:23
aa06697: 「現代」多數os的fork會copy on write(需要mmu幫忙) 就如10/22 13:27
aa06697: 你所說 是先共用 在寫入時才會配記憶體 但題目沒特別說是10/22 13:27
aa06697: linux... 而且也可能是很久的題目了?10/22 13:27
因為我記得unix-like才有fork()的sys call可用(Windos之類的就不是叫fork),所以就 直接當作他在問Linux XD 然後這題的確蠻久的(96交大),不過那時候就已經有COW技術的樣子 另外查到細節部分,COW一樣會建一份page table但指向原本的physical address,有更 改時才會建一份新的physical address
ken52011219: 恐龍本P.719 有寫出它的使用時機 可以參考一下10/22 13:32
ken52011219: 另外我一開始的留言並沒有考慮多個CALLERS時的狀況10/22 13:36
ken52011219: 抱歉 @@~10/22 13:36
※ 編輯: w181496 (39.8.228.39), 10/22/2016 14:29:53
aa06697: 對呀 每個process都有自己的page table, 子process還會先 10/22 17:42
aa06697: 標記哪些是modified frame 當要修改時 mmu就會去修改他的 10/22 17:42
aa06697: page table內容 指向私有的physical address 10/22 17:42