基本分页存储管理的基本概念
连续分配的缺点:
1.固定分区分配:缺乏灵活性,产生大量内部碎片,内存利用率很低
2.动态分区分配:产生很多外部碎片,可以用‘紧凑’技术处理,但代价很高
连续分配:为用户进程分配的必须是一个连续的内存空间。
非连续分配:为用户分配的是一些分散的内存空间。
基本分页存储管理思想:
把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分。
具体方法:
将内存空间分为一个个大小相等的分区,每个分区就是一个‘页框’,或称‘页帧’,‘内存块’,‘物理块‘。每个页框有页框号,从0开始。
将用户进程的地址空间也分为与页框大小相等的一个个区域,称为“页”或“页面”。每个页面也有一个编号,即“页号”,从0开始。(进程的最后一个页面可能没那么大,页框不能太大,防止产生过大的内部碎片)
操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。页面不必连续存放,也不必按先后顺序来,可以放到不相邻的页框中。
如何实现地址转换:
1.算出逻辑地址对应的页号
2.知道页号在内存中的起始地址
3.算出逻辑地址在页面内的“偏移量”
4.物理地址=页面始址+页面偏移量
页号=逻辑地址/页面长度(取整数部分)
页内偏移量=逻辑地址%页面长度
1号页在内存中存放的起始位置450
逻辑地址结构:
如果让每个页面大小为2的整数幂,计算机可以很方便的得出一个逻辑地址对应的页号和页内偏移量。
地址结构包含两个部分:前一部分为页号,后一部分为页内偏移量。
如果有k位表示“页内偏移量”,则说明该系统一个页面的大小为2^k个存储单元
如果有k位表示“页号“,说明在该系统中,一个进程最多允许2^m个页面
页表:
为了能知道进程的每个页面在内存中存放的位置
1.一个进程对应一张页表
2.进程的每一页对应一个页表项
3.每个页表项由页号和块号组成
4.页表记录进程页面和实际内存块有对应关系
5.每个页表项的长度是相同的,但是长度是"隐含的"
基本地址变换机制:
页表寄存器:
基本地址变换机构可以借助进程的页表将逻辑地址转化为物理地址。
通常会在系统中设置一个页表寄存器,存放页表在内存中的起始地址F和页表长度M
进程未执行时,页表的始址和页表长度放在进程控制块(PCR)中,当进程被调度时,操作系统内核会把他们放到页表寄存器中。
注意:页面大小是2的整数幂
地址变换过程:
设页面大小为L,逻辑地址A到物理地址E的变换过程如下:
1.计算页号p和页内偏移量w
2.比较页号P和页表长度M,如果P>=M,则发生月结中断,否则继续执行
3.页表中页号P对应的页表项地址=页表起始地址F+页号*页表项长度,取出该页表项内容b,即为内存块号
4.计算E=b*L+w,就可以用得到的物理地址E去访存了。
两次访问内存:
第一次,查页表;第二次,访问内存
其他细节
在分页存储管理的系统中,只要确定了每个页面的大小,逻辑结构就确定了。因此,页式管理中地址是一维的
为了方便页表的查询,通常会让一个页表占更多的字节,使得每个页面恰好可以装下整个页表项。
具有快表的地址变换机构
局部性原理:
时间局部性:
如果执行了程序中某条指令,那么不久后这条指令有可能再次被执行;如果某个数据被访问过,不久之后有可能再次被访问
空间局部性:
一旦程序访问了某个存储单元,不久之后,其附近的存储单元页有可能被访问。因为很多数据在内存中是连续村存放的
快表:
又称联想寄存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换过程。内存中的页表常称为慢表。
引入快表后,地址变换过程:
1.cpu给出逻辑地址,由某个硬件算得页号,页内偏移量,将页号与快表中的所有页号进行比较
2.如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页的内存块号,再将内存块号与页内偏移量拼接成物理地址,最后访问该物理地址对应的内存单元。因此,若快表命中,则访问某个逻辑地址仅需一次访存即可。
3.如果没有找到匹配的页号,则需要访问内存的页表,找到对应页表项,得到页面存放的内存块号,再将内存块号和与页偏移量拼接成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表未命中,需要访存两次。(注,找到页表项后,应同时将其放入快表,若快表已满,则根据一定的算法进行替换)
因为局部性原理,一般快表的命中率可以达到90%以上
两级页表
将长的页表分组,每个内存块刚好可以放入一个分组,为离散分配的页表再建立一张页表,称为页目录表。
如何实现地址变换:
1.按照地质结构将逻辑地址拆分成三部分
2.从PCB中读出页目录表始地址,再根据一级页号查页目录表,找到下一级页表在内存中存放的位置
3.根据二级页号查表,找到最终想访问的内存块号
4.结合页偏移量得到物理地址
若访问的页面不在内存中,则产生缺页中断(内中断),然后将目标页面从外存调入内存。
细节:
若采用多级页表机制,则各级页表的大小不能超过一个页面。
n级页表的访存次数为n+1。