存储器(内存)管理之分页存储管理

前叙除“多重分区”的分配方法外,都属于连续分区分配。会产生“内零头”和“外零头”,而通过“紧凑”技术又会牺牲CPU时间,因而产生了离散分区分配。
一.纯分页系统
1.页面与页框

*1.把作业的地址空间划分为大小相等的片,称为页面/页,Page。
*2.把内存的物理空间划分为同页大小的片,称为页框/存储块,PageFrame。
*3.分页存储分配是指对作业的内存分配以页为单位,且不要求页框邻接。
*4.纯分页分配是指作业分配时,一次性分配给所需要的全部页框,若页框数不足,则等待。
*5.显然最后一个页框不一定会装满而形成碎片,称“业内碎片”,因此为减少碎片,似乎页大小应尽量以减少浪费;但每页太小,则所需的页数会增加,需更多内存存放页表,同样会浪费内存利用率。
所以,一般页的大小在512->4k之间,且是2的幂。
*6.分页相同的地址结构如图,显然下图页大小=2**10=1k,总页数=2**10=1k。
19—10 9—-0
页号Pi—业内偏移

2.页表

*1.作业被离散地置于内存的多个页框中,为使作业能方便地找到各页面对应的页框位置,为每个作业建立一张页面映射表,称页表PT.
每个页在页表中占一项,页表的作用是实现页号到页框号的地址映射,另外,页表若是数组,页号字段可省略。
*2.每个作业有一个页表,对中小作业,其页表一般可放入内存,而对大型作业,如VAX机允许作业大小为2GB,若每页大小为512BYTE,则页表项数=2GB/512=8M,若全部装入内存显然不可行,为此其页表也需采用内外村交换技术,且页表需用多级目录结构组织起来。
一般为节省页表在内存的占用空间,所有作业的页表共用一块内存区,每个作业表内通过指针+长度确定其页表在该内存区的位置。

3.地址变换

*1.即通过页表把作业的逻辑地址变换成内存的物理地址。由于页内地址和页框内地址一一对应,所以地址变换实质上是将页号变为页框号而已。
*2.用程序描述
deifne NUM…
struct{
int PageFrameNum;
char status;
}PageTable[NUM];
Boolean Addrchange(int Pnum,int Poff,int *PFunm,int *PFoff){
if(Pnum>=NUM) return False;//页号超界
if(PageTable[Pnum].status==NoAccess) return False;//无权存取
*PFnum=PageTable[Pnum].PageFrameNum;
*PFoff=Poff;
return True;
}

4.快表
*1.地址变换要先访问内存中页表,再访问内存相应页框,显然其内存访问次数加倍,降低了系统性能。
*2.通过把页表置于CACHE中,可提高访问页表的速度,因此CACHE中的页表称为快表
*3.由于CACHE容量有限,只能置页表的一部分于CACHE中,因此产生了快表访问的命中率和快表更新问题。
*4.快表的地址变换机制

  - A 若页号超界则返回
  - B 由页号从快表中查对应页框号,若找到转D
  - C 从内存中找对应的页表项,把其置于快表中,若快表已满,则置换快表中最久未使用的页表项
  - D 若页描述子不能存取,则返回,否则获取页框号,与原偏移量组合形成物理地址

*5.由于对程序/数据的访问具有局部性,因此快表的命中率达90%以上,即由于分页式地址变换引起的速度损失可降低到1%以下,这是可容忍的。关于页面大小和命中率的关系分析见。
*6.开销

  • A每作业的内存分配以页为单位,因此最后页平均有半页浪费,称“内零头”;
  • B页表本身存储所需的内存开销,称“外零头”;
  • C由于一次分配作业所需全部内存,导致有些作业不能被分配而长时间等待,同时内存有平均作业长度的1/2被闲置,所以引入请求式分页。

    二.请求式分页系统
    1.概念

    也称单段式虚拟存储器,提出的缘由有二:1).多作业共享小内存;2)特大作业使用小内存。
    指导思想:
    只调入当前运行所需的页面到内存,若需要其他页面时,通过自动页面交换技术,把内存的一部分页面与外存所需的页面进行交换而解决。即内存与外存通过页表构成一个整体—–虚拟地址空间。

    2.数据结构

    *1.页表:页号,页框号,状态位,访问字段,修改位,外存地址
    在原页表结构上增加四个字段:

  • A.状态位:标志该页是否存在内存
  • B.访问字段:记录本页已被访问的参数,用于置换算法
  • C.修改位:本页内容是否更改,因为内存中的每页在外存中都有副本,若未被更改过则在置换时不必写外存。
  • D.外存地址:内外存置换时用

    *2.存储分配表MBT:这个系统一张,记录内存页框的使用情况;
    *3.快表/页面映像表PMT:整个系统一张,当前运行作业的快表使用情况;
    *4.作业表JT:整个系统表一张,存放当前运行作业,通过PCB等;
    *5.文件印象表FMT:每个作业一张,存放在外存整个页表。

    3.地址变换

    4.硬件支持
    除内外存外,还需要一下两个:
    *1.缺页中断机构:当发现内存缺页时,产生缺页中断信号,OS检测该信号并进行缺页中断处理。(调用历程)

  • A.本中断在指令执行时产生,并马上处理,这有别于一般的中断,它们在一指令执行完的间隙产生。

  • B一般指令在执行时,会引起多次缺页中断。
    ——拷贝指令引起多次缺页中断,会导致CPU在页面交换时花费大量的时间,引起系统性能的下降,——此状况称系统的“颤抖”,应预防以避免。
    *2.地址变换机构:其在一般的地址变换机构基础上,增加了一些特殊功能,如产生缺页中断,置换算法机制,修改标志等。

    5.提取页面问题——调页策略
    解决页面在何时装入内存。
    *1.预调页策略:以预测为基础,事先一次调入若干相邻的页,用于进程首次调入,若预测准确,可提高效率,否则降低效率。
    *2.请求调页策略:当作业请求时,才将所需要页面调入内存,易实现,但每次调一页,系统开销大。

    6.放置页面问题——分配策略
    即页面置于内存何处
    *1.固定分配策略:基于作业类型分配其固定页数的内存空间,在运行其不变。简单,但不灵活,内存利用率不高。
    *2.可变分配策略:基于作业类型分配一定页数的内存空间。若运行时缺页中断频繁则追加页数,反之,则减少页数。

    7.置换页面问题——置换策略
    即当内存满而又要从外存中调入页时,按何种原则置换内存中的某页面。
    *1.最优化算法·
    把内存中永远不会被使用或很长时间不会被用到的页置换出去,是理想算法,无实用的价值,仅作参照系(坐标)使用。
    *2.先进先出算法
    淘汰进入内存最早的页面,简单但效率低略。
    *3.最近最久未使用算法
    在页表项中的访问字段记录上次该页面访问以来所经历的时间T,当需置换时,选择该记录T最大的页面。
    *4.最近未用算法
    是LRU算法的退化,访问页面后置访问字段值为1,同时系统周期性地(每隔T时间)把访问字段清零,因此在T时间内,置零的都是未被访问过的,选择一个淘汰之。
    *5.最少使用置换算法
    每访问一次,访问字段加1,置换时,淘汰其值最小的页面。

    三.请求式分页系统优缺点
    解决了存储器零头问题,同时解决了多作业内存紧张的问题。
    1.优点

    *1.作业地址空间不受时间内存大小的限制——虚拟存储器;
    *2.不常用的页面不会长期占用内存,提高内存利用率。如:错误处理例程,也许根本就不会被用到,就不会被置入内存。
    *3.多道作业运行的程度提高了。
    *4.自动页面交换技术,方便了用户的编程。

2.缺点

*1.地址变换机构和缺页中断机构增加了硬件开销;
*2.页表浪费内存,而且还有业内碎片(平均半页)
*3.地址变换和页面交换增加了CPU的开销。(时间换空间)
*4.为防止页面中断的颤动需额外的开销。

四.请求式分页系统优缺点
1.当作业很很大或作业很多时,都会需要大量的内存,解决方法有二:从物理上进行扩充和从逻辑上进行扩充。
2.局部性原理
程序在执行时,呈现出局部性规律,即在某一实际段内,呈现的执行局限于某一部分,访问的数据也局限于某一部分。
3.当作业所需的内存很大时,基于局部性原理,可把当前所需的代码和数据装入运行,其他部分仅当需要时,再通过调入置换来运行,因此,我们把“具有请求和置换功能,能在逻辑上对内存容量进行扩充的一种存储器系统成为虚拟存储器。”
4.虚拟存储器相对用户来说有“感觉”上的大容量。其逻辑容量=内存+外存(即速度接近内存,成本接近外存)。
而最大容量由CPU有效地址长度决定,如32位机2**32=4000M。
5.实现虚拟存储系统的物质基础
*1.大容量外存:用以存放所有作业;
*2.一定容量的内存:越多越好,可多装载并发作业。
*3.地址变换机构:有别于常规的基址寄存器和相对寻址机制,因为后者依赖于指令的类型,受应用呈现控制,而这里的地址变换机构是自动变址,作用于所有存储访问,不受程序控制。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值