为了更好的实现计算机对内存资源的管理,操作系统提供了存储管理服务。如果将物理地址直接暴露给进程,用户程序在寻址内存的时候很有可能在无意中破坏操作系统,所以又对存储器做了一定的抽象,让进程间接地的访问物理地址
- 使用链表对空闲内存的进行管理(链表将存储器大小不等的的空闲地址块连接起来,进程当需要空闲区域时有五种获取规则)
20K | 30K | 10K | 2K | 3K | 5K | 15K | 25K |
(图中为链表所连接的空白块大小,现在有进程需要24K的区域)
- 首次适配(first fit):存储管理器按链表进行搜索,找到一个足够大的,24k放第二空白块
- 下次适配(next fit):工作方式和首次适配相同,不同点是他在找到合适适配区后记录位置下次从记录的位置 处开始适配(无论所找区域和上次是否相同),而不是像首次适配继续从开头找起
- 最佳适配 (best fit):找出可以容纳进程最小的取悦区域,最后一块25K
- 最差适配(worst fit):找出可以容纳的最大区域,第二快30K
- 快速适配(quick fit):将常用大小的区域单独维护形成新链表如下图;这样寻找起来就会十分快速 ,直接寻 到所在位置
5K | 10K | 15K | 20K | 25K |
- 虚拟内存
页面与页框(块):页面是指将作业的逻辑地址分为一系列大小相同的部分(偏移量),并为每个页进行编号(即虚拟页号),编号从0开始。块是指将物理内存也分为同样大小的地址空间,进行编号从#0开始。页与块相对应,每一个块中存放一页用户作业,实现映射
页表:虚拟地知道物理地址的一个映射,页表是一个函数,参数是虚拟页号,结果是物理页框号。其中虚拟地址包括虚拟页号和偏移量(低位)虚拟页号是映射物理地址的关键,偏移量就是指前面页面的内容。页面长度和偏移量有关,个数和虚拟页号有关
页面置换(转+补)
地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。
1.最佳置换算法(OPT)(理想置换算法):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
最佳置换算法可以用来评价其他算法。假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
进程运行时,先将7, 0, 1三个页面依次装入内存。进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。然后,访问页面0时,因为已在内存中所以不必产生缺页中断。访问页面3时又会根据最佳置换算法将页面1淘汰……依此类推,如图3-26所示。从图中可以看出釆用最佳置换算法时的情况。
可以看到,发生缺页中断的次数为9,页面置换的次数为6。
访问页面 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 | 1 | 2 | 0 | 1 | 7 | 0 | 1 |
物理块1 | 7 | 7 | 7 | 2 | |
2 | |
2 | |
|
2 | |
|
2 | |
|
|
7 | |
|
物理块2 | |
0 | 0 | 0 | |
0 | |
4 | |
|
0 | |
|
0 | |
|
|
0 | |
|
物理块3 | |
|
1 | 1 | |
3 | |
3 | |
|
3 | |
|
1 | |
|
|
1 | |
|
缺页否 | √ | |
√ | √ | |
√ | |
√ | |
|
√ | |
|