操作系统复习----第七章(主存管理)

一、主存管理概述

内存作为系统的重要资源,是系统运行的“瓶颈”。
存储管理指存储器资源(主要指内存并涉及外存)的管理。

存储器的多级存储结构

存储体系是OS在存储技术和CPU寻址技术许可范围内组织合理的存储结构,协调各存储器的使用。
重要性:直接存取要求内存速度尽量快到与CPU取指速度相匹配,大到能装下当前运行的程序与数据,否则CPU执行速度就会受到内存速度和容量的影响而得不到充分发挥。
最佳状态应是各层次的存储器都处于均衡的繁忙状态(如:缓存命中率正好使主存读写保持繁忙)。
存储体系结构
寄存器、高速缓存、主存储器和磁盘缓存均属于OS存储管理的管辖范畴,掉电后它们存储的信息不再存在。
固定磁盘和可移动存储介质属于设备管理的管辖范畴,它们存储的信息将被长期保存。
在这里插入图片描述

主存共享方式:

(1) 大小不等的区域

  • 分区存储管理
  • 段式存储管理

(2) 大小相等的区域

  • 页式存储管理

(3)二者结合

  • 段页式存储管理

二、主存管理功能

基本该概念

  • 物理地址:物理地址是计算机主存单元的真实地址,又称为绝对地址或实地址。
  • 主存空间:物理地址的集合所对应的空间组成了主存空间
  • 逻辑地址 (相对地址、虚地址) :用户的程序地址 (指令地址或操作数地址)均为逻辑地址。
  • 程序地址空间: 用户程序所有的逻辑地址集合对应的空间。

基本功能

地址映射
将程序地址空间中使用的逻辑地址变换成主存中的物理地址的过程,称为地址映射。
静态地址映射与动态地址映射的区别:
在这里插入图片描述

主存分配、管理与回收
(1) 构造分配用的数据结构
主存资源信息块:等待队列、空闲区队列、主存分配程序
(2) 制定策略

  • 分配策略 —— 在众多个请求者中选择一个请求者的原则

  • 放置策略 —— 在可用资源中,选择一个空闲区的原则

  • 调入策略 —— 决定信息装入主存的时机
    预调策略:预先将信息调入主存
    请调策略:当需要信息时,将信息调入主存

  • 淘汰策略 —— 在主存中没有可用的空闲区 (对某一程序而言)时,决定哪些信息从主存中移走,即确定淘汰已占用的内存区的原则。
    (3) 实施主存分配与回收
    存储保护
    在多用户环境中,主存储器按区分配给各用户程序使用。 为了互不影响,必须由硬件 (软件配合)保证各用户程序只能在给定的存储区域内进行授权的活动,这种措施叫做存储保护。
    主存扩充
    用户在编制程序时,不应该受内存容量限制,所以要采用一定技术来“扩充”内存的容量,使用户得到比实际内存容量大得多的内存空间。
    具体实现是在硬件支持下,软硬件相互协作,将内存和外存结合起来统一使用。

三、分区存储管理

系统把内存用户区划分为若干分区,分区大小可以相等,也可以不等。一个进程占据一个分区。
特点:

  • 支持多个程序并发执行
  • 难以进行内存分区的共享

固定分区

基本原理

在OS启动时,把内存划分为若干个固定大小的连续分区,每个作业占用一个分区:一片连续的内存区域。

  • 分区大小相等:只适合于多个相同程序的并发执行(处理多个类型相同的对象),用得少。
  • 分区大小不等:多个小分区、适量的中等分区、少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。
固定分区数据结构(分区说明表)

内存管理:设置内存分配表,是一张分区说明表,每个分区按顺序在分区说明表中对应一个表目,如下图所示:
在这里插入图片描述

固定分区的分配与回收

内存分配:当用户程序要装入执行时,系统就根据其要求的内存空间大小,查询分区说明表,按最佳适应法从中找出一个满足要求的空闲分区,并分配给该程序。
内存回收:当用户作业执行完毕时,系统将其占用分区的状态位设为空闲即可。

动态分区分配

作业运行前系统中不建立分区,在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小。每个作业占用一个分区,每个分区都是一片连续的内存区域。

分区分配与回收过程

分区分配思路:

  • 寻找空闲块:依申请者所要求的主存区的大小,分区分配程序在自由主存队列中找一个满足用户需要的空闲块;
  • 若找到了所需的空闲区,有两种情况(1)空闲区与要求的大小相等,将该空闲区分配并从队列中摘除;(2)空闲区大于所要求的的大小,将空闲区分为两部分:一部分成为已分配区,建立已分配区的描述器;剩下部分仍为空闲区。返回所分配区域的首址;
  • 否则,告知不能满足需求

分配过程:
在这里插入图片描述
回收思路:
检查释放分区 (即为回收分区)在主存中的邻接情况,若上、下邻接空闲区,则合并,成为一个连续的空闲区
若回收分区不与任何空闲区相邻接,建立一个新的空闲区,并加入到空闲区队列中。
回收过程:
在这里插入图片描述

分区分配算法

首次适应算法(first-fit,最先匹配法)

按分区的先后次序,从头查找,找到符合要求的第一个分区,则结束查找。它要求可用表或自由链按起始地址递增的次序排列
该算法的分配和释放的时间性能较好,较大的空闲分区可以被保留在内存高端。
但随着低端分区不断划分而产生较多小分区,每次分配时查找时间开销会增大。

最佳适应算法(best-fit,最坏匹配法)

它要求找到一个长度大于等于所要求内存长度,且其大小与要求相差最小的空闲分区进行分配。它要求可用表或自由链按分区大小递增的次序排列
从个别来看,外碎片较小,但从整体来看,会形成较多外碎片。较大的空闲分区可以被保留。

最坏适应算法(worst-fit,最坏匹配法)

它要求找到一个长度大于等于所要求内存长度,且最大的分区进行分配。它要求可用表或自由链按分区大小递减的次序排列
基本不留下小空闲分区,但较大的空闲分区不被保留。
每种算法各有优劣,针对不同请求队列,效率和功能不同。

四、页式存储管理

程序的连续存放造成了内存碎片问题。虽然可以利用紧缩法来解决问题,但要额外花费CPU时间。页式存储管理允许程序的存储空间是不连续的,既减少了内存碎片,提高了内存利用率,又增加存储管理的灵活性。

基本原理

用户的逻辑地址空间分页:把用户的逻辑地址空间划分成若干个长度相等的页(page,虚页),并对其页从0开始进行编号:0,1,2…。
等分主存:把主存按页的大小划分成存储块,称为页面(page frame,物理块,实页) ,它的大小对特定计算机系统而言是固定的;并给各实页从0开始编号:0,1,…,n 。
逻辑地址的表示:每个逻辑地址用一个数对(p,d)来表示,p是页号,d是该虚拟地址在页p内的相对地址,称为页内地址或偏移量。
逻辑地址的组成:
在这里插入图片描述
主存分配原则:系统以页面为单位把主存分给作业或进程,并且分给一个作业或进程的各页不一定是连续的;逻辑上相邻的页,物理上不一定相邻。即一个作业的连续的几个页面,可能会被装入主存中分散的几个页中,较好地解决了内存碎片。

分页管理的分配算法与回收:

在这里插入图片描述
静态页面管理的页面回收: 进程执行完毕时,拆除对应的页表,并把页表中的各页面插入空闲页面表或空闲页面链表即可。

页式管理的地址转换

物理地址=内存块号*块长+页内地址
1)将由逻辑页号和页内相对地址变换到内存物理地址,只能采取动态重定位。
2)由硬件地址变换机构自动完成。
3)将逻辑地址中的页号与页表地址寄存器中的页表长度比较.
4)如页号超过页表长度,则产生越界中断。否则,根据页表起始地址与页号计算该页对应页表项的位置,从中读出页对应的内存的块号将块号和页内地址组合得到物理地址

在这里插入图片描述
为了提高查表速度,在地址变换机构中增设一个具有并行查找能力的高速缓冲存储器(又称联想存储器或快表),将页表放在这个高速缓冲存储器中。
高速缓冲存储器一般是由半导体存储器实现的,其工作周期与CPU的周期大致相同,但其造价较高。
为了降低成本,通常是在快表中存放正在运行作业当前访问的那些页表项,页表的其余部分仍然存放在内存中。

五、段式及段页式存储管理

段式存储管理

基本思想

把程序的地址空间按内容或过程(函数)关系分成段,每段有自己的名字;
系统按段分配内存空间,一个进程的各段在内存中可以是不连续的;
程序的虚拟地址用段名和段内地址来描述,是一个二维地址;
指令地址场中的虚拟地址用段号和段内地址来描述。为实现内存分配和地址变换,必须设置段表和段表地址寄存器。
物理内存的管理采用动态分区。需要CPU的硬件支持。

段式管理的内存分配
  1. 以段为单位分配内存,每段分配一个连续内存区;
  2. 内存分区策略和算法与动态分区管理相同;
  3. 同一进程的各段在内存中不要求连续;
  4. 请求段式管理的内存分配和释放是在作业或进程的执行过程中进行的;
  5. 在请求段式管理中,若需调入一段而系统无足够空间时,则需淘汰在内存中的一段或几段,淘汰算法同请求页式管理——缺段中断处理。
段式管理的数据结构
  • 每一个程序设置一个段表,放在内存系统区内,属于进程的现场信息。
  • 段表中记录了用户程序的逻辑段号与内存物理段之间的关系,包括逻辑段号、物理段的首(地)址和物理段长度;
  • 段表始址放入段表地址寄存器。
段式地址变换

类似于与页式地址变换,如图:
在这里插入图片描述

段页式存储管理

结合页式段式优点,克服二者的缺点既方便用户的程序设计,有提高内存的利用率。

基本思想

等分主存为页,并从0开始编号;
进程的虚拟地址空间分段,并为每个段赋予一个段名,再把每段分成若干页,并从0开始编号;
在这里插入图片描述

段页式存储管理的数据结构

实现内存分配和地址变换,系统为每个进程设置一个段表,每个段设置一个页表:
段表:记录了每一段的页表始址和页表长度;
页表:记录了逻辑页号与内存块号的对应关系(每一段有一个,一个程序可能有多个页表);
空闲块管理:同页式管理;
分配:同页式管理。

段页式地址转换过程

根据段表地址寄存器查找段表起始地址;
将逻辑地址中的段号s与段表长度L比较,s<=L,根据段号s查找该段的页表的入口地址(第s段),否则越界中断;
将段表项中的页表长度与逻辑地址中的页号p进行比较,如p小于页表长度,则向下运行,否则越界中断;
查找页表,根据页号p得到对应的内存块号p’;
内存块号p’和页内地址d组合得到实际的内存地址。
举例:
例如给定某个逻辑地址中,段号为2,段内地址为6015,若系统规定块大小为1 KB,则采用段页式管理,该逻辑地址表示:段号为2,段内页号为5,页内地址为895。
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值