03计算机操作系统-非连续地址分配(分段,分页)

前言

本文是非连续地址分配课程的总结。本文主要介绍非连续地址分配, 非连续地址分配主要有:分段和分页机制。分段有段表,分页有页表,来建立逻辑地址(page)与物理地址(frame)的映射关系。为了减少页表的容量,讨论了一下反向页表。
非连续地址分配的好处有:一个程序的物理地址空间是非连续的,可以减少地址碎片的产生;更好的内存利用;允许共享代码与数据;支持动态加载和动态链接。

分段

一个应用程序有堆区,栈区,程序数据和程序text段,分别对应不同的段。这些段在逻辑地址空间上是连续的,利用分段机制,在物理内存中这些段被划分在不同的区域。

寻址

首先一个段可以划分为固定的大小区域(这个由计算机决定),逻辑地址是由段号+段内偏移组成。
因为分段机制和分页机制的寻址差不多,分段机制的寻址就不详细的介绍了。大家可以通过分页机制来同理得到。

分页

分页地址空间

分页地址空间页的大小是由计算机决定的,一般为2的指数倍(一般为512,1024,4k…)。Page表示逻辑页,frame表示物理页。
其中page由页号+页内偏移,frame由帧号+帧内偏移,其中页号与帧号可以不相等,对应关系由页表建立,偏移是一样的,但是页空间乐意比帧空间大。具体的对应关系如图所示,图中为简单的寻址关系。
寻址机制
页空间和帧空间的对应关系

页表

每一个应用程序都维护这一个页表,页表存储的逻辑地址空间和物理地址空间,因此页表带来的性能上的开销是非常大的,每次取一个物理地址,需要访问两次内存两次,以及空间的代价划分很大。
页表的结构为dirty bit + resident bit + clock/reference bit + frame number

解决时间开销

由于页表很大的情况下,需要把维护的页表放在内存中,这样在访问一个物理地址的时候需要访问两次内存,这个开销同样还是很大的。因此使用CPU中的快表(TLB)来实现常用的页表。当访问TLB出现访问异常的时候,就会在内存中的页表去寻找对应的关系。
程序应该具有一定的局部性
在这里插入图片描述

解决空间开销

采用多级页表的结构。对於单一页表来说,其逻辑页与物理帧的对应关系如果不存在但是任然需要在页表中表示出来,但是对于多级页表来说,如果在一级页表中就发现了对应关系不存在,这样后面的整个二级页表都不需要表示了,这样就节省了空间
在这里插入图片描述

反向页表

一般逻辑地址空间会很大,如果使用反向页表的话,就直接与物理地址有关,那这样页表就会小很多。
建立页表的时候,我们是以帧号为索引,但是页表是通过页号来寻找帧号的。这里有一种方法叫关联存储器,关联存储器可以并行的查找帧号和页号。但是在硬件上的开销很大,只能做得很小。大的管理存储器访问速度还会下降。
第二种方法是使用hash table,其实这一块讲得有点模糊,我搞懂了再补充

文中ppt来源于视频中的截图

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章