作者:
w181496 (Kaibro)
2016-09-06 21:52:33https://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也不見得知道新的位址在哪裡
我的想法是 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感謝各位的回答!有點概念了 看來我想的還不夠周全 果然還是該看一下原文書