第四章 存储器管理
1、什么是静态链接、装入时动态链接和运行时的动态链接?
静态链接是在生成可执行程序的时候就把库中的内容加入到程序中。静态链接在一开始就把所有模块都加载进入内存,所以如果模块很多的话效率就会被大大拉低。
载入时动态链接是在将功能模块读入内存时当把一个模块载入内存时检查有调用关系的模块载入内存。
运行时动态链接是在执行程序调用到模块内容时再将动态库中的相应模块载入到内存。
2. 简述分页系统和分段系统的异同点。
分页就是将进程的逻辑地址空间分成若干大小相等的片(即页),然后装入内存。
分段就是用户可以把自己的作业按逻辑关系划分为若干个段,每个段都是从0开始编址,并有自己的名字和长度
相同点:
两者都属于存储器管理方式中的离散分配方式。都要通过地址映射机构来实现地址变换。
不同点:
1、页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。
段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。
2、页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。
段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。
3、分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。
分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
3. 什么情况下需要重定位?为什么要引入重定位?
由于一个作业装入到与其地址空间不一致的存储空间,要对有关地址部分的调整,这个时候需要重定位。
当程序装入到内存后,链接地址跟运行地址不同,我们需要用到变量的时候直接用变量名访问它就行了。有的程序不可避免也要用到变量,各个变量在内存中的位置自然也不相同。因为这些变量没有固定的地址,那么程序在运行的过程中只有重定位后才可以访问相关资源。
4. 在具有快表的段页式存储管理方式中,如何实现地址变换?
在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段长TL。
进行地址变换时,首先利用段号S,将它与段长TL进行比较。若S<TL,表示未越界,利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号P来获得对应页的页表项位置,从中读出该页所在的物理块号b.再利用块号b和页内地址来构成物理地址。<