[理工] 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