[理工] OS 外部碎裂

作者: w181496 (Kaibro)   2016-09-06 21:52:33
https://i.imgur.com/AwwPZGJ.jpg
如圖 想請問載入時期為什麼不能壓縮?
沒辦法用重新載入解決起始位址改變的問題嗎?
感謝
作者: boy00114 (ponny)   2016-09-06 21:58:00
我自己的理解是因為不是使用dynamic binding的話,一旦程式開始執行了,執行期間就不能變動他在memory 的位置。而dynamic binding 要到exe time才由os決定位置,所以可以用壓縮法任意更動位置
作者: shortid (我是短哀低)   2016-09-06 22:15:00
我的理解是Compaction要搬動process在記憶體中的位址,而除了dynamic binding之外的方式是不能在執行中更動位址的,因此無法支援compaction,不知道對不對
作者: kyuudonut (善良老百姓)   2016-09-06 22:58:00
重新載入就等於程式重頭開始了耶應該說 當你決定dynamic binding時 os就知道要幫你負責定位 但你假如是載入時期都決定好了的話 os不會管你既然不會管你 compaction這種事更不可能發生即使重新載入 loader也不見得知道新的位址在哪裡
作者: ken52011219 (呱)   2016-09-07 14:12:00
我的想法是 process 的PCB 內的值已經被link 於 Ready Q 上 根據 恐龍本的內文「The simplest compactionalgorithm is to move all processes toward one end of memory」 If relocation is static and is doneat assembly or load time 時 假如移動the addressof the process in memory 了話 PCB內的值勢必需要更動 否則會使原定process 要在某A處找data 但其實已經被移到B處當必須將從memory 已經定位好了重新排序時 必須確定這些process沒有在被讀取 或者是被設定為無法被變更的static 位置 重點概念應該還是上述原文的那段
作者: w181496 (Kaibro)   2016-09-07 15:26:00
感謝各位的回答!有點概念了 看來我想的還不夠周全 果然還是該看一下原文書

Links booklink

Contact Us: admin [ a t ] ucptt.com