存储器管理

存储器管理

1. 存储器管理的基本概念

2. 程序的装入和链接

3. 连续分配存储管理方式

4. 基本分页存储管理方式

5. 基本分段存储管理方式

存储器管理的基本概念

主存储器
主存储器是计算机系统中的一个主要部件,用于保存进程运行时的程序和数据,CPU的控制部件只能从主存储器中取得指令和数据,数据能够从主存储器中读取并将他们装入到寄存器中,或者从寄存器存入到主存储器,CPU与外围设备交换的信息一般也依托于主存储器地址空间。但是,主存储器的访问速度远低于CPU执行指令的速度,于是引入了寄存机和告诉缓冲。
寄存器
寄存器访问速度最快,能与CPU协调工作,价格昂贵,容量不大,寄存器用于加速存储器的访问速度,如用寄存器存放操作数,或用作地址寄存器加快地址转换速度等。
高速缓存
高速缓存容量大于或远大于寄存器,但小于内存,访问速度高于主内存器,根据程序局部性原理,将主存中一些经常访问的信息存放在高速缓存中,减少访问主存储器的次数,可大幅度提高程序执行速度。通常,进程的程序和数据存放在主存,每当使用时,被临时复制到高速缓存中,当CPU访问一组特定信息时,首先检查它是否在高速缓存中,如果已存在,则直接取出使用,否则,从主存中读取信息。有的计算机系统设置了两级或多级高速缓存,一级缓存速度最高,容量小,二级缓存容量稍大,速度稍慢。
磁盘缓存
磁盘的IO速度远低于对主存的访问速度,因此将频繁使用的一部分磁盘数据和信息暂时存放在磁盘缓存中,可减少访问磁盘的次数,磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,提供对主存储器空间的扩充,即利用主存中的存储空间,来暂存从磁盘中读出或写入的信息,主存可以看做是辅存的高速缓存,因为,辅存中的数据必须复制到主存方能使用,反之,数据也必须先存在主存中,才能输出到辅存。在这里插入图片描述

程序的装入和链接

为了使程序能够运行,必须先为之创建进程,而创建进程的第一件事,就是将程序和数据装入内存,如何将一个用户源程序变为一个可在内存中执行的程序,通常要经过如下几步,首先是编译(由编译程序将用户源代码编译成若干个目标模块),其次是链接(由链接程序将编译后形成的一组目标模块,以及它们所需要的库函数链接在一起,形成一个完整的装入模块),最后是装入(由装入程序将装入模块装入内存)。
在这里插入图片描述

程序装入
绝对装入方式
由编译/汇编程序给出目标模块在内存中的绝对地址,装入程序将目标模块装入绝对地址标识的内存区域
仅应用于单道程序系统
可重定位装入方式
根据内存的使用情况,将程序装入合适区域,在装入过程中要修改程序和数据的地址,即重定位。由于地址修改是在装入过程完成,且不再修改,故称为静态重定位
动态运行时装入方式
动态运行时的装入程序,在把模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。
程序链接
静态链接
在程序运行前,把编译后的目标模块和所需的库函数链接成装入模块,以后不再拆开。
例:程序I编译后生成三个目标模块A、B和C, 它们的长度分别为L、M和N。模块A通过Call B,调用模块B;模块B通过Call C语句,调用模块C。各个模块分别从0开始编址。
将模块A、B和C装配成一个装入模块,必须完成以下两件事情:
1.修改模块的相对地址,使各个模块实现顺序编址
2.用相对地址替换外部符号
在这里插入图片描述

装入时动态链接
装入内存时,边装入边链接:在装入过程中,发生外部调用事件时,装入程序查找相应的目标模块,链接、修改地址,装入内存
优点
1.有利于模块修改和更新静态链接修改模块需要打开装入模块
2.有利于目标模块的共享不同应用程序链接相同的目标模块
运行时动态链接
将链接推迟到程序运行时才进行链接:当需要用到某个模块时,才把它装入内存,链接到调用者模块上
优点
1.有利于加快装入过程
2.有利于节省内存空间

连续分配存储管理方式

为用户程序分配连续的内存空间
在这里插入图片描述
单一连续分配
这是一种最简单的存储管理方式,但只能在单用户、单任务的操作系统中,将内存分为系统区和用户区,系统区供OS使用,通常放在内存的低地址,用户区是指除系统区以外的全部内存空间,提供给用户使用。
固定分区分配
1.分区大小相等,即所有的内存分区大小相等。缺点是缺乏灵活性,即当程序太小时,会造成内存资源的浪费,程序太大时,一个分区由不足以装入该程序,只是该程序无法运行。
2.分区大小不等,把内存区划分成含有多个较小的分区、适量中等分配和少量大分区,这样,便可根据程序的大小为之分配适当的分区。
为了便于内存分配,将分区按大小进行排队,并为之简历一张分区使用表,其中各表项包括每个分区的起始地址、大小、状态(是否已分配),当有一个程序需要装入时,由内存分配程序检索该表,从中找出一个能满足要求的,尚未分配的分区,将之分配给该程序,然后将该表项中的状态设置为已分配,若未找到大小足够的分区,则拒绝为该用户分配内存。
在这里插入图片描述
动态分区分配
动态分区分配是根据进程的实际需要,动态地为之分配内存空间,在实现可变分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法、分区的分配和回收等。
1.分区分配中的数据结构:空闲分区表,空闲分区链
2.分区分配算法
在这里插入图片描述

  1. 分区分配操作,在动态分区分配存储管理中,主要的操作是分配内存和回收内存。
    分配内存
    系统利用某种分配算法,从空闲分区链(表)中找到所需大小的分区,其流程图如下:

在这里插入图片描述
注:size表示事先规定的不再切割的剩余分区的大小。空闲分区表示为m.size,请求分区的大小为u.size

回收内存

  • 该空闲区的上下两相邻分区都是空闲区

三分区合并,修改上分区的大小,删除下分区的表项或链指针

  • 该空闲区的上相邻区是空闲区

和上分区合并,修改上分区的大小

  • 该空闲区的下相邻区是空闲区

新分区的起址是释放区的始址

  • 两相邻区都不是空闲区

释放分区作为一个独立的分区插入可用表或者链

基本分页存储管理方式

页面与页表
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页进行编号,从0开始。相应地,把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或者页框,也同样为它们编号,如0#块,1#块等。在未进程分配内存时,以块为单位将进程的若干个页分别装入到多个可以不相邻接的物理块中,由于进程的最后一页经常装不满一块而形成不可利用的碎片,称之为页内碎片
在分页系统中的页面其大小应适中,页面若太大,一方面可以是内存碎片减少,有利于提供内存利用率,但是,每一个进程占用的页面较多,导致页表过长,占用太多内存,会降低页面换进换出的效率。页面若太大,可减少页表的长度,提供页面换进换出的速度,但是,内存碎片会增大,所以,也页面大小应适中,通常为512B~8K
分页地址中的地址结构如下:
在这里插入图片描述
为了能够保证在内存中找到每个页面所对应的物理块,系统为每个进程建立了一张页面映射表,简称为页表。页表项纪录了相应页在内存中对应的物理块号,在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号,页表实现了从页号到物理块号的地址映像
地址变换机构
当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表,查找操作由硬件执行,在执行检索前,先将页号与页表长度进行比较,若页号大于或等于页表长度,则表示本次访问的地址超越了进程的地址空间,这一错误将被系统发现并产生一个地址越界中断。若未出现错误,则将页表始址加上页号与页表项长度的乘积,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器,与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中,这样,便完成了逻辑地址到物理地址的转换。
在这里插入图片描述
上述操作中,每次存取一个数据时,都会访问内存两次,第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址,第二次访问时,才是从第一次所得的地址中获得所需数据,因此,这种方式会使计算机的处理速度降低一半,为了提高地址变换速度,可以在地址变换机构中增设一个具有并行查询能力的特殊高速缓冲寄存器,又称为联想寄存器或快表,用以存放当前访问的那些页表项。

基本分段存储管理方式
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值