DJ4-4 基本分页存储管理方式

目录

离散分配的基本概念

4.4.1  分页存储管理基本思想

1、分页存储管理的基本方法

2、页面与物理块

3、实现分页存储管理的数据结构

4、实现分页存储管理的地址结构

5、分页存储管理的逻辑地址表示

4.4.2  地址变换机构

1、基本的地址变换机构

2、具有快表的地址变换机构

4.4.3  访问内存的有效时间 EAT


离散分配方式的引入

连续分配方式会产生内零头和外零头,为解决零头问题又要进行紧凑等高开销活动。

离散分配是指程序在内存中不一定连续存放。

根据离散时的基本单位不同,可分为三种:

  1. 分页存储管理
  2. 分段存储管理
  3. 段页式存储管理

离散分配的基本概念

1、离散的基础

  • 分页(Pages):将程序地址空间分页。
  • 分块(Frames):将内存空间分块。

2、离散分配的体现

程序的一页装入到内存的一块,但连续的多个页不一定装入到连续的多个块中。

注:系统中分页和分块的大小是不变的。

3、离散分配的优点

  • 没有外零头
  • 不受连续空间限制,每块都能分配出去
  • 仅有小于一个页面的内零头

因为程序大小一般不是分页大小的整数倍,所以最后一个分页里会有内零头,但对于一个程序来说,也只会有这一个内零头,而且显然该内零头大小 < 分页大小。这种由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为 “页内碎片” 或称为 “内零头”。

4.4.1  分页存储管理基本思想

1、分页存储管理的基本方法

解决两个基本问题:

  • 如何建立程序空间与主存空间的映射
  • 如何进行地址变换:从程序逻辑地址到内存物理地址

2、页面与物理块

① 页面或页(Page):把每个进程的逻辑地址空间分成一些大小相等的片。

② 页框或物理块(Page Frame):把内存空间分成与页面相同大小的若干存储块。

在为进程分配存储空间时,总是以页框为单位。页面大小由机器的地址结构决定。某一机器只能采用一种大小的页面。页面的大小通常在 1KB~8KB 之间。

例如:一个作业的地址空间有 4 页。那么,只要分配给它 4 个页框,每一页分别装入一个页框内即可,并不要求这些页框是连续的。

说明:在程序空间中从 0 开始编制页号,页内地址也是相对于 0 进行编址的。

在进程调度时,必须把它的所有页一次性装入到主存的页框内;如果当前页框数不足,则该进程必须等待,系统再调度另外的进程 -- 纯分页方式。

3、实现分页存储管理的数据结构

① 页表:每个进程对应 1 个页表,描述该进程的各页面在内存中对应的物理块号。包括页面号、物理块号和存取控制字段,从而对存储块中的内容进行保护。

注意:全部页表集中存放在主存的系统专用区中,只有系统有权访问页表,保证安全。

② 作业表:整个系统 1 张,记录作业的页表情况,包含进程号、页表长度、页表始址等信息。

③ 空闲块表:整个系统 1 张,记录主存当前的空闲块。

4、实现分页存储管理的地址结构

地址空间为程序限定的空间,物理空间为内存限定空间。在分页存储管理系统中,将地址空间分成大小相同页面,将内存空间分成与页面相同大小的物理块。

在分页存储管理方式中,任何一个逻辑地址都可转变为:页号 + 页内位移量。

页号和页内位移量的划分是由系统自动完成的,对用户是透明的。

如:有一个 32 位的逻辑地址,可转化为如下方式:

5、分页存储管理的逻辑地址表示

对于其它进制,可以先将逻辑地址转换为二进制,再通过位数(地址结构)来看页号和页内偏移量。

在逻辑地址转换为物理地址时,页号会被页表指定的块号所取代,但是页内偏移量在转换过程中是保持不变的。

 

4.4.2  地址变换机构

地址变换机构的功能:将用户的逻辑地址转变为内存中的物理地址。

  • 逻辑地址由页号和页内位移量组成
  • 程序空间页面的大小和内存物理块的大小相同
  • 因此页内位移量等于物理块块内位移量

因此地址变换的关键仅在于:页号到物理块号的转换,这个转换由页表完成。

1、基本的地址变换机构

核心:使用寄存器存放页表。

① 最初的想法

一个页表项使用一个寄存器。

  • 优点:寄存器访问速度快,有利于提高地址变换的速度
  • 缺点:寄存器成本高;页表很长,页表项很多,不可能都用寄存器实现

② 实际的做法

  • 将页表存储在内存中
  • 设置一个页表寄存器 PTR

PTR 用于存放 当前运行的进程的页表 在内存中的始址和页表的长度。当进程未被执行时,页表的始址和页表的长度存放在该进程的 PCB 中;当进程被执行时,才将这个两个数据装入到 PTR 中。

分页系统中的地址变换过程

逻辑地址 => 物理地址

  1. 根据逻辑地址,计算出页号和页内偏移量;
  2. 从 PTR 中得到页表首址,然后检索页表,查找指定页面对应的页框号;
  3. 用页框号乘以块大小获得其对应的起始地址,将其送入物理地址的高端;
  4. 将页内偏移量送入物理地址低端,形成完整的物理地址。

对于二进制,分别送入高端和低端才行得通;对于其它进制,直接把起始地址和页内偏移量加在一起就好啦。


作业的大小是被程序空间(逻辑地址)限制的,而不是被内存空间(物理地址)限制的!

 

也可以直接把十六进制转成十进制来做,我这个写的兜兜转转的。

地址结构长度和作业地址空间大小似乎都是冗余的信息(?)

我们还要画出地址变换图。

2、具有快表的地址变换机构

采用基本的地址变换机构至少需要访问两次内存:由于页表存放在内存中,因此第一次是去访问内存中的页表,第二次才是根据得到的物理地址去访问内存中的数据。存取速度几乎降低了一倍,代价太高。

为了提高地址变换的速度,为进程页表设置一个专用的高速缓冲存储器,称为 快表 TLB 或联想存储器。快表的工作原理类似于系统中的数据高速缓存(Cache),其中专门保存当前进程最近访问过的一组页表项。

根据程序的局部性,进程最近访问过的页面在不久的将来还可能被访问。

地址变换过程

根据逻辑地址中的页号,查找快表中是否存在对应的页表项。

① 若快表中存在该页表项,则称之为命中(hit),从快表中取出相应的页框号,再加上页内偏移量,计算出物理地址。

② 若快表中不存在该页表项,则称之为命中失败。需要再查找页表,从页表中取出相应的页框号,再加上页内偏移量,计算出物理地址。同时更新快表,将该页表项插入快表中。

我们企图利用快表少访问一次内存,但如果命中失败的话,还是会访问内存中的页表的。

之前的越界中断好像也得这样画,但是我懒得改了。

4.4.3  访问内存的有效时间 EAT

定义:从进程发出指定逻辑地址的访问请求开始,经过地址变换,再到内存中找到对应的物理单元并取出数据,所花费的总时间。

假设检索快表的时间为 20ns,访问内存的时间为 100ns 。

  • 若能在快表中检索到 CPU 给出的页号,则 CPU 存取一个数据仅需要 120ns 。
  • 否则,CPU 存取一个数据需要 20+100+100=220ns 的时间。

选用 8~12 个页表项组成的联想存储器,并采用适当的替换策略,则其命中率可达 80%~90% 。可见,增设联想存储器使得访问内存的有效时间减少。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值