操作系统原理-清华大学

 

 通过段号找到所在物理内存的起始地址,段表里存的是逻辑地址的段号和物理地址的段号之间的映射关系。     段表由操作系统来建立

段表的信息:段的起始地址,长度的限制

段的起始地址+偏移量    来查找在物理地址的位置把相应的数据取出来交给cpu做处理

 

分页机制

 

 

 

 一个程序在运行的时候,这个程序本身的地址(逻辑地址)是连续的空间,将页号作为一个索引查页表,页表存的是以页号为索引的对应的帧号    加上偏移(和页的偏移一致)得到物理地址

 

 页表由操作系统建立  分页机制页偏移大小是固定的     

逻辑地址空间为连续的,映射到物理地址空间不一定连续,这样可以减少内存碎片

 

 页表概述

标志位:存在属性(有可能有一部分逻辑地址空间没有映射到物理地址空间) ,读过,写过

 

 分页性能机制的问题

 

缓存

把经常访问的页表项放到TLB中,此时就不需要查页表,当CPU得到一个逻辑地址,首先根据p查TLB,如果TLB存在p,很容易找到f,

当TLB表项不存在,就要去页表中查

 

通过某种机制可以使得TLB确实尽量少(编程的时候需要注意的)  X86而言有硬件完成

页的offset和页帧的offset大小是一样的

 

二级页表

寻址的时候首先找一级页表,把p1的number作为index,查找一级页表的页表项(存的是二级页表的起始地址),根据p2作为二级页表的Index,查找二级页表的页表项,找到帧号

这里体现了二级页表的另一个好处,就是p1对应的位置是flags,假如说resident bit是0,那么整个二级页表都不用在内存中保存,这个是一级页表无法实现的!

 

 

多级页表   目的:节省空间,虽然访问页表的开销会很大,但是节省了空间,以时间换空间了

例如64位系统采用5级页表。

反向页表

尽量使页表大小与逻辑空间大小没有那么大关系,和物理空间有对应关系

大空间地址问题

反向页表的实现

基于页寄存器page registers的方案

使用页寄存器

index不再是页号,而是页帧号(物理地址),页表下的内容为页号

residence bit:此帧是否被占用;
occupier:对应的页号p;
protection bit:保护位;

比如

物理内存大小:4096 * 4096 KB = 16 MB
页面大小:4064 bytes = 4 KB
页帧数: 4K
页寄存器使用的空间(假设是8 bytes的register):8 * 4096 = 32 KB
页寄存器的额外开销:32 KB / 16 MB = 0.2%
虚拟内存的大小:任意
可以看出内存开销很小。

实现:基于关联内存associative memory的方案

存在的问题
如果帧数较少,页寄存器可以被放置在关联内存中;
在关联内存中查找逻辑页号,成功了,帧号就被提取出来;失败了,页错误异常page fault。
限制这种方案的因素包括,大量的关联内存非常昂贵(难以在单个时钟周期内完成;耗电)。

实现:基于哈希表的方案

 述方法可能导致一个key出现2个以上的value对应。
这种方式仍然需要把反向页表放在内存中,做hash计算的时候还需要在内存中取数,仍然需要多次访问内存。

posted @ 2021-08-10 14:48  wsq1219  阅读(331)  评论(0编辑  收藏  举报