第四章-存储器管理

存储部件

主存:保存进程运行时的程序及数据
寄存器:速度最快,价格昂贵且容量不大,一般以字为单位
高速缓存:
(1)速度比内存快,集成在CPU
(2)存放内存的部份拷贝,放置常用数据以提高速度
(3)不能被程序直接更改,由硬件自己处理对内存数据的拷贝
磁盘缓存:内存的一部分,将频繁使用的磁盘数据预读在磁盘缓存,减少磁盘读写时间

存储器管理

重点是内存管理,可直接影响存储器的利用率和系统性能
(1)存储器资源的分配与回收
(2)地址变换(逻辑与物理地址的对应关系维护)
(3)存储共享和保护
(4)虚拟存储的调度算法

程序的装入和链接
多道环境下,程序的运行须先创进程,闯进丞则须先将程序和数据装入内存
编译->链接->装入

  • 地址的概念
    ☞逻辑地址(相对地址,虚地址):程序经过编译形成的目标代码,不能在内存中读取信息
    ☞物理地址(绝对地址,实地址):内存中存储单元的地址,可被直接寻址
  • 装入中的地址处理
    (1)绝对装入方式:逻辑地址==物理地址
    (2)静态可重定位装入方式:执行前映射,重定位后物理地址不改变
    优点:不需硬件支持,可装入有限的多道程序
    缺点:一个程序需占用连续的内存空间且装入后无法移动,不易实现共享
    (3)动态运行时(重定位)装入方式:依靠重定位寄存器(硬件),地址转换在程序真正要执行时进行
    被记录的基地址不一定固定,可能根据内存使用情况变化更新

重定位:把目标程序中的指令和数据的逻辑地址变为内存中物理地址的过程

  • 进程在内存中的位置记录
    (1)整体连续在内存中的:记录基地址
    (2)离散装入不同内存位置的:记录多个偏移用的基地址

不同程序的连接装入方式(内存使用时机)

  • 静态链接:装入运行前将目标模块及所需库函数链接成整体且不在拆分
  • 装入时动态链接:装入内存时边装入边链接
    在这里插入图片描述在这里插入图片描述
  • 执行时动态链接:在需要某些目标块时才进行的链接
    在这里插入图片描述

连续分配存储管理方式

单一连续分配(最简单,用于单用户单任务):将内存分为系统区与用户区
利:易于管理;弊:易浪费内存空间
固定分区分配(多道程序系统和分时系统):将内存分为多个区域,操作系统占一个,每个应用进程各占一个。几个分区便只允许几个程序多道并发

  • 分区大小划分
    (1)大小相同:使用多个相同程序并发,缺乏灵活性
    (2)大小不等:多个小,适量中,少量大,根据程序大小分配

  • 所需数据结构
    (1)建立记录相关信息的分区表,表项为|起始位置|大小|状态|
    (2)分区表中表项值随内存的分配与释放而动态改变

  • 内存分配过程
    (1)分区表被分为空闲分区表和占用分区表
    (2)空闲分区表根据算法将表项进行排序
    (3)检索空闲分区表,将满足要求且尚未分配的分区派给程序;若未找到合适分区则拒绝程序请求

  • 固定分配不足的原因
    (1)内碎片(一个分区内的剩余空间)造成浪费
    (2)分区总数固定,限制了并发程序执行的程序数目

动态分区分配:装入程序是根据程序需要动态分配内存空间
☞优点:并发进程数无固定限制,不产生内碎片
☞缺点:有外碎片

  • 所需数据结构
    (1)空闲分区表 (2)空闲分区链(有前后向指针)

  • 分区分配算法
    【首次适应算法FF】
    (1)以地址递增的方式为空闲分区排序
    (2)分配时从链首检索满足要求的空闲分区
    (3)从分区中分出作业所需大小,余下空间仍留在空闲链表中
    ☞优点:优先利用内存低址部分,保留了大部分高址空闲区
    ☞缺点:随着低址部分的不断划分会产生较多小碎片;每次查找都从低址开始会逐渐增加查找开销
    【循环首次适应算法】
    (1)按地址将空闲分区排序
    (2)从上次找到的空闲分区的下一分区开始查找,直到找到满足要求的分区(需设置起始查询指针并采用循环查找方式)
    (3)分出所需大小
    ☞优点:分区分布均匀,减少查找开销
    ☞缺点:缺少大的空闲分区
    【最佳适应算法】
    (1)将空闲分区按容量从小到大排序
    (2)从链首开始检索,找到第一个满足的就分配
    (3)分出所需大小
    ☞缺点:会产生较多难以利用的外碎片
    【最差适应算法】
    ☞基本不留小空闲分区,但可能缺乏较大空闲分区
    【快速适应算法】
    (1)根据进程常用空间进行大小划分,相同大小的串成链
    (2)进程需要时从最接近需求的链中摘取一个分区进行分配
    ☞能快速找到合适分区,但须管理较多链表信息(空间换时间)

分页存储管理方式

更细粒度的处理空间,就按少粗放管理或开销问题。内利使用率高,浪费少(不是绝对没有碎片)
页面
内存划分为大小为单元k的物理块,作业按大小为k划分为页面
☞物理划分块的大小=逻辑划分页的大小

  • 太大:最后一页的内碎片增大

  • 太小:提高了利用率(页面碎片总空间减小),但进程的页面数量过多,页表过长,增加了空间使用

页表:页号到物理块号的地址映射

地址处理

  • 逻辑地址组成:页号+页内地址(偏移量)
  • 偏移量=log2(页面大小)
  • 页号位数=log2(页数)
  • 业内地址位数=log2(页面大小)=页号位数*页面大小
  • 块内偏移=页内偏移

地址变换机构

设置一个页表寄存器PTR,记录页表首地址和页表长度,便于快速定位

  • 进程A的地址变换
    (1)运行时,将PCB中页表信息写入PTR
    (2)根据分页原理,在执行指令时得到页号和内部偏移量
    (3)CPU访问PTR找出页表
    (4)查找页表数据找出对应物理块,完成地址映射,在内存中找到该指令
    检索前会判断是否发生越界错误

访问内存的有效时间EAT
☞ 进程发出访问请求后,经过地址变换找到对应的物理地址单元并取出数据所花费的总时间
设访问一次内存的时间为t,则EAT=2t
(1)访问内存中页表
(2)访问物理块

  • 高速缓冲寄存器(快表)
    为减少第一步访问内存时间,具有“并行查询能力”,存放正在执行进程的页表数据项
    设a为查询命中率,t’为查询一次快表所需时间:EAT=at’+(1-a)(t+t’)+t=2t+t’-at
  • 不足
    容易造成共享和非共享数据共处一页,不方便设置权限

分段存储管理方式

将作业分成若干段,各段可离散放入内存,段内仍连续存放。方便用户和使用上的要求

- 特点:

  • 基本特点
    (1)每段有自己的名字,都从0编址,可分别编写和编译。装入内存时,每段赋予一个段号
    (2)每段占据一块连续内存
    (3)各段大小不等,由编译程序决定

  • 段表与地址变换机构
    ☞段表记录每段实际存放的物理地址(内存首地址和段长)
    相对地址:段号+段内地址

分段与分页的主要区别
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值