标签:虚拟内存换页

共 1 篇文章

动态载入和虚拟内存的按需调页的关联

《操作系统概念》(第七版)第九章虚拟内存那章有如下这样一句话:

动态载入能够帮助减轻这一限制(将整个进程放入内存才能执行的限制),但是它需要程序员特别小心并且需要一些额外的工作。

那么,额外工作指的是? 在网上基本上已经搜不到书上所说的动态载入了,基本上都是.dll或者.so之类的。 以下为个人理解,理解基于动态载入不需要操作系统提供特别支持这一事实。

动态载入是以子程序为单元的,也就将一个程序写成了许多的子程序。在使用到了某个子程序时,程序员需要在程序中编码以检查该子程序是否已在内存中,不在内存中时,需要编码将其动态载入,这里的程序员的编码就是所谓的额外开销。比如下面这段代码(我不确定是否正确):

// so_obj是一个变量标识是否导入了某个.so
if (so_obj == NULL) {
    // load it here
}

而虚拟内存是以页为单元的,一个程序被分放到了一些页上。而按需调页做到的是,当你在访问某一行代码,该代码在某一个不在内存中的页上时,操作系统会trap然后调页,从而将该代码所在页调入内存,从而看起来像是在“动态载入”了代码,但程序员没做任何事~

Update at 2014-05-26

因为动态加载和动态链接在操作系统的实现上已经模糊了 ...

阅读全文