【操作系统】第三章内存管理之——非连续分配管理方式(分页管理、分段管理)

前言:

连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。
如果允许将一个进程直接分散地装入到许多不相邻接 的分区中,则无须再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的 基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存 储管理方式。 在分页存储管理方式中,如果不具备页面对换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能,它要求把每个作业全 部装入内存后方能运行


1. 分页管理

1.1 页面

  1. 页面和物理块
    分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页, 并为各页加以编号,从 0 开始,如第 0 页、第 1 页等。相应地,也把内存空间分成与页面 相同大小的若干个存储块,称为(物理)块或页框(frame),也同样为它们加以编号,如 0#块、 1#块等等。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相
    邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为 “页内碎片”。
  2. 页面大小
    在分页系统中的页面其大小应适中。页面若太小,一方面虽然可使内存碎片减小,从 而减少了内存碎片的总空间,有利于提高内存利用率,但另一方面也会使每个进程占用较
    多的页面,从而导致进程的页表过长,占用大量内存;此外,还会降低页面换进换出的效 率。然而,如果选择的页面较大,虽然可以减少页表的长度,提高页面换进换出的速度,
    但却又会使页内碎片增大。因此,页面的大小应选择适中,且页面大小应是 2 的幂,通常
    为 512 B~8 KB。

1.2 地址结构

分页地址中的地址结构如下:在这里插入图片描述

1.3 页表

在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。
为此,系统又为每个进程建立了一张页面映像表,简称页表。
在进程地址空间内的所有页(0~n),依次在页表中 有一页表项,其中记录了相应页在内存中对应的物理块号,见图 4-12 的中间部分。在配置 了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。可见,页表 的作用是实现从页号到物理块号的地址映射。


2、 地址变换机构

为了能将用户地址空间中的逻辑地址变换为内存空间中的物理地址,在系统中必须设 置地址变换机构。
该机构的基本任务是实现从逻辑地址到物理地址的转换。由于页内地址
和物理地址是一一对应的(例如,对于页面大小是 1 KB 的页内地址是 0~1023,其相应的物理块内的地址也是 0~1023,无须再进行转换),因此,地址变换机构的任务实际上只是 将逻辑地址中的页号,转换为内存中的物理块号。

2.1 分页管理——基本的地址变换机构

页表的功能可以由一组专门的寄存器来实现。一个页表项用一个寄存器。由于寄存器具有较高的访问速度,因而有利于提高地址变换的速度;但由于寄存器成本较高,且大多 数现代计算机的页表又可能很大,使页表项的总数可达几千甚至几十万个,显然这些页表 项不可能都用寄存器来实现,因此,页表大多驻留在内存中。
在系统中只设置一个 页表寄存器 PTR(Page-Table Register),在其中存放页表在内存的始址和页表的长度。

在这里插入图片描述
例题
在这里插入图片描述

2.2 具有快表的地址变换机构

由于页表是存放在内存中的,这使 CPU 在每存取一个数据时,都要两次访问内存。第 一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量 W 拼接, 以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近 1/2。可见,以此高昂代价
来换取存储器空间利用率的提高,是得不偿失的。
为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”(Associative Memory),或称为“快表”,在 IBM 系统中又取名为 TLB(Translation Lookaside Buffer),用以存放当前访问的那些页表项。

变换过程是:
在 CPU 给出有效地址后,由地址变换机构自动地将页号 P 送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号进行比较,若其中有与此相匹配的页号,便表示
所要访问的页表项在快表中。于是,可直接从快表中读出该页所对应的物理块号,并送到 物理地址寄存器中。如在块表中未找到对应的页表项,则还须再访问内存中的页表,找到 后,把从页表项中读出的物理块号送地址寄存器;同时,再将此页表项存入快表的一个寄
存器单元中,亦即,重新修改快表。但如果联想寄存器已满,则 OS 必须找到一个老的且已 被认为不再需要的页表项,将它换出。
在这里插入图片描述

2.3 两级和多级页表

在这里插入图片描述


3. 分段系统的基本原理

3.1 分段

在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。
例如,有主程序段 MAIN、子程序段 X、数据段 D 及栈段 S 等,如图 4-17 所示。每 个段都有自己的名字。为了实现简单起见,通常可用一个段号来代替段名,每个段都从 0开始编址,并采用一段连续的地址空间。段的长度由相应的逻辑信息组的长度决定,因而 各段长度不等。整个作业的地址空间由于是分成多个段,因而是二维的,亦即,其逻辑地 址由段号(段名)和段内地址所组成。 分段地址中的地址具有如下结构:
在这里插入图片描述
在该地址结构中,允许一个作业最长有 64 K 个段,每个段的最大长度为 64 KB。 分段方式已得到许多编译程序的支持,编译程序能自动地根据源程序的情况而产生若干个段。
例如,Pascal 编译程序可以为全局变量、用于存储相应参数及返回地址的过程调用 栈、每个过程或函数的代码部分、每个过程或函数的局部变量等等,分别建立各自的段。
类似地,Fortran 编译程序可以为公共块(Common block)建立单独的段,也可以为数组分配 一个单独的段。装入程序将装入所有这些段,并为每个段赋予一个段号.

3.2 段表

  • 在前面所介绍的动态分区分配方式中,系统为整个进程分配一个连续的内存空间。而在分段式存储管理系统中,则是为每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中。为使程序能正常运行,亦即,能从物理内存中找出每个逻辑段所对应的位置,应像分页系统那样,在系统中为每个进程建立一张段映射表,简称 “段表”。
  • 每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(又称为“基址”) 和段的长度,如图 4-17 所示。段表可以存放在一组寄存器中,这样有利于提高地址转换速度,但更常见的是将段表放在内存中。
    在配置了段表后,执行中的进程可通过查找段表找到每个段所对应的内存区。可见, 段表是用于实现从逻辑段到物理内存区的映射。

在这里插入图片描述

3.3 段表的地址变换机构

  • 为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度 TL。
  • 在进行地址变换时,系统将逻辑地址中的段号与段表长度
    TL 进行比较。若 S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界, 则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址,然后,再检查段内地址 d 是否超过该段的段长 SL。
  • 若超过,即 d>SL,同样发出 越界中断信号;若未越界,则将该段的基址 d 与段内地址相加,即可得到要访问的内存物 理地址。

在这里插入图片描述
在这里插入图片描述
注意:
像分页系统一样,当段表放在内存中时,每要访问一个数据,都须访问两次内存,从 而极大地降低了计算机的速率。解决的方法也和分页系统类似,再增设一个联想存储器,用于保存最近常用的段表项。由于一般情况是段比页大,因而段表项的数目比页表项的数目少,其所需的联想存储器也相对较小,便可以显著地减少存取数据的时间,比起没有地 址变换的常规存储器的存取速度来仅慢约 10%~15%。


4. 分页和分段的主要区别

  1. 页是信息的物理单位。对用户不可见。
  2. 段是信息逻辑单位,分段对用户可见。
  3. 页的大小由系统决定,段的长度由用户编写程序而改变。
  4. 分页的用户进程地址空间是一维的,分段的用户进程地址空间是二维的。
  5. 分段比分页更容易实现信息共享和保护。不能被修改的代码成为纯代码或可重入代码(不属于临界资源)可共享的。
  6. 访问一个逻辑地址需要几次访存?
    • 分页:2次,第一次访存——查内存页表;第二次——访问目标内存单元。
    • 第一次访存——查内存段表,第二次访存——访问目标内存单元。
      在这里插入图片描述

3 段页式存储管理方式

3.1 基本原理

段页式系统的基本原理,是分段和分页原理的结合,即先将用户程序分成若干个段, 再把每个段分成若干个页,并为每一个段赋予一个段名。图 4-21 示出了一个作业地址空间的结构。
该作业有三个段,页面大小为 4 KB。在段页式系统中,其地址结构由段号、段内 页号及页内地址三部分所组成,如图 4-22 所示。
在这里插入图片描述

3.2 地址变换过程

在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始 址和段表长 TL。进行地址变换时,首先利用段号 S,将它与段表长 TL 进行比较。若 S<TL, 表示未越界,于是利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号 P 来获得对应页的页表项位置,从中读出该页所在的物理块号 b,再利用块号 b 和页内地址来构成物理地址。图 4-23 示出了段 页式系统中的地址变换机构。
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值