《非连续的地址管理机制》
概念一 页帧
页帧是物理地址的表现形式,用一个二元组<f,s>表达,页帧的大小一般是2的指数幂。
f表示的是该页帧的页帧号,s表示的是该访问地址在该页帧中的偏移量。
*注意:页帧号是从0开始计算的。*
例:要求<3,6>代表的物理地址。设地址空间用16bit表示,9bit表示页帧的大小。
答:该二元组表示,页帧号为3,在该页帧中的偏移是6。也就是说在该页前有(0,1,2)三个页帧,
每个页帧占据的空间用9个bit表示,也就是说:
2^9=512byte
512byte为一个页帧的大小。故在该页面之前就有512*3=1536个byte是分配给了其他页帧,而又因为
该地址在该页面内偏移量为6,所以该物理地址为:
1536+6=1542byte
总结:
物理地址的计算方式:2^S*f+o。
概念二 映射
映射是一种必不可少的手段,因为程序本身内部的内存是连续分布的。根据这个特性,我们把程序内
部的地址叫逻辑地址,而不同的管理机制能构成不同的映射方式。而映射方式主要讲的从逻辑地址得出物
理地址的手段,一般是由CPU中的MMU实现操作。
主要讲的是分段与分页两种管理机制。
概念三 分段
分段的主要特征体现在他本身逻辑地址表现为<s,addr>的一个二元组。
采用分段的管理机制的计算机内部的工作流程:
主要的重点在于段表,这里段表是存储了两个信息,一个是该段对应的物理地址的起始地址,一个是该
段的长度。
概念四 分页
分页的前提是建立在物理地址的页帧大小是等于逻辑地址的页的大小的。这样每一页被浪费的期望只有
1/2的页帧大小,一定程度上能减少碎片问题。但是每次去查询页表,就等于一次访存,所以每一次寻址就
访存了两次,所以需要Cache,这里的Cache表现为转译后备缓冲区(Translation Lookaside Buffer,
简称TLB)。而由于页表也占据内存,所以为了解决页表内存占用的问题,需要实现间接访问,实现间接访
问的数据结构是多层级页表。
普通的分页的工作原理如图
分段与分页的区别主要体现在:
- 页内的大小是固定的
- 页表中无limit项
主要讲讲页表。
页表中不仅存放着帧号,而且存放着一组标志位
- dirty digit
- resident digit
- clock/reference bit
这里2中的resident digit,主要关系到,其实程序不一定会放到内存中,有可能在虚拟化的时候存放到硬盘上了,所以如果当该页帧不存放在内存上时,这个时候页表中的resident digit也为0。当访问到resident digit为0的项时,则直接报异常。
下一篇更TLB