在虚拟内存管理中,地址变换机构将逻辑地址变换为物理地址,形成该逻辑地址的阶段是_______。

admin2015-12-30  35

问题 在虚拟内存管理中,地址变换机构将逻辑地址变换为物理地址,形成该逻辑地址的阶段是_______。

选项 A、编辑
B、编译
C、链接
D、装载

答案B

解析 编译后的模块需要经过链接才能装载,而链接后形成的地址才是整个程序的完整逻辑地址空间。以C语言为例:C语言经过预处理(cpp)→编译(ccl)→汇编(as)→链接(ld)产生可执行文件。其中链接的前一步,产生了可重定位的二进制的目标文件。C语言采用源文件独立编译的方法,如程序main.c,file1.c,file2.c,file1.h,file2.h,在链接的前一步生成了main.o,file1.o,file2.o,这些目标模块采用的逻辑地址都从0开始,但只是相对于该模块的逻辑地址。链接器将这三个文件,libC和其他的库文件链接成—个可执行文件。链接阶段主要完成了重定位,形成整个程序的完整逻辑地址空间。
例如,file1.o的逻辑地址为0~1023,main.o的逻辑地址为0~1023,假设链接时将file1.o链接在main.o之后,则重定位之后file1.o对应的逻辑地址就应为1024~2047。
这一题有不少同学会对C选项有疑问,认为产生逻辑地址的阶段是链接,下面引入一个线性地址的概念来解释为什么链接是不对的。为了区分各种不同的地址,下面也把逻辑地址和物理地址一并介绍。
逻辑地址(Logical Address)是指在程序各个模块中的偏移地址。它是相对于当前模块首址的地址。
线性地址(Linear Address)是指在分页式存储管理中单个程序所有模块集合在一起构成的地址,即可以理解为《操作系统联考复习指导》一书中的全局的逻辑地址。
物理地址(PhysicalAddress)是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。它实际上就是物理内存真正的地址。线性地址的概念在很多操作系统书中并不涉及,在这里引入只是为了把这题解释清楚。选择C选项的同学应该是把题目所说的逻辑地址当成了线性地址。实际上,很多书中也不会把这线性地址和逻辑地址区分得那么清楚,而统一的称为逻辑地址,这就导致了这题的错误选择。
总之,在这题中,逻辑地址指的就是段内的偏移量而不是链接后生成的整个程序全局的逻辑地址空间,所以逻辑地址是编译时产生的。编者在查相关资料的过程中看到了关于这个问题的很多不一样的说法,这也是操作系统这门课的一个“特色”,所以这里综合了各个说法,并给出了一个觉得相对合理的解释,读者不必过多纠结,实际考试碰上这种问题的概率还是很低的。
转载请注明原文地址:https://jikaoti.com/ti/sTfjFFFM
0

最新回复(0)