重定位可以执行的时机
1、在编译链接时,给一个固定的基地址进行重定位,代码只能放在事先确定好的位置上;
2、在程序载入时,根据内存情况确定一个基地址进行重定位,一旦载入就不能移动;
3、运行时重定位;
进程在内存中应该是可以移动的,因为进程上下文切换,内存中的代码总是可以重定位的;
可执行程序经过编译形成逻辑地址,运行时需要将逻辑地址转换成物理地址;
MMU:内存管理单元,将虚拟地址转换成物理地址
连续内存分配与管理
固定等长分区、固定变长分区、可变分区; 分区分配算法:首次适配、最佳适配、最差适配 外部碎片、内部碎片,碎片可以通过内存紧缩消除,但是时间成本太高
分段
通过段号和段内偏移确定一条指令或数据的位置,进程需要段表存储各个段的基址;
逻辑地址包括段号和段内偏移;
缺点:空间低效,碎片多
分页
没有外部碎片,内部碎片有上届;
依靠页表结构;逻辑地址包括页号和页内偏移;
多级页表:
页号连续,省略不记录,作为页表的下标来寻址对于的页表项;
通过页表访问,时间增加,引入TLB,存储页表;
段页结合
让段面向用户, 页面向硬件;
逻辑地址通过段表和页表转换成物理地址
王道考研
形成逻辑地址的阶段是链接;
使用交换技术时,如果一个进程正在进行IO操作,则不能换出内存;若正在临界区,可以;
段页结合存储管理中,每个进程一个段表,每个段一张页表;
内存保护需要由操作系统和硬件机构合作完成;
分段式内存管理没有内部碎片;
答案:C 这里提供给用户的物理地址空间是减去段表和页表之后的,由于段表和页表大小不确定,所以也不确定;
分页系统中的页面是由操作系统所感知的;
一个程序如何分段是在用户编程时决定的;
答案:A 其他选项和程序的动态链接无关
区分:可重入函数和可重入程序,上面是指可重入程序,可重入函数是指被多个线程调用时不会引入任何共享数据的函数;
引入段式管理方式,主要是为了满足用户下列要求:方便编程、分段共享、分段保护、动态链接和动态增长;
答案:B
答案:A 多个进程并发执行时,所有进程的页表大多数都驻留在内存中;
页式存储方式不能使用静态重定位;
最佳适配算法最容易产生内存碎片。