在CSI-IX一篇中,我们详细的介绍了虚拟存储器的相关概念和技术。但了解这些往往不能揭开我们心中的很多疑团。比如,程序的加载执行过程是怎么样,磁盘的可执行文件怎么虚拟存储器机制关联起来并运行于整个生命周期,虚拟存储机制如是如何组织虚拟页面?或许,学习完操作系统我们还并未完全理解虚拟存储器,或者,我们只记住了一大堆诸如页表,段式,页式存储的概念和一些页面置换的算法等等。不过,这些并不能完全归责于我们自身,国内的许多教材往往死板且偏向于理论,从而使很多人失去好奇想法。
好了闲话暂且不说,我们本篇的内容不会很多,我会再次从hello程序谈起,结合链接、进程和虚拟存储器的整个工作过程,希望这些会让你有新的收获。最后,我还会谈起一些可能的迷惑。
虚拟存储器和windows虚拟内存
在介绍加载之前,我们首先介绍下这两个概念,windows虚拟内存同Unix下的交换分区(swap space)概念类似,它是用少量的磁盘空间作为内存的拓展,是为了缓解机器的内存紧张而引入的东西。对于物理存储器较小的机器,如果设定了虚拟内存,在内存紧张的情况下将其中暂时不用的页面置换出来,暂时存放在虚拟内存中,待到需要的时候再从虚拟内存调入存储器中。可能我们遇到我类似的情况,在打开的多个程序中,如果长时间不用某一个程序,而在某一个瞬间忽然打开,就能够听到磁盘的转动声音,这个可能就是内存将页面从虚拟内存重新载入引起的。
虚拟内存在windows下对应有一个pagefile.sys系统分页文件,我们可以在计算机属性卡下对进行设置,如果对于内存空间比较充裕的,可以考虑删除分