操作系统——内存管理
2021/11/15 7:12:58
本文主要是介绍操作系统——内存管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
一.存储管理的任务和功能
二.存储分配的几种形式
三.重定位
四.分区存储管理
五.页式存储管理
一.存储管理的任务和功能
-
存储空间的分配和回收
(1)记住每个存储区域的状态,即是否已经被分配。
主存分配记录表:保存每个存储区域的状态的数据结构
(2)实施分配并修改主存分配记录表
(3)接收系统或用户释放的存储区域,相应的修改主存分配记录表
-
地址映射和重定位
逻辑地址(相对地址):编译系统从零号地址单元开始为目标程序指令顺序分配的地址。——集合称为地址空间
物理地址(绝对地址):主存中一系列存储信息的物理单元的编号。——集合称为存储空间
把程序地址空间的逻辑地址转化为主存空间中的物理地址。
-
存储共享和保护
存储共享:①多个用户程序共同使用存储空间,各自使用不同的存储区域;;②多个用户程序共同使用主存中的某些程序和数据区,称之为共享区。
目的:确保存储区中信息不被破坏,共享区中信息完整一致。
-
主存扩充
原因:小主存无法满足大程序要求;主存单元的容量受实际单元的限制
常用技术:虚拟存储技术,自动覆盖和交换技术
二.存储分配的几种形式
-
直接存储分配方式
程序设计人员在程序设计时,汇编程序对源程序进行编译时使用物理地址。
-
静态存储分配方式
系统必须为程序分配需要的全部的存储空间,若存储空间不够就不能装入。用户程序一旦装入,所分配到的存储空间只有结束时才会释放,且是固定的,不能动态申请。
不能对存储空间动态扩展,不能有效实现存储器资源共享。
-
动态存储分配方式(离散存储)
装入存储空间时确定在存储空间的位置,但在运行时可以根据系统需要发生改变。不需要全部程序装入,可根据执行需要部分动态装入。可动态申请存储空间。
实现方式:通常采用覆盖与交换技术
(1)覆盖技术
把一个用户程序拆分成若干功能相互独立的程序段,不会同时执行的共享一个主存区域,存放在外存中。当CPU要求某一个程序段执行时,就从外存调入到内存,覆盖原程序段,执行。
要求搞清楚程序段的覆盖结构,执行和覆盖的顺序。
如图所示的覆盖结构中,横向一层的程序段是不会同时执行的,因此可以分配在同一个存储空间中,大小为最大的程序段的大小。高层的程序段可以调用低层的程序段。
因此,从上至下,第一层需要
20k
,第二层50k
,第三层40K
,一共需要110k
,比原来的190K
节约内存。(2)交换技术
以程序为单位,系统将暂时不用的程序或数据部分全部从主存调出,腾出空间,将要使用的程序和数据调入主存,转交控制权,进行运行。
三.重定位
-
概念:由于用户程序的装入而引起的地址空间的 相对地址 转化为存储空间中的 绝对地址 的地址变换过程。
-
实现方法:
(1)静态地址重定位
地址变换在装入时一次完成,以后不再改变。
①用户程序必须分配一个连续的存储空间
②难以实现程序和数据的共享
(2)动态地址重定位
在程序段执行时,才进行地址转换,因此装入内存后所有地址依然是逻辑地址。这种方法至少需要一个重定位寄存器
BR
和一个相对地址寄存器VR
.BR
:存放程序装入的起始物理位置。(可以实现程序在内存中的移动)VR
:存放目标的逻辑地址。实际物理地址=目相对地址寄存器的值+重定位寄存器的值
①程序可以移动,提高主存利用率和灵活性。
②有利于程序段共享
③为实现虚拟存储奠定基础
四.分区存储管理
-
固定分区法
1)概念:系统在初始化时,将主存空间分为若干个固定大小的区域,且不可改变
2)分区说明表:指明系统的分区个数,每个分区的大小、起始地址、分配状态。分区说明表用于协助新进程分配存储空间,使用静态重定位方法;若找不到大小足够的分区,则给出提示信息并终止该进程运行。
3)缺点:造成内存资源浪费。
一个程序所需要的内存空间只有调入主存时才能由调度程序分析确定,很有可能小于内存空间的分区大小, 产生没有使用的“碎片”。
-
动态分区法
1)概念:系统初启时,除了操作系统中常驻主存部分,只存在一个空闲分区。随后分配程序将该区依次划分给调度程序选中的进程。
2)可用分区表 / 可用分区链表:主存中的空闲区。
主存资源请求表:请求主存资源的作业或进程构成的,包含作业进程号和请求长度。
3)动态分区的分配方式:
①最先适应法:将作业分配到主存第一个足够装入他的可用空闲区。
②最佳适应法:将作业分配到主存中大小与之最相近的可用空闲区。(要求可用分区表或自由链表按照空闲区从小到大的次序排列)
③最坏适应法:将作业分配到主存中最大的可用空闲区。(要求可用分区表或自由链表按照空闲区从大到小的次序排列)
4)动态分区的回收方式:
系统提供相应的回收程序,将释放的分区与他相邻的空闲分区进行合并,形成一个更大的空闲分区。
①释放区与上下空闲区相连
②释放区与上空闲区相连
③释放区与下空闲区相连
④释放区没有与空闲区相连
5)存储保护和共享
硬件地址转换机构中有限长寄存器和基址寄存器。
限长寄存器:存放作业占用的连续存储空间的长度。
基址寄存器:存放分配给作业使用的分区的最小绝对值。
存储保护:当作业存入内存中时,硬件地址转换机构将逻辑地址转换为绝对地址。当逻辑地址小于限长值时,正常运作得出绝对地址;当逻辑地址大于限长值时,表示作业欲访问的地址超过了分配得到的区域,产生地址越界中断。
存储共享:如果没有基址寄存器和限长寄存器,对于多个程序都要使用的一段程序,需要在每一个分区中都重复添加;有基址寄存器和限长寄存器的话,允许一个作业占用多个分区。系统规定某对基址/限长寄存器限定的区域是共享的,共享区的信息只能执行或读出,不能写入。
五.页式存储管理
概念:将作业分配在不连续的大小相同的存储区域中。存储空间分为大小相同的块/页框,通常一个页框的大小是2的整数次幂;进程的地址空间也划分为大小与页框相同的页面。划分后,作业的地址空间由页号和页内偏移组成。分配时,页框内的用户进程是连续的页框间可以不连续。
-
静态分页存储管理
1)概念:用户作业在开始执行前,把整个程序和数据装入内存,操作系统通过页表和硬件地址转化机构实现逻辑地址到物理地址的转化。
2)主存页框的分配和回收:
①页表(用于动态重定位)
占用主存的一块固定存储区,是作业在装入主存并创建相应进程时,操作系统根据主存分配情况自动建立的。
页表中包含页号,页框号,即表示一个页面应当存储在主存的哪一个页框中。
②请求表:内容包括进程号,请求页面数,页表起始地址页表长度,状态
③存储页框表:位示图、空闲页框链表
④分配与回收算法:
分配:当有作业或进程请求分配页框时,首先从请求表中查出作业或进程要求的页框数,然后由存储页框表检查是否有空闲的页框,没有则无法分配,有则分配并设置页表,并填写请求表中的相应项。
回收:进程执行结束后,根据进程页表中的页框号,将这些页框插入存储页框表中成为空闲页框,拆除该进程对应的页表。
3)页式地址变换:
步骤:①根据主存页框的大小分割存储空间,将进程的每个页面分配到主存空闲空间中,系统分配并设置页表。
②用户进程开始执行时,系统首先设置控制寄存器的内容
③由硬件地址变换机构中的页号在页表中找到相应页框号
④页表中的页框号和逻辑地址中的页内偏移分别写入绝对地址的相应位置。
⑤物理地址=页号*页框大小+页内偏移地址
4)快表:
具有并行查询能力的高速缓冲存储器,用来存放页表的一部分,可以减少访问主存的次数,提高地址变换速度。
-
虚拟页式存储管理
局部性原理:
①时间局部性:一条指令被调用后,不久以后很有可能被继续执行;若一个数据被访问后,一段时间后很有可能被再次访问。
②空间局部性:如果程序访问了某一个存储单元,其附近的存储单元不久后也会被访问。
1)基本思想:基于局部性原理,系统把当前要用的程序和数据装入主存,暂时不用的放在外存,必要时可以调入主存,而主存中不用的程序和数据可以调出。
2)特征:①多次性:一个程序分部分多次调入主存 ②对换性:主存中暂时不用的程序和外存中要用的程序可以调换
3)实现:使用分页技术
①数据结构:状态位,访问字段,修改位,保护权限,外存地址
②工作流程
-
硬件环境:具有一定容量的主存、外存、地址变换机构、缺页中断机构
-
缺页中断和一般中断的不同:在指令执行期间产生和处理的中断信号;一条指令执行期间,可能产生多次缺页中断。
-
工作过程:
4)页面置换
①调页策略
-
预调页策略:程序的许多页存储在外存中,一次性调入若干相邻的页。
-
请求调页策略:当进程执行需要某些在外存的页时,立即提出请求,由系统调入。
②分配策略
-
固定分配策略:每个进程分配一个固定大小的主存空间,不可更改,页面调度只能在各个空间中进行。
-
可变分配策略:每个进程分配一个主存空间,若该进程频繁发生缺页中断,就增加主存空间,反之减少。
-
页面置换算法
缺页中断率:f=F/(S+F);F为缺页中断次数,S为作业P在运行中成功访问次数。
优化算法
OPT
:(不可能实现)选择被替换的页是永久不使用的页/最长时间内不使用的页先进先出算法
FIFO
:淘汰先进入主存的页面,认为最先进入主存的页最近不被访问的可能最大。时钟算法:用环形链表表示各页建立时间的先后,设置访问位R,若表头的R为1,则移动指针使原队头移动到队尾。
-
这篇关于操作系统——内存管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法