操作系统---(31)基本分页,分段,段页存储管理

一. 基本分页存储管理

1.基本原理

  1. 内存被划分成大小固定相等的块(Frame 帧、页框、主存块),且块相对比较小。
  2. 每个进程装入时被分成同样大小的页(Page)一页装入一帧
  3. 整个进程被离散装入到多个不连续的帧

下面来看一个分页存储管理的例子
在这里插入图片描述

2.页面长度

页面的尺寸(页面长度)由计算机系统的硬件决定。
对于某台具体的机器来说,只能规定一种尺寸。
目前流行的页面尺寸是1 KB到4KB之间,但也有一些 机器不在此范围内。
比如,小型机IBM AS/400的页面尺寸为512个字节。

3.记录内存使用情况的数据结构

位示图: 整个系统一张,记录内存使用情况
在这里插入图片描述
位示图的使用:
分配时,查位示图,找空闲帧: k=i*L+j
回收时,i= [k/L] //整除
j= k MODL //取余
由帧号可知位示图中字号和位号
设字号i、位号j、帧号k取值均从0开始,字长记为L,一个0/1位对应一个帧的空闲/占用。

4.记录每个进程分页及占用内存情况的数据结构

  1. 为了保证程序的正确运行,分页管理机制应为每个进程建立一个数据结构——页表PT(Page Table)。
  2. 页表中登记进程各页面对应的帧号,供地址映射使用。
    在这里插入图片描述
    页表:每个进程一张PT, 记录本进程分页及占用帧的情况

5.页面分配算法

  1. 计算请求者需要的总帧数N。
  2. 查位图,若找不到足够的空闲帧,编制分配失败报告返回。
  3. 索取一个空闲页表PT。
  4. 从位图中找出N个为0位,计算出对应的帧号,填入PT。
  5. 位示图中将这些位改为1。
  6. 将PT起始地址填入进程的PCB中。
  7. 结束。

6.地址划分

  1. 进程装入之前,逻辑地址是一维的
  2. 进程装入之后,逻辑地址分为两维
    高端地址部分 作为页号
    低端地址部分 作为页内的偏移量(即页内地址)

若机器的地址码是16位,页面长度是1KB,则地址划分结果:低10位是页内地址,高6位是页号。
在这里插入图片描述
这样的地址结构,允许一个进程的页面总数达64页。

7.地址重定位

在这里插入图片描述

8.分页式存储管理中的地址形式

在这里插入图片描述

9.地址保护

在这里插入图片描述

10.页面共享

在这里插入图片描述

总结

  1. 离散存储,利于大进程装入
  2. 只有很少的页内碎片,提高内存利用率
  3. 位示图、页表;动态地址重定位
  4. 页面共享不易实现

二. 基本分段存储管理

1.分段管理技术

“段”是一个逻辑单位,是进程的一个组成部分。如主程序段,子程序段,数据段等。
在结构程序设计中,进程自然分段。用户源程序使用的符号地址是二维的:<段名,变量名>。
编译之后的逻辑地址是二维的:<段号,段内位移>

2.进程按逻辑分段

在分段机制中,一个进程的地址空间可以包含以下不同的段:

  • 代码段(Code Segment)
  • 数据段(Data Segment)
  • 堆栈段(Stack Segment)
  • 内存共享段(Share Memory Segment)等

3.一个包含3个段的进程

例如,一个进程P包括3个程序段: Main (主段),Sub1 (子段1) 和Sub2 (子段2) .图给出各个段之间的调用关系。
在这里插入图片描述

4.基本分段存储管理原理

  • 进程的程序和其相关的数据按逻辑分段。
  • 段有一个最大长度限制,但不要求所有程序的所有段的长度都相等。
  • 一段占用一块连续存储区
  • 各段占用不连续分区

5.记录内存使用情况的数据结构

  • MAT
  • 空闲分区表/链

这里的MAT表与动态多分区中MAT表的有何异同?

相同点:
MAT的一个表项,对应内存一个分区

不同点:

  • =动态多分区中,一个分区存放一整个进程
  • 分段存储中,一个分区存放进程的一个段。一个进程离散成多个段装入多个不连续的分区

6.记录各个进程分段情况的数据结构

段表ST (Segment Table)为每个进程设置一张段表,用来记录各个段地址映射的关系。进程分了几段,段表就有几个表项。一个表项记录一个分段在内存空间中的存储地址和长度。

段表示例
在这里插入图片描述

7.地址重定位

在这里插入图片描述

8.程序运行中的地址变换过程如下

  1. 提取逻辑地址中的“段号”
  2. 比较段号与段表控制寄存器中的段长度。如果超出段表长度,则返回“内存定位错误”,终止进程的运行
  3. 从段表控制寄存器中给出的段表首址开始,以段号为索引查找该进程对应的段表,得到欲访问段的首地址。
  4. 取出欲访问段的首地址,加上逻辑地址中的偏移量得到物理地址。

9.分段保护

第一级保护是防止进程发生超出存储空间的访问
第二级保护是阻止进程超出访问权限的读写
分段保护的三个步骤:
在这里插入图片描述

10.分段共享

如果多个用户进程需要共享内存中的某些代码段或数据段时,可将内存中共享段的起始地址及长度,填入这些进程的段表当中,就可共享一个逻辑上完整的段信息了。

例如系统一个文本编辑程序vi段,多个用户调用
在这里插入图片描述
共享段表SST
为了实现段的共享,系统设一个“共享段表”(SST,Sharing Segment Table) 记载各个共享段的使用情况。任何一个进程调用共享段时,系统都将访问该表。
在这里插入图片描述

总结

  • 离散存储,一段连续装,各段不连续
  • 内存仍然按分区管理,会产生外碎片
  • DS: MAT、段表;动态地址重定位
  • 分段共享非常方便.

三.基本段页式存储管理

1.存储管理方法总结

  1. 连续存储管理
    • 单分区方式——内存用户区的全部空间只存放一个进程
    • 多分区方式——内存被分为多个分区,每个分区存放一个进程。每个瞬间可有多个进程留在内存中
  2. 离散存储管理
    • 分页方式——- 内存被划分为多个等长的存储块,每个进程占用其中的若干块,整个内存允许有多个进程同时驻留。
    • 分段方式——-对于分段结构的应用程序,一段的分配一块连续空间,各段离散存入不同分区。这种方式同样允许每瞬间有多个讲程驻留在内存。

2.分页与分段

分页:分页存储利于大进程装入,内存利用率高;但是,页是物理页,页面共享不易实现。
分段:段是逻辑段,方便实现分段共享;但是,外碎片的存在降低内存使用效率;且整理消除外碎片加大系统开销

3.基本段页式存储管理

把分页和分段两者结合起来就是段页式存储管理

  • 内存划分成大小相等的页框
  • 用户的地址空间被程序员划分成许多段,每个段一次划分成许多固定大小的页,页的长度等于内存中的页框大小

数据结构:

  • 系统设一张位示图,记录内存个帧占用与否
  • 系统为一个含有多段的进程建立段表,记录各个分段对应段内页表的地址和长度
  • 一个分段有一个段内页表,记录该段划分为多少页,每页分配的帧号是多少。

段表和段内页表:
在这里插入图片描述
地址形式:
系统的硬件支持是,在处理机内部没有段表控制寄存器及地址生成逻辑

  • 程序中的逻辑地址仍然是二维地址:<段号,偏移量>
  • 每段装入时分页,地址部分被当作三维地址来处理:<段号,页号,页内偏移>

段页式地址重定位:
在这里插入图片描述
段页式地址保护:
在这里插入图片描述
段页式地址字结构的计算:
比如一个32位地址字,已知系统设定页面长度为4KB,段的长度为64KB,则地址划分如下:
31-16 15-12 11-0
段号 页号 页内地址
于是,页内需12位,每段分16页,段内页号需4位,剩余16位为段号。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值