操作系统存储器管理

第五章 存储器管理

在这里插入图片描述

存储器管理的功能

  1. 主存分配
  2. 地址映射
  3. 内存保护
  4. 主存扩充

地址映射(地址重定位)

  1. 内存的每个存储单元都有一个编号,这种编号成为内存地址(物理地址、绝对地址
  2. 内存地址的集合称为内存空间(或物理地址空间
  3. 要求用户在内存地址编程是非常困拿的,尤其是在多道程序设计的环境中
  4. 用户变成所用的地址称为逻辑地址(或程序地址,或虚地址)由逻辑地址组成的空间称为逻辑地址空间程序地址空间
  5. 用户程序装入内存时对有关指令的地址部分的修改(从程序地址道内存地址的地址映射)称为地址重定位

内存保护

保证在内存中的多道程序只能在给定的存储区域内活动并互不干扰
硬件支持:界地址寄存器,如果未越界,则按此地址访问主存,否则将产生程序中断----越界中断(存储保护中断)

在这里插入图片描述

主存扩充(虚拟内存)

实现虚拟内存的基本原理:局部性原理

5.1存储器的层次结构

在这里插入图片描述

  1. 多层结构的存储器系统:三级存储层次:cpu寄存器-主存-辅存
  2. 主存储器与寄存器:寄存器和主存储器(内存)被称为可执行存储器
  3. 高速缓存和磁盘缓存
高速缓存磁盘缓存
寄存器与存储器之间,用于备份主存中常用的数据。减少处理机对主存储器的访问次数缓和io与主存的访问速度差异,用于展示存放频繁使用的一部分磁盘数据和信息,以减少对磁盘的访问次数

程序的装入与链接

用户源程序执行通常要经过的步骤

  1. 编译:由编译程序将用户胡源代码编译成若干个目标模块
  2. 链接:由连接程序将编译后形成的目标模块以及他们所需要的库函数,链接在一起,形成一个装入模块
  3. 装入,由装入程序将装入模块装入主存的过程
    在这里插入图片描述

程序的装入

绝对装入方式在可执行文件中记录内存地址,装入时直接定位在上述内存地址
可重定位方式在执行文件中,列出哥哥需要重定位的地质单元和相对地址值,当用户程序被装入内存时,一次性实现逻辑地址道物理地址的转换,以后不再转换,。即装入时根据所定位的内存地址去修改每个重定位地址项目,添加相应偏移量
动态运行时装入方式再装入模块装入主存后,并不立即把装入模块中的相对地址转化为绝对地址,而是把这种地址转换推迟到程序要真正执行时才进行,实现时需要重定位寄存器

静态重定位地址变换在进程装入时一次完成,以后不再改变

程序的链接

链接程序的功能是将经过编译或汇编后所得到的一组目标模块以及他们所需要的库函数装配成一个完整的装入模块

  1. 静态链接:事先进行链接以后不再拆开的连接方式
  2. 装入时动态链接:用户源程序经编译后所得到的目标模块,是在装入主存时,边装入边链接的
  3. 运行时动态链接:可将某些目标模块的链接,推迟到执行时才进行

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

连续分配方式

连续分配方式指为一个用户程序分配一个连续的内存空间

单一连续分配
固定分区分配
动态分区分配
可重定位分区分配

单一连续分配

  • 最简单,适用于单用户、单任务的os
  • 单道程序环境下,内存分为两个区域:系统去,用户区
  • 应用程序装入到用户区,可使用用户区全部空间
  • 系统区提供给os使用

固定分区分配

管理思想:把内存固定的划分为若干个固定大小区域,每个分区装入一道作业

在这里插入图片描述
分区大小通常由计算机操作员或由操作系统给出,并维护分区使用表,包含每个分区的起始地址,大小及状态
当用户程序需装入内存时,检查分区使用表,如果有可用的满足要求的分区,则分配,并置该分区状态为已分配,否则不给该程序分配内存

在这里插入图片描述

固定分区分配性能分析

在作业大小和出现频率已知的情况下,固定分区是合适的。在这种情况下分区的大小选择与作业大小选择相当,这样内存的使用效率较高。
但是若作业的大小和出现的频率不知道时,势必造成分区的大小和作业的大小相差甚远,这样会造成存储空间的浪费,从而影响整个系统的效率
优点:易于实现,开销小
缺点:内存碎片造成浪费;分区
总数固定,限制了并发执行的程序数目

动态分区分配

动态分区分配是指根据进程的实际需要,动态的为之分配内存空间
这种存储管理的方法解决了固定分区严重浪费内存的问题。是一种较为实用的存储管理方法
涉及到分区分配中的数据结构、分区分配算法、分区的分配回收问题

在这里插入图片描述

算法描述优点缺点
首次适应算法空闲分区按首地址递增的次序优先使用低地址空间,因而在高地址的空间可能会保留较大的空闲分区,所以,大进程申请的存储空间大都能在高地址端得到曼珠缺点由于每次只简单的使用找到的第一个分区,结果可能导致低地址部分不断被使用,将较大的空闲分区不断地分割为较小的空闲分区。每次查找都从地址开始,增加开销
最佳适应法空闲分区大小从小打到大的次序在系统中若存在一个与申请分区大小相等的空间,必定选中,若系统中不存在与申请分区大小相等的空闲区,则选中的的空闲区一定是满足要求的最小空闲区,而不至于毁掉较大的空闲区空闲的大小一般与申请分区大小不相等,因此将其一分为二,留下来的空闲区一般情况下是小很多的,以致无法使用。随着时间的推移,系统中小空闲区会越来越多,从而造成存储区的大量浪费
最坏适应算法按空闲区大小从大到小的顺序组织空闲区表当程序装入内存中最大的空闲分区后,剩下的空闲分区可能还相当大,还能装下的较大的程序,每次仅作一次查询工作,效率高,可以避免形成大量较小外零头但他总是分割大的空闲分区,当遇到大进程申请大空间时,无法找到一个足够大的空闲分区。在进程面前,内存中所谓的较大空闲分区也是外零头了

在这里插入图片描述

动态可重定位分区分

存储器管理的主要对象内存
单一连续分配
固定分区分配分区使用表,会产生不可用的内零头
动态分区分配会在分区外产生外零头,空闲分区表,空闲分区链;FF,NF,BF,WF
动态可重定位分区分配增加了紧凑功能的动态分区分配

离散分配方式

分页存储管理基本思想

程序地址空间:将进程的逻辑地址空间分成若干大小相等的部分,称为页
从0开始编页号,每一页内地址也是相对于0编制的

在这里插入图片描述

内存地址空间(物理地址空间)与页面分配

  • 按规定的逻辑页大小将内存空间划分为大小相等的区域,称为块或内存块
  • 从0开始编块号
  • 为进程分配内存空间时,以块为单位,将进程的若干个页分别装入到多个可以不相邻的物理块中

在这里插入图片描述

内存分配

  • 物理块表:整个系统有一个物理块表,描述物理内存空间的分配使用情况
  • 内存以块为单位进行分配,并按应用程序的页数多少来分配
  • 页和块的大小相同
  • 进程的最后一页经常装不满一个块,因而还会形成不可利用的碎片,称为页内碎片
  • 逻辑上相邻,物理上不一定相邻
  • 需要增加新的数据结构

在这里插入图片描述

地址结构

地址长度为N位,它包含两个部分
地址的高位部分为页号P,高址部分代表了页数
地址的地位部分为页内地址、位偏移量,低址的位数也代表了每一页的大小

页表

若将应用程序的包含页号和页内地址的逻辑地址转换成内存地址,必须要有一个数据结构,用来登记页号和块号的对应关系和有关信息
这样的数据结构称为页表,页表的作用是实现从页号到物理块号的地址映射

系统为每个进程在内存建立一个页表
页表内容:
页号|登记程序地址空间的页号
块号:等级相应的页所对应的内存块号
其他:登记于存储信息保护有关的信息

页表的首地址和长度存在于该进程的PCB中,占用处理机的当前进程的页表首地址和长度需要放在地址映射机构的页表首址寄存器和页表长度寄存器

分页中的地址映射其实与通常的地址映射的概念是一样的,即把程序地址转换成内存地址
这个转换过程是在程序执行过程中完成的,是动态地址映射

地址变换机构

地址变换

  • 地址变换机构的任务是将逻辑地址中的页号转变为物理地址快的块号,这个任务借助于页表来实现的
  • 页表驻留在内存,在系统中只设一个页表寄存器PTR,其中存在着页表在内存中的始址和页表长度,页表的始址和页表的长度存放在本进程的PCB中。页表功能由一组专门的寄存器来实现
  • 在现代计算机中,由系统提供的地址映射硬件来完成地址映射工作

在这里插入图片描述

分页存储管理中的信息保护

信息保护从两个方面实现

  1. 在分离程序地址的页号和页内地址时判别访问地址是否越界,若产生的页号满足下式为合法:0<=0页号<程序地址空间的页数
    判断由硬件自动做,若不合法,硬件产生越界中断,由操作系统的越界中断处理程序进行处理。
  2. 判断访问是否越权:在页表中增加用于存取控制和存储保护的信息,当要访问的某页的某个逻辑地址时系统要根据该页的存取控制和存储保护信息检查访问是否合法

快表/联想寄存器

每一次对内存的访问都要访问页表页表是放在内存中的,也就是说每一次访问内存的指令至少要访问两次内存,运行速度下降一半

解决方法

  • 把页表放在一组特殊的高速缓冲寄存器中(Cache)。从而加快访问内存的速度
  • 把这种快速存储器组成的页表称为快表,把存在内存中的页表称为慢表。快表又叫联想存储器或TLB(Translation lookaside buffers)

两级页表和多级页表

  • 页表需要连续空间存储的,但是当页表项很多时,仅采用一级页表需要大片连续空间
  • 可将页表份额,并对页表所占的空间进行索引形成外表页层
  • 由此构成二级页表
  • 更进一步可形成多级页表

页式存储管理方案小结:解决了碎片问题,便于管理

缺点:不易实现共享,不便于动态链接

分段存储管理方式—为了满足用户在编程和使用上的要求!

为什么要引入分段存储?

程序一般都可以分为若干个段,每个段都是一个相对独立的逻辑单位,分段存储更符合用户和程序员的需求
方便编程:用户按逻辑关系来划分若干个段
信息共享:段是可以信息共享的逻辑单位
动态增长
动态链接:以段作为动态连接的基本单位

分段存储管理基本思想

程序地址空间

  • 按程序自身逻辑关系划分为若干个段,每个段都有一个段号
  • 段号从0开始
  • 每段段内从0开始编址,段内地址连续
  • 各段长度不相等,段长由相应逻辑信息组的长度决定

在这里插入图片描述

内存地址空间:被动态的划分为若干个长度不相同的区域,称为物理段。每个物理段由起始地址和长度确定
内存分配:以段为单位分配内存,每一个段在内存中占据连续空间,各段之间可以不连续存放

在这里插入图片描述

短地址映射

  • 地址映射数据结构,每一进程有个段表,他的每一个段在段表中占用一个标目,记录了该进程在内存中的起始地址和段长度
  • 段表包括段的首地址,段的长度,和存取状态等信息
  • 段表可以存放在一组寄存器中,以此提高地址转换速度,常见的是将段表放入内存
  • 段表首地址指针和段表的长度存放在进程PCB中
  • 段表是用于实现从逻辑段到物理内存区的映射的

段表寄存器

在这里插入图片描述

  • 段表同样被保存在内存中
  • 段表寄存器:实现快速地质变化,用来存放当前执行进程的段表在物理内存中的起始地址
  • 当创建进程,奖金池的程序和数据装入内存时,系统为之建立段表,并将段表的起始地址填入进程的PCB中。
  • 当进程被调度执行时,取出其PCB中的段表首地址,填入段表寄存器中

快表

在分段系统中,为了访问内存中的一条指令或数据,需要两次访问内存

第一次,访问内存中的段表,获得对应段的起始地址。根据段的起始地址和段内偏移量,计算出物理地址
第二次,根据物理地址,访问对应存储的单元的指令或数据

同页地址变换一样,段地址变换过程中,也有两次访问内存的问题。为了加快访问内存的速度也可以采用快速存储器组成快表,用于保存最近使用过的段表项

(超级重要!!!!)分段与分页技术的比较!!!

页是信息的物理单位,段是信息的逻辑单位
页大小是系统固定的,段大小通常不固定
地址表示,分页是一维的,各个模块在链接时必须组成同一个地址空间。分段是二维的,各个模块在链接时可以每个段组成一个地址空间

信息共享:段的共享比页的共享更容易

段式存储管理方案小姐:
便于动态申请内存,管理和使用统一化,便于共享,便于动态链接
缺点:产生碎片

段页式存储管理方式

程序地址空间:
按段式划分:对用户来讲,按段的逻辑关系进行划分
按页划分:对系统来讲,按页划分每一段·············

基本思想

逻辑地址:先将用户程序分为若干个段,再将段分成若干个页
系统需要同时配置段表和页表

在这里插入图片描述
内存地址空间:按页式存储管理方案,内存分配以块为单位进行分配

在这里插入图片描述

地址变换

段表:需要配置段表寄存器。记录了每一段的页表始址和页表长度
进行地址变换时,首先利用段号S将他与段长TL进行比较S《Tl,利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址

页表:记录了该段中每个逻辑页号和内存块号的对应关系

地址变换过程(!!!!!!!!)

  • 首先,从段表寄存器从获得进程段表的起始地址,根据该地址,查找进程的段表
  • 然后根据逻辑地址指定的段号检索段表,找到对应端的页表起始地址。在根据逻辑地址中指定的页号检索该页表,找到对应页所在的块号。
  • 最后利用页框号加上逻辑地址中指定的页内偏移量,形成物理地址
  1. 第一次,访问段表,从中获得该段的页表首地址
  2. 第二次,访问页表,从中取出逻辑地址指定的页面所在的页框号,并将该页框号和页内偏移量相加,形成指令或数据的物理地址
  3. 第三次访问内存,根据前面计算的物理地址,去除对应存储单元的指令或数据
    可以在地址变换机构中增设一个高速缓冲寄存器,其中保存最近使用过的页号以及所属的段号

对换技术

在多道环境下扩充内存的方法,用以解决在较小的存储空间中运行较大程序时所遇到的矛盾

进程的程序和数据主要放在外存,当前需要执行的部分放在内存,内外存之间进行信息交换

==把内存中展示不能运行的进程或者展示不用的程序和数据换到外存上,以便腾出足够的内存空间。再把已具备运行条件的进程或者进程所需要的程序和数据换入内存。

作用:改善内存利用率;提高处理及的利用率和系统的吞吐量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值