实际操作系统chapter存储器管理
专升本操作系统第四章存储管理
缺点
内存紧缩操作需要消耗较大的系统资源,可能会 影响系统性能。
04
页式存储管理
页式存储管理的概念
01
页式存储管理是一种将内存划 分为固定大小的页,并将外存 空间划分为同样大小的页的存 储管理方式。
02
每个程序都被划分为一系列的 页面,并按照一定的规则将程 序加载到内存中。
段的共享
多个程序可以共享同一个段,通过共享可以节省 内存空间。
段的保护
通过设置段表和段长寄存器,实现段的保护,防 止越界访问。
段的移动
当需要将程序从内存中移出时,可以移动其中的 某个或多个段,而不是整个程序。
段式存储管理的优缺点
提高内存利用率
可以将不同程序的不同段分配到不同 的内存区域,避免浪费。
存储管理的主要目标是提高存储器的利用率,并保 证存储器的安全性和可靠性。
存储管理的功能
01
02
03
04
内存管理
负责内存的分配、回收和保护 ,包括内存分区、分页、分段 等管理方式。
外存管理
负责磁盘等外部存储器的管理 ,包括文件的创建、删除、读 写等操作。
缓存管理
负责缓存区的分配、替换和缓 存数据的读写操作,以提高存 储器的访问速度。
动态分区存储管理的优缺点
02
01
03
优点 可以有效地利用物理内存,提高内存利用率。 支持多道程序运行,提高系统吞吐量。
动态分区存储管理的优缺点
• 可以根据进程的实际需求动态地分配和回收内存。
动态分区存储管理的优缺点
由于分区分配算法的选择会影响内存利用率和 系统性能,因此需要仔细选择合适的算法。
操作系统课件之第四章存储器管理
• 存储器管理概述 • 存储器组织结构 • 内存分配与回收 • 虚拟内存管理 • 存储器管理性能优化
01
存储器管理概述
存储器管理的功能
内存分配
为每个进程分配所需的 内存空间,包括代码、
数据和堆栈。
内存回收
当进程完成或释放其内 存时,操作系统负责回
收这些内存。
内存保护
动态分配策略
根据进程的实际需要动态 地分配物理内存。
分段式分配策略
将进程的逻辑地址空间划 分为多个段,每个段对应 一个物理内存区域。
05
存储器管理性能优化
内存访问冲突的解决
内存访问冲突是指多个进程同时访问同一内存地址时产生 的冲突,可能导致数据错误或程序崩溃。
解决内存访问冲突的方法包括使用锁机制、信号量机制、 避免死锁等,以实现进程间的互斥访问和同步控制。
确保每个进程只能访问 其分配的内存空间,防
止非法访问。
内存扩充
通过虚拟内存技术,将物理 内存与外部存储器结合,提
供更大的可用内存空间。
存储器管理的分类
固定分区存储器管理
将内存划分为固定大小的分区 ,每个进程分配一个分区。
可变分区存储器管理
根据进程大小动态分配内存分 区过页表进 行映射。
引用计数
通过跟踪每个内存块的引用计数来回 收内存,当引用计数为零时,该内存 块可以被回收。
分代收集
将内存中的对象按照存活时间和使用 频率分为不同的代,根据不同代的特 性采用不同的回收策略。
内存优化技术
内存压缩
通过压缩内存中的数据来减 少内存占用和提高内存利用 率。
内存共享
通过共享内存中的数据来减 少内存占用和提高数据利用 率。
操作系统教程 第3章存储器管理
(2)如果无阻塞进程,则选择优先级低的就绪进程。
换入进程的选择: 当有空闲内存时,便执行进程的换入操作。 首先选择“就绪且换出”状态的进程换入,如果存在 多个,则选择换出时间最久的进程。
3.4.6 可变分区存储管理举例
【例 3-2】主存有两个空闲区 F1 、 F2 如图所示。 F1 为 220KB , F2为 120KB,另外依次有 J1 、 J2、 J3三个作业请求加 载 运 行 , 它 们 的 主 存 需 求 量 分 别 是 40KB 、 160KB 、 100KB,试比较最先适应算法、最优适应算法和最坏适应 算法的性能。
高速缓存(cache)
高速缓存是现代计算机结构中的一个重要部件。 ★ 有些cache由硬件实现 如,指令cache,用于暂存下一条欲执行的指令,纯硬 件cache不需要os控制。 ★ 有些cache由程序员、编译系统和os实现 如,快表。 在采用cache的系统中,要注意解决数据的一致性问题 。因为这时数据可能出现在不同的层次上。在多处理机的 环境中,情况会更复杂。
不是一种实际存在的存储介质,它依托于固定磁盘,提供对主存空间
的扩充。
寄存器 高速缓存 主存储器 磁盘缓存 固定磁盘 可移动存储介质
存储管理
设备管理
寄存器访问速度最快且最昂贵,它容量小,以字( word)为单位。一个计算机系统可能包括几十个至上百 个寄存器,用于提高存储访问速度。比如,用寄存存放操 作数,或用地址寄存器加快地址转换速度。 高速缓存的容量稍大,速度快于主存,利用它存放主 存中马上要访问的指令,可大大提高执行速度。主存的速 度为1µ s,高速缓存为0.1µ s。 要执行的程序必须先装入主存,根据局部性原理,只 要将程序的一部分装入主存就可以执行,其余部分放在磁 盘缓存。
操作系统复习存储器管理
第一章 存储器管理4.1 存储器的层次结构—存储器应容量大,便宜,速度跟上处理器4.1.1 多级存储器结构通常有三层,细分为六层,如图4-1, 越往上,速度越快,容量越小,价格越贵; 寄存器和主存又称可执行存储器,进程可直接用指令访问,辅存只能用I/O 访问;4.1.2 主存储器与寄存器1.主存储器---内存,保存进程运行时的程序和数据;CPU与外围设备交换的信息一般也依托于主存储器地址空间;为缓和访存速度远低于CPU 执行指令的速度,在计算机系统中引入了寄存器和高速缓存;2.寄存器---与CPU 协调工作,用于加速存储器的访问速度,如用寄存器存放操作数,或用地址寄存器加快地址转换速度等;4.1.3 高速缓存和磁盘缓存1.高速缓存---根据程序执行的局部性原理将主存中一些经常访问的信息程序、数据、指令等存放在高速缓存中,减少访问主存储器的次数,可大幅度提高程序执行速度;2.磁盘缓存---将频繁使用的一部分磁盘数据和信息,暂时存放在磁盘缓存中,可减少访问磁盘的次数;它依托于固定磁盘,提供对主存储器存储空间的扩充,即利用主存中的存储空间,来暂存从磁盘中读/写入的信息;4.2 程序的装入和链接多道程序运行,需先创建进程;而创建进程第一步是将程序和数据装入内存;将源程序变为可在内存中执行的程序,通常都要经过以下几个步骤:编译---若干个目标模块;链接---链接目标模块和库函数,形成装入模块;装入---图 4-2 对用户程序的处理步骤寄存器高速缓存主存磁盘缓存磁盘可移动存储介质CPU 寄存器主存辅存第一步第二步第三步内存4.2.1 程序的装入——无需连接的单目标模块装入理解装入方式1. 绝对装入方式Absolute Loading Mode ---只适用单道程序环境如果知道程序的内存位置,编译将产生绝对地址的目标代码,按照绝对地址将程序和数据装入内存;由于程序的逻辑地址与实际内存地址完全相同,故不须对程序和数据的地址进行修改;绝对地址:可在编译时给出或由程序员直接赋予;若由程序员直接给出,不利于程序或数据修改,因此,通常是在程序中采用符号地址,然后在编译或汇编时转换为绝对地址;2. 可重定位装入方式Relocation Loading Mode ---适于多道程序环境多道程序环境下,编译程序不能预知目标模块在内存的位置;目标模块的起始地址是0,其它地址也都是相对于0计算的;此时应采用可重定位装入方式,根据内存情况,将模块装入到内存的适当位置,如图4-3 作业装入内存时的情况 ;3.动态运行时装入方式Dynamic Run-time Loading ---适于多道程序环境可重定位装入方式并不允许程序运行时在内存中移动位置;但是,在运行过程中它在内存中的位置可能经常要改变,此时就应采用动态运行时装入方式;动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正执行时才进行;因此,装入内存后的所有地址都仍是相对地址;问题:程序装入内存后修改地址的时机是什么4.3 连续分配方式4.3.3 动态分区分配——根据进程需要动态分配内存1. 分区分配中的数据结构1 空闲分区表—用若干表目记录每个空闲分区的分区序号、分区始址及分区的大小等数据项;2 空闲分区链--为实现对空闲分区的分配和链接,在每分区起始部分,设置前向指针,尾部则设置一后向指针;为检索方便,在分区前、后向指针中,重复设置状态位和分区大小表目;当分0内存空间区被分配后,把状态位由“0”改为“1”时,前、后向指针失去意义;图 4-5 空闲链结构2. 分区分配算法P1231首次适应算法first-fit —空闲分区链以地址递增次序链接 每次按分区链的次序从头查找,找到符合要求的第一个分区;2 循环首次适应算法—FF 算法的变种从上次找到的空闲分区位置开始循环查找,找到后,修改起始查找指针; 3 最佳适应算法—空闲分区按容量从小到大排序 把能满足要求的、最小的空闲分区分配给作业 4 最坏适应算法——空闲分区按容量从大到小排序 挑选最大的空闲区分给作业使用;5) 快速适应算法—根据容量大小设立多个空闲分区链表3. 分区分配操作1.分配内存请求分区u.size; 空闲分区m.size; m.size-u.size ≤size,说明多余部分太小, 不再切割,将整个分区分配给请求者;否则从该分区中划分一块请求大小的内存空间,余下部分仍留在空闲分区链;如图4-6 内存分配流程;2.回收内存1 回收区与插入点的前一空闲分区F1相邻:合并,修改F1大小;2 回收区与后一空闲分区F2相邻:合并,修改首地址和大小;3 回收区同时与前、后两个分区邻接:合并,修改F1大小,取消F2;4 回收区不邻接:新建表项,填写首地址和大小,并插入链表;如图前向指针N +20N 个字节可用后向指针N +2图 4-6 内存分配流程4.3.6 可重定位分区分配1.动态重定位的引入例:在内存中有四个互不邻接的小分区,容量分别为10KB 、30KB 、14KB 和26KB;若现有一作业要获得40KB 的内存空间,因连续空间不足作业无法装入;可采用的一种解决方法是:通过移动内存中作业的位置,以把原来多个分散的小分区拼接成一个大分区的方法,称为“拼接”或“紧凑;由于用户程序在内存中位置的变化,在每次“紧凑”后,都必须对移动了的程序或数据进行重定位;图 4-8 紧凑的示意4.3.7 对换即中级调度1. 对换Swapping 的引入(a ) 紧凑前(b ) 紧凑后“活动阻塞”进程占用内存空间;外存上的就绪作业不能进入内存运行;所谓“对换”,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间;再把已具备运行条件的进程或所需要的程序和数据,调入内存;对换是提高内存利用率的有效措施;根据对换单位可分为:进程对换、页面对换和分段对换;为了能实现对换,系统应具备以下三方面功能:对换空间的管理、进程的换出与换入2. 进程的换出与换入1进程的换出选择阻塞且优先级最低的进程,将它的程序和数据传送到磁盘对换区上;回收该进程所占用的内存空间,并对该进程的进程控制块做相应的修改;2进程的换入找出“就绪” 但已换出到磁盘上时间最久的进程作为换入进程,将之换入,直至已无可换入的进程;4.4 基本分页存储管理方式前面的连续分配方案会形成许多“碎片”,“紧凑”方法可以解决碎片但开销大;是否允许进程离散装入 离散单位不同,称分页式存储和分段式存储;不具备对换功能称为“基本分页式”,支持虚拟存储器功能称为“请求基本分页式”;4.4.1 页面与页表1. 页面1 页面和物理块---将进程的逻辑地址空间分成若干个大小相等的片,称为页面,并为各页编号;相应地把内存空间分成与页面相同大小的若干个存储块,称为物理块,也同样编号;分配时,将进程中的页装入到物理块中,最后一页经常装不满一块而形成 “页内碎片”;2 页面大小---页面的大小应选择适中;页面太小,内存碎片减小,利用率高;但页表过长,占大量内存;页面较大,页表长度小;但页内碎片大;因此,页面的大小应选择得适中,且页面大小应是2的幂,通常为512 B~8 KB;2. 地址结构分页地址中的地址结构如下:31 12 11 0它含有两部分:页号P12~31位,最多有1M 页和页内位移量W0~11位,每页的大小4KB ; 对某特定机器,其地址结构是一定的;若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P 和页内地址d 可按下式求得:MODL A d L A INT P ][=⎥⎦⎤⎢⎣⎡=3. 页表---实现从页号到物理块号的地址映射用户程序0 页1 页2 页3 页4 页5 页…n 页页表内存4.4.2 地址变换机构任务:将逻辑地址转换为物理地址;页内地址变换:因页内地址与物理地址一一对应, 可直接转换;页号变换:页表可实现从逻辑地址中页号到内存中物理块号的变换; 1.基本的地址变换机构a. 页表功能可由一组专门的寄存器实现原理;b. 页表大多驻留内存,系统中只设置一页表寄存器来存放页表在内存的始址和页表长度实际操作;c. 进程未执行时,页表始址和长度存放在PCB 中;执行时才将这两个数据装入页表寄存器中过程;图 4-12 分页系统的地址变换机构2. 具有快表的地址变换机构a. 仅用页表寄存器时,CPU 每存取一数据要两次访问内存页表-地址变换-数据;b. 为提高地址变换速度,可在地址变换机构中增设一具有并行查寻能力的特殊高速缓冲寄存器用以存放当前访问的那些页表项,称为“快表”;c. ->在CPU 给出逻辑地址,将页号P 送入快表 ->页号匹配,读物理块号后送物理地址寄存器->无匹配页号,再访问内存中页表,把从页表项中读出的物理块号送地址寄存器;同时,再将此页表项存入到快表中;->如快表已满,则OS 须找到一换出页表项换出; 为什么增加“快表”为了提高地址变换速度,可在地址变换机构中增设一个具有并行查寻能力的特殊高速缓冲寄存器,又称为“联想寄存器”Associative Memory,或称为“快表 “快表”有何缺点越界中断图 4-13 具有快表的地址变换机构4.5 基本分段存储管理方式4.5.1 分段存储管理方式的引入为什么引入推动内存从固定分配到动态分配直到分页存储,主要动力是内存利用率,而引入分段存储管理方式,主要是为了满足用户和程序员的下述一系列需要:1方便编程---把作业按逻辑关系划分为若干段,每段有自己的名字和长度,并从0开始编址;LOAD 1,A|<D>; STORE 1,B|<C>2 信息共享---段是信息的逻辑单位;为实现共享,存储管理应与用户程序分段的组织方式相适应;3 信息保护---对信息的逻辑单位进行保护,应分段管理;4 动态增长---分段存储能解决数据段使用过程中动态增长;5 动态链接---运行过程中动态调入以段为单位的目标程序;4.5.2 分段系统的基本原理1. 分段作业划分为若干段,如图4-16,每个段用段号来代替段名,地址空间连续;段的长度由逻辑信息长度决定,因而各段长度不等;其逻辑地址由段号段名和段内地址所组成,结构如下: 31 16 15 0该地址结构中,允许一个作业最多有64K 个段,每个段的最大长度为64KB;编译程序能自页表寄存器逻辑地址L 物理地址动根据源程序产生若干个段;2.段表,其中每段占一个表项,中;图4-16 利用段表实现地址映射3.分页和分段的主要区别1 页是信息的物理单位,分页是为提高内存的利用率,是为满足系统管理的需要;段则是信息的逻辑单位,分段是为了能更好地满足用户的需要;2 页的大小固定且分页由系统硬件实现;而段的长度不固定,通常由编译程序根据信息的性质来划分;3 分页的作业地址空间是一维的,程序只需一个地址记忆符;而分段的作业地址空间是二维的,程序员既需给出段名,又需给出段内地址;4.5.3 信息共享可重入代码纯代码:允许多个进程同时访问的代码;绝对不允许可重入代码在执行中改变,因此,不允许任何进程修改它;4.5.4 段页式存储管理方式1.基本原理---,,,4KB;作业空间内存空间子程序段数据段(a)段号(S)段内页号(P)页内地址(W)(b)主程序段图4-21 利用段表和页表实现地址映射4.6 虚拟存储器的基本概念前面各种存储器管理方式共同点:它们要求将一个作业全部装入内存后方能运行,于是出现了下面这样两种情况:1 有的作业很大,其所要求的内存空间超过了内存总容量,作业不能全部被装入内存,致使该作业无法运行;2 有大量作业要求运行,但由于内存容量不足以容纳所有这些作业,只能将少数作业装入内存让它们先运行,而将其它大量的作业留在外存上等待;4.5.1 虚拟存储器的引入1.常规存储器管理方式的特征1 一次性;将作业全部装入内存后方能运行,此外有许多作业在每次运行时,并非其全部程序和数据都要用到;一次性装入,造成了对内存空间的浪费;2 驻留性;作业装入内存后一直驻留,直至运行结束;尽管因故等待或很少运行,都仍将继续占用宝贵的内存资源;现在要研究的问题是:一次性及驻留性在程序运行时是否必需;2.局部性原理早在1968年, Denning.P就曾指出:1 程序执行时,除了少部分的转移和过程调用指令外,在大多数情况下仍是顺序执行的;2 过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域,但经研究看出,过程调用的深度在大多数情况下都不超过5;3 程序中存在许多循环结构,这些虽然只由少数指令构成, 但是它们将多次执行;4 程序中还包括许多对数据结构的处理, 如对数组进行操作,它们往往都局限于很小的范围内;局限性主要表现在下述两个方面:1 时间局限性-由于循环操作的存在;如果程序中的指令或数据一旦执行,则不久以后可能再次访问;2 空间局限性-由于程序的顺序执行;程序在一段时间内所访问的地址,可能集中在一定的范围之内;3. 虚拟存储器定义---基于局部性原理程序运行前,仅须将要运行的少数页面或段装入内存便可启动,运行时,如果需要访问的页段尚未调入内存缺页或缺段,用OS提供请求调页段功能调入;如果此时内存已满,则还须再利用页段的置换功能,将内存中暂时不用的页段调至外存,腾出足够的内存空间后,再将要访问的页段调入;所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上扩充内存容量的一种存储器系统;其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存,成本接近于外存;4.6.3 虚拟存储器的特征1)多次性---一个作业被分成多次调入内存运行,最初装入部分程序和数据,运行中需要时,再将其它部分调入;2)对换性---允许在作业的运行过程中进行换进、换出;换进和换出能有效地提高内存利用率;3)虚拟性---从逻辑上扩充内存容量,使用户所看到远大于实际内存容量;这是虚拟存储器最重要的特征和最重要的目标;4)离散性---是以上三个特性的基础,在内存分配时采用离散分配的方式;备注:虚拟性是以多次性和对换性为基础的,而多次性和对换性又必须建立在离散分配的基础上;4.7 请求分页存储管理方式4.6.1 请求分页中的硬件支持---页表、缺页中断和地址变换请求分页系统是在分页的基础上,增加了“请求调页”和“页面置换”功能,每次调入和换出基本单位都是长度固定的页,实现比请求分段简单;1.页表机制---将用户地址空间中的逻辑地址变换为内存空间中的物理地址,因只将部分调入内存,需增设若干项;在请求分页系统中的每个页表项如下所示:1 状态位P:该页是否已调入内存,供访问时参考;2 访问字段A:记录一段时间内本页被访问的频率,供选择换出页时参考;3 修改位M:页在调入内存后是否被修改过,供置换页面时参考;4 外存地址:指出该页在外存上的地址,即物理块号,供调入该页时参考;4.7.2 内存分配策略和分配算法1.最小物理块数的确定是指能保证进程正常运行所需的最小物理块数,当系统为进程分配的物理块数少于此值时,进程将无法运行;进程应获得的最少物理块数与计算机的硬件结构有关;对于某些简单的机器,所需的最少物理块数为2,分别用于存放指令和数据,间接寻址时至少要有三块;对于某些功能较强的机器,因其指令本身、源地址和目标地址都可能跨两个页面,至少要为每个进程分配6个物理块,以装入这些页面;2. 物理块的分配策略请求分页系统的两种内存分配策略:即固定和可变分配策略;两种置换策略:即全局置换和局部置换;可组合出以下三种策略;1 固定分配局部置换Fixed Allocation, Local Replacement--每进程分配一定数目的物理块,在整个运行期间都不再改变,换入换出都限于这些物理块;每个进程物理块难以确定,太多太少都不好2 可变分配全局置换Variable Allocation, Global Replacement --每进程分配一定数目的物理块,OS 保持一空闲物理块队列;进程缺页时,摘下一空闲块,并将该页装入;3 可变分配局部置换Variable Allocation, Local Replacemen --每进程分配一定数目的物理块;进程缺页时,只允许从该进程内存页中选出一页换出;若缺页中断频繁,再为该进程分配若干物理块,直至缺页率减少;若缺页率特低,则减少该进程的物理块数,应保证缺页率无明显增加;3. 物理块分配算法1 平均分配算法--将所有可供分配的物理块,平均分配给各个进程; 例如,有100个物理块,5个进程,每进程可分20个物理块;未考虑到各进程本身的大小;2 按比例分配算法--根据进程的大小按比例分配物理块;共n 个进程,每进程页面数为si,则页面数的总和为:设可用的物理块为m,每进程分到的物理块数为bi,有:3 考虑优先权的分配算法--为了照顾重要、紧迫的作业尽快完成,为它分配较多的空间;通常采取:把可供分配的物理块分成两部分:一部分按比例分给各进程;另一部分根据优先权分给各进程;有的系统是完全按优先权来分配;4.7.3 调页策略1. 何时调入页面1 预调页策略缺页前 :页面存放连续,用预测法一次调入多个相邻页,预测成功率仅为50%;2 请求调页策略缺页时:运行中,发现不在内存,立即请求,由OS 调入;2. 从何处调入页面请求分页系统中外存分为两部分:文件区和对换区;这样,当发生缺页请求时,系统应从何处将缺页调入内存:1 系统拥有足够的对换区,可以全部从对换区调入所需页面;在进程运行前,须将有关的文件拷贝到对换区;2 系统缺少足够的对换区,这时凡是不会被修改的文件,都直接从文件区调入,由于它们未被修改而不必换出;但对于可能被修改的部分,换出时调到对换区,以后需要时,再从对换区调入;3 UNIX 方式;凡是未运行过的页面,都应从文件区调入;曾运行过但已换出的页面,放在∑==ni iS S 1m SS b ii ⨯=对换区,下次应从对换区调入;4.8 页面置换算法当进程运行时,所访问的页面不在内存而需要将他们调入内存,但内存无空闲时,需要选择一页面换出到对换区,选择算法即页面置换算法;算法评价:页面置换频率低,调出页面将不会或很少访问;4.8.1 最佳置换算法和先进先出置换算法1. 最佳Optimal 置换算法由Belady 于1966年提出的一种理论上的算法;原理:其所选择的被淘汰页面,将是以后永不使用的, 或是在最长未来时间内不再被访问的页面;特点:通常可获得最低的缺页率,但由于进程运行不可预知而无法实现,用来评价其他算法;假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1进程运行时,先将7,0,1三页装入内存;当进程要访问页面2时,将会产生缺页中断,此时OS 根据最佳置换算法,将选择页面7予以淘汰;共发生6次页面置换;图 4-25 利用最佳页面置换算法时的置换图 2. 先进先出FIFO 页面置换算法---总是置换最先进入内存的页面;用FIFO 算法共发生12次页面置换;该算法与进程的实际运行规律不相符,有些页面经常被访问全局变量,常用函数;图 4-26 利用FIFO 置换算法时的置换图4.8.2 最近最久未使用Least Recently Used LRU 置换算法1. LRU置换算法 ---在无法预测各页面将来使用情况下,利用“最近过去”作为“最近将来”的近似选择最近最久未使用的页面予以淘汰;用LRU 算法共发生9次页面置换;引用率70770170122010320304243230321201201770101页框(物理块)203图 4-27 LRU 页面置换算法2. LRU 置换算法的硬件支持LRU 算法比较好,但为了快速知道哪一页是最近最久未使用的页面,需要硬件支持:寄存器或栈;1 寄存器为了记录某进程在内存中各页的使用情况,须为每个页面配置一个移位寄存器,可表示为:原理:进程访问某物理块时,先将寄存器的Rn-1位设成1;此时,定时信号将每隔一定时间将寄存器右移一位;若将n 位寄存器的数看做是一整数,那么,具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面;例:某进程在内存中有8个页面,为每页面配置一8位寄存器时的LRU 访问情况,如图4-28图 4-28 某进程具有8个页面时的LRU 访问情况2 栈--利用栈来保存当前使用的各页面的页面号;原理:每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶;因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号;假定现有一进程所访问的页面的页面号序列为:4,7,0,7,1,0,1,2,1,2,6随着进程的访问,栈中页面号的变化情况如图4-29所示;在访问页面6时发生了缺页,此时页面4是最近最久未被访问的页,应将它置换出去;LRU 算法较好,但要求较多硬件支持, 实际使用接近LRU算法-Clock 算法;图引用率70770170122010323104430230321013201770201页框2304204230230127127011474074704170401741074210741207421074621074-29 用栈保存当前使用页面时栈的变化情况。
操作系统 第4章 存储器管理
前
后
向
向
指
指
针
针
N
N个字节可用
N
+
+
2
2
0
0
图 4-5 空闲链结构
第四章 存 储 器 管 理
2. 分区分配算法 (1) 首次适应算法FF。 (2) 循环首次适应算法,该算法是由首次适应算法演变而成的。 (3) 最佳适应算法。
第四章 存 储 器 管 理
3. 分区分配操作 1) 分配内存
从头开 始查表
第四章 存 储 器 管 理
3. 动态重定位分区分配算法
请求分 配 u .size分区
检索空 闲分区链 (表)
无法分 配
否
返回
空闲分 区 总和≥u .size?
是 进行紧 凑形 成连续 空闲区
修改有 关的 数据结 构
否
找到大于u .size
的可用 区否?
按动态 分区方式 进行分 配
修改有 关的 数据结 构
第四章 存 储 器 管 理
2)
在分页系统中的页面其大小应适中。页面若太小,一方 面虽然可使内存碎片减小,从而减少了内存碎片的总空间, 有利于提高内存利用率,但另一方面也会使每个进程占用较 多的页面,从而导致进程的页表过长,占用大量内存; 此 外,还会降低页面换进换出的效率。然而,如果选择的页面 较大,虽然可以减少页表的长度,提高页面换进换出的速度, 但却又会使页内碎片增大。因此,页面的大小应选择得适中, 且页面大小应是2的幂,通常为512 B~8 KB。
第四章 存 储 器 管 理
3. 进程的换出与换入
(1) 进程的换出。
每当一进程由于创建子进程而需要更多的内存空间, 但又无足够的内存空间等情况发生时,系统应将某进程换 出。 其过程是:系统首先选择处于阻塞状态且优先级最低 的进程作为换出进程,然后启动盘块,将该进程的程序和 数据传送到磁盘的对换区上。若传送过程未出现错误,便 可回收该进程所占用的内存空间,并对该进程的进程控制 块做相应的修改。
计算机操作系统 第4章 存储器管理
F1 回收区 F2
4.2.3 分区分配算法
有五种分配算法 首次适应法 循环首次适应法 最佳适应法 最坏适应法 快速适应算法
首次适应法(First 首次适应法(First Fit) 要求空闲分区按地址递增次序排列 要求空闲分区按地址递增次序排列 地址递增 从头顺序搜索空闲分区表( 从头顺序搜索空闲分区表 ( 链 ) , 直至找到 第一个大小合适的分区为止 第一个大小合适的分区为止 进行分区分配 固定分区: 固定分区:将整个分区分配给请求进程 可变分区: 可变分区:根据需要划分适当分区 特点 地址低端利用充分, 地址低端利用充分,保留地址高端大空间 对固定分区容易形成内碎片 对固定分区容易形成内碎片 对可变分区容易形成外碎片 对可变分区容易形成外碎片
分区分配操作
从头开始查表 Y
检索完否? 检索完否?
返回 N
∑m.size≥u.size? ?N源自m.size>u.size?
Y Y
m.size-u.size≤size?
N
Y 实施拼接,形成大分区 实施拼接, 修改相应的数据结构 分配失败
N 分配m.size 分配m.size 大小分区 从该分区中划出 u.size大小的分区 u.size大小的分区 分配给请求者 修改相应数据结构 返回分区号及始址
3.内存容量的“扩充” 内存容量的“扩充”
内存容量的扩充是逻辑上的扩充 有三种技术可以扩充内存 覆盖技术:要求用户提供覆盖结构 覆盖技术: 交换技术: 交换技术:通过中级调度缓解内存压力 虚拟存储器技术:内存、 虚拟存储器技术:内存、外存结合 引入: 引入:请求调入功能 置换功能
4.地址映射 相关概念 符号空间(符号地址) 符号空间(符号地址) 进程空间(逻辑地址) 进程空间(逻辑地址) 存储空间(物理地址) 存储空间(物理地址) 符号空间 程序员定义的标识符 程序符号的集合 没有地址的概念
操作系统-存储管理
操作系统-存储管理操作系统-存储管理一、引言存储管理是操作系统中重要的组成部分,它负责管理计算机系统中的存储器资源。
存储管理的任务包括内存分配、内存保护、内存回收等,通过有效的存储管理可以充分利用系统的存储资源,提高系统的运行效率和性能。
二、内存层次结构1、主存储器主存储器是计算机系统中最主要的存储器,它用于存放正在运行的程序和数据,是CPU直接访问的存储器。
主存储器一般被划分为若干个固定大小的块,每个块被称为一页,每一页可以存放一个进程的一部分或全部。
2、辅助存储器辅助存储器是主存储器的扩展,主要用于存储大容量的数据和程序。
辅助存储器包括硬盘、磁带等设备,其访问速度比主存储器慢,但容量较大。
三、内存管理1、内存分配方式a:静态分配静态分配是指在程序运行之前,就确定了程序在内存中的位置。
静态分配的优点是简单高效,但是会浪费存储资源。
b:动态分配动态分配是指程序在运行时,根据需要动态分配内存。
动态分配的优点是灵活高效,但是需要额外的内存管理开销。
2、内存管理算法a:首次适应算法首次适应算法是按照内存块的起始地质逐一查找,找到第一个大小大于等于要求的空闲的内存块进行分配。
b:最佳适应算法最佳适应算法是在所有满足要求的内存块中选择大小最小的内存块进行分配。
c:最差适应算法最差适应算法是在所有满足要求的内存块中选择大小最大的内存块进行分配。
3、内存保护内存保护是指通过访问权限控制,确保每个进程只能访问自己分配的内存空间,防止进程之间的干扰。
4、内存回收内存回收是指当进程不再使用某些内存空间时,将其释放给系统以便后续的内存分配。
内存回收可以通过标记清除算法、引用计数算法等方式实现。
四、虚拟内存管理1、虚拟内存机制虚拟内存是一种扩展的内存管理技术,它通过将部分程序或数据装入主存储器,并实现从辅助存储器到主存储器的动态迁移,提高了计算机系统的运行性能。
2、页面置换算法页面置换算法是指当主存储器已满时,需要置换出某些页面到辅助存储器中,以便为新的页面腾出空间。
计算机操作系统第四章 存储器管理
注意:逻辑地址不是内存中的实际(物理)
地址,不能根据逻辑地址到内存中存取信息。 注意:每个程序的逻辑地址从0开始
•
逻辑地址空间
• 用UltraEdit打开的debug.exe程序
•
物理地址与物理地址空间 物理地址是内存中各存储单元的编号, 即存储单元的真实地址,它是可识别、可寻 址并实际存在的。 物理地址的全体称为存储地址空间。
• 2、动态存储分配 • 作业要求的基本内存空间是在目标模块装 入内存时分配的,但在作业运行过程中, 允许作业申请附加的内存空间,或是在内 存中移动,即分配工作可以在作业运行前 及运行过程中逐步完成。
(1)管理内存分配表
存储管理设置一张表格记录内存的使 • 用情况,即哪些区域尚未分配,哪些区域 已经分配以及分配给哪些进程等。
能满足申请
分配内存
用户 进程
申请内存 内存分配策略
不能满足申请
阻塞该进程
(2)制定内存分配策略
•
内存分配策略内容: 放置策略:如何选择空闲区域的原则。 调入策略:确定信息装入的时机。 请调策略
预调策略
淘汰策略:当内存不足时,如何确定将内存中的哪 些信息调出的策略。
•
(3)内存区域的划分方式
系统内存分配以块为单位:
第四章 存储管理
• 计算机系统中的存储管理是操作系统 四大功能之一。任何程序在计算机中运行 之前都需要先把所需的程序段和数据段存 储在一定的内存地址空间,因此,如何提 高存储利用率是决定操作系统性能的一个 重要指标。
•
存储管理是操作系统的重要组成部分, 它负责存储器的管理。 管理对象:存储管理主要是指对内存空 间的管理(外存管理见文件系统)。 内存空间一般分为两部分:系统区和用户区。 系统区存放操作系统、一些标准子程序、 例行程序和系统数据等; 用户区存放用户的程序和数据等。存储 管理主要是对内存中用户区进行管理。
操作系统第4章 存储器管理-2
储 管
段内位移宽度由系统允许的最大段长确定。
理
方
式
4.5
三、逻辑地址结构
基
本 • 例:采用段式存储管理的系统中,若地址用
分 段
24位表示,其中8位表示段号,则允许段的最 大长度是( )
A.224 B. 216 C. 28 D. 232
存
储
管
理
方
式
4.5
四、地址变换机构
基
本 • 实现从逻辑地址到物理地址的转换
4.5
二、分段和段表
基
0
本
0 主程序
分
32k 1
段
0 子程序
存 50k
①程序按照逻辑功能划 分成若干个段。每个段 都从0开始顺序编址。
②内存空间采用动态分
储
2 0 数据段
管 10k
理
方
用户程序
式
物理内存
区分配方式。
③以段为单位,将每个 段装入内存中一块连续 的地址空间。
4.5
二、分段和段表
基
本
20k
段号
段首址
段长度
段
0
120K
40K
存
1 2
760K 480K
30K 20K
储
3
370K
20K
管 逻辑地址(2154)10,(010100011010001001)2 对
理 应的物理地址分别是多少?
方
式
分页和分段的主要区别
目的
信息单位 大小 内存分配单位 程序地址空间 优点
页式存储管理 实现非连续分配, 解决碎片问题 页(物理单位) 固定(由系统定) 页 一维 有效解决了碎片问题 有效提高内存的利用率
操作系统第四章存储器的管理
接库(DLL, Dynamic-Link Library)或共享库(shared library)。
• 优点
– 共享:多个进程可以共用一个DLL,节省内存,减少文件交 换。
– 部分装入:一个进程可以将多种操作分散在不同的DLL中实 现,而只将当前操作相应的DLL装入内存。
优点:不需硬件支持,可以装入有限多道程序 (如MS DOS中的TSR)。
缺点:一个程序通常需要占用连续的内存空间,程 序装入内存后不能移动。不易实现共享。
12
动态装入
在可执行文件中记录虚拟内存地址,装入和执行 时通过硬件地址变换机构,完成虚拟地址到实际内存 地址的变换。
优点: OS可以将一个程序分散存放于不连续的内存空 间,可以移动程序,有利用实现共享。能够支 持程序执行中产生的地址引用,如指针变量 (而不仅是生成可执行文件时的地址引用)。
• 内存:DRAM, SDRAM, DRDRAM等; • 外存:软盘、硬盘、光盘、磁带等;
5
4.1.2 存储管理的功能
• 虚拟存储器:——存储器扩充,存储器的逻辑组织和物 理组织;
– 由应用程序控制:覆盖;
– 由OS控制:交换(整个进程空间),虚拟存储的请求调入和 预调入(部分进程空间)
• 地址变换:
29
30
31
32
几种分配算法的比较
• 最先适应法:按分区的先后次序,从头查找,找到符
合要求的第一个分区
– 该算法的分配和释放的时间性能较好,空闲较大的分 区可以被保留在内存高端。
– 但随着低端分区不断划分而产生较多小分区,每次分 配时查找时间开销会增大。
• 最佳适应法:找到其大小与要求相差最小的空闲分区
操作系统实验报告三存储器管理实验
操作系统实验报告三存储器管理实验操作系统实验报告三:存储器管理实验一、实验目的本次存储器管理实验的主要目的是深入理解操作系统中存储器管理的基本原理和方法,通过实际操作和观察,掌握内存分配与回收的算法,以及页面置换算法的工作过程和性能特点,从而提高对操作系统资源管理的认识和实践能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验内容1、内存分配与回收算法实现首次适应算法(First Fit)最佳适应算法(Best Fit)最坏适应算法(Worst Fit)2、页面置换算法模拟先进先出页面置换算法(FIFO)最近最久未使用页面置换算法(LRU)时钟页面置换算法(Clock)四、实验原理1、内存分配与回收算法首次适应算法:从内存的起始位置开始,依次查找空闲分区,将第一个能够满足需求的空闲分区分配给进程。
最佳适应算法:在所有空闲分区中,选择能够满足需求且大小最小的空闲分区进行分配。
最坏适应算法:选择空闲分区中最大的分区进行分配。
2、页面置换算法先进先出页面置换算法:选择最早进入内存的页面进行置换。
最近最久未使用页面置换算法:选择最近最长时间未被访问的页面进行置换。
时钟页面置换算法:给每个页面设置一个访问位,在页面置换时,从指针指向的页面开始扫描,选择第一个访问位为0 的页面进行置换。
五、实验步骤1、内存分配与回收算法实现定义内存分区结构体,包括分区起始地址、大小、是否已分配等信息。
实现首次适应算法、最佳适应算法和最坏适应算法的函数。
编写测试程序,创建多个进程,并使用不同的算法为其分配内存,观察内存分配情况和空闲分区的变化。
2、页面置换算法模拟定义页面结构体,包括页面号、访问位等信息。
实现先进先出页面置换算法、最近最久未使用页面置换算法和时钟页面置换算法的函数。
编写测试程序,模拟页面的调入和调出过程,计算不同算法下的缺页率,比较算法的性能。
操作系统 存储器管理
操作系统存储器管理在计算机系统中,操作系统的存储器管理是一项至关重要的任务。
它就像是一位精明的管家,负责合理地分配和管理计算机的内存资源,以确保各个程序能够高效、稳定地运行,同时避免出现资源浪费和冲突的情况。
要理解存储器管理,首先得明白什么是存储器。
简单来说,存储器就是计算机用于存储数据和程序的地方。
它就像一个巨大的仓库,里面存放着各种各样的“货物”(数据和程序)。
而操作系统的存储器管理功能,就是要确保这些“货物”能够被妥善地存放和取出,并且在需要的时候能够快速找到。
在存储器管理中,有几个关键的概念需要了解。
首先是地址空间。
每个程序在运行时,都认为自己拥有一个从0 开始的连续的地址空间。
但实际上,这些地址是虚拟的,通过操作系统的映射,才能对应到实际的物理存储器地址。
这就好比每个租客都认为自己住在从 1 号开始的连续房间,但实际上房东会根据实际情况进行分配。
接下来是分页和分段。
分页是将存储器空间划分成固定大小的页,分段则是根据程序的逻辑结构将其划分成不同的段。
分页的好处是管理简单,易于分配和回收内存;分段则更符合程序的逻辑结构,方便程序的编写和理解。
那么,操作系统是如何进行存储器管理的呢?首先是内存分配。
当一个程序需要运行时,操作系统会为其分配一定的内存空间。
这就像是给租客分配房间,要根据租客的需求和房屋的空闲情况来决定。
分配的策略有很多种,比如最先适配法、最佳适配法和最差适配法等。
最先适配法就是从内存的开头开始查找,找到第一个足够大的空闲区域就分配给程序。
这种方法简单快捷,但容易导致内存碎片的产生。
最佳适配法会查找整个内存空间,找到大小最接近程序需求的空闲区域进行分配。
这种方法可以减少内存碎片,但查找的时间较长。
最差适配法则是选择最大的空闲区域进行分配,虽然可以避免产生太小而无法使用的碎片,但可能会导致大的程序无法得到足够的内存。
内存回收也是存储器管理的重要环节。
当一个程序结束运行或者释放了一部分内存时,操作系统需要将这些内存回收,以便再次分配给其他程序使用。
操作系统课件-第5章存储器管理
►
(2)动态地址重定位是指程序在执行的过程中,在CPU访 问内存地址之前,由地址变换(硬件)机构来完成将要访 问的指令或数据的逻辑地址到物理地址的转换。地址变换 机构通常设置一个公用的基址寄存器BR(Base Register), 它存放现行进程在内存空间的起始地址。当CPU经逻辑地 址访问内存时,地址变换机构将自动把该逻辑地址加上BR 中的地址而形成实际物理地址。显然,只要改变BR的内容, 就可以改变程序在内存的存放空间。
2
► 2)循环首次适应算法。该算法是由首次适应算法
演变而成的。在为进程分配内存空间时,不再是每 次都从链首开始查找,而是从上次找到的空闲分区 的下一个空闲分区开始查找,直至找到一个能满足 要求的空闲分区,从中划出一块与请求大小相等的 内存空间分配给进程。为实现该算法,应设置一起 始查寻指针,用于指示下一次起始查寻的空闲分区, 并采用循环查找方法,即如果最后一个(链尾)空 闲分区的大小仍不能满足要求,则应返回到第一个 空闲分区,比较其大小是否满足要求。找到后,应 调整起始查寻指针。该算法能使内存中的空闲分区 分布得更均匀,从而减少了查找空闲分区时的开销, 但这样会缺乏大的空闲分区。
► 2)保护键法。保护键法为每一个被保护存储
块分配一个单独的保护键,保护键可设置成 对读写同时保护的,也可设置成只对读或写 进行单项保护的。在程序状态字(PSW)中 设置相应的保护键开关字节,对不同的进程, 赋予不同的开关代码与被保护的存储块中的 保护键相匹配。如果开关字中的代码与保护 键匹配或存储块未受到保护,则允许访问该 存储块,否则将产生访问出错中断。
► 固定分区管理能使多个进程共享内存,具有
数据结构简单,分配和回收算法容易实现等 优点。但是,存在小进程占据大分区,造成 内存浪费的碎片现象和可调入的进程大小受 到分区大小限制等的问题。
计算机操作系统 第6章 存储器管理ppt课件
入重定位存放器。当CPU取一条访问内存的指令时,地址变
换硬件逻辑自动将指令中的相对地址与重定位存放器中的值
相加,再根据和值作为内存的绝对地址去访问该单元的数据。
6.1.4 地址重定位-6
重定位存放器
0:
100:LOAD 1,(2500)
2500:365 2600:
10000:
10000
10100: LOAD 1,(2500) +
可变式分区的分配和释放的根本思想是:在分配时,首先 找到一个足够大的空闲分区,即这个空闲区的大小比作业要 求的要大,系统那么将这个空闲分区分成两部分:一部分成 为已分配的分区,剩余的部分仍作为空闲区。在回收撤除作 业所占领的分区时,要检查回收的分区能否与前后空闲的分 区相领接,假设是,那么加以合并,使之成为一个延续的大 空间。
?PCB中与该管理配套的参数
6.2.3 动态/可变式 (Dynamic Partitioning)分区分配
思想: 可变式分区是指在作业装入内存时,从可用的内存中划 出一块延续的区域分配给它,且分区大小正好等于该作业的 大小。可变式分区中分区的大小和分区的个数都是可变的, 而且是根据作业的大小和多少动态地划分,因此又称为动态 式分区。这种存储管理技术是固定式分区的改良,既可以获 得较大的灵敏性,又能提高内存的利用率。
存储维护:设置基址界限存放器对。
6.2.2 固定分区(Fixed Partitioning)分配
思想:固定式分区是在作业装入之前,内存就被划分成假设干 个分区。划分任务可以由系统管理员完成,也可以由操作系 统实现。然而一旦划分完成,在系统运转期间不再重新划分, 即分区的个数不可变,分区的大小不可变,所以,固定式分 区又称为静态分区。 这种分区方式普通将内存的用户区域划分成大小不等的分区, 以顺应不同大小的作业的需求。 管理机构:系统有一张分区阐明表,每个表目阐明一个分区的 大小、起始地址和能否已分配的运用标志。分区阐明表和内 存分配图如下所示。
操作系统中存储器管理的主要功能
操作系统中存储器管理的主要功能存储器管理是操作系统中的核心组成部分之一,它主要负责管理计算机中的存储器资源,以便有效地分配和利用存储空间,并且为不同的程序和进程提供安全的访问。
在操作系统中,存储器管理的主要功能包括内存分配、内存保护、内存扩充、内存回收和换页操作。
内存分配内存分配是指操作系统根据进程的需要以及存储器的可用空间,为进程分配合适的内存空间。
在操作系统启动时,它会将系统的内存划分为多个连续的内存块,每个内存块可以用来存储一个进程或一部分进程。
内存分配可以通过两种方式进行:静态分配和动态分配。
静态分配是在程序编译或装载时进行的,操作系统会为每个进程分配固定大小的内存空间。
这种方式简单、高效,但是会导致内存的浪费和碎片化的问题。
动态分配则是在程序运行时进行的,操作系统根据进程的需要动态地分配内存空间,使得进程能够根据实际需求来使用存储空间。
内存保护内存保护是操作系统中存储器管理的重要功能之一,它主要通过权限控制来保护进程的内存空间。
每个进程被分配的内存空间应该是相互独立的,进程之间不能相互干扰或篡改彼此的数据。
操作系统通过给每个进程设置访问权限,限制进程对其他进程内存空间的访问,从而保护了每个进程的数据安全。
为了实现内存保护,操作系统使用地址映射、地址转换和访问控制等方法。
地址映射将逻辑地址转换为物理地址,以便进程能够正确访问内存。
地址转换是通过分页或分段的方式来实现的,将逻辑地址划分为不同的页或段,并映射到实际的物理地址上。
访问控制则是通过设置访问权限位来限制进程对内存空间的访问。
内存扩充随着计算机系统的发展,存储器的容量需求也越来越大。
内存扩充是操作系统中存储器管理的重要任务之一,它可以通过两种方式实现:覆盖和交换。
覆盖是指将进程的一部分数据从内存中移出,然后将新的数据加载到内存中。
这种方式适用于内存空间有限的情况下,可以有效地利用存储资源。
但是,由于数据的移动会导致额外的开销和延迟,因此需要谨慎使用。
计算机操作系统第四章 存储器管理(1-2)要点
4.1.2
程序的链接
1. 静态链接方式 (Static Linking)
名空间
链接前, 0 每个模 块都有 L- 1 各自的 相对起 0 始地址 0
M- 1 0 N- 1
模块 A CALL B ; Return ; 模块 B CALL C ; Return ; 模块 C Return ; (a ) 目标模块
链接 装入 连续或不连续分 配 静态重定位 或动态重定位 连续 均可 一般不连续 静态链接 装入时动态链接 运行时动态链接
均可
均可
动态重定位
第四章 存 储 器 管 理
4.2
4.2.1 单一连续分配
连续分配方式
OS
特征:最简单的一种存储管理方 式,但只能用于单用户、单任务 的操作系统中;常把内存分为系 统区和用户区两部分,系统区仅 提供给 OS 使用,通常是放在内
第四章 存 储 器 管 理
3. 运行时动态链接(Run-time Dynamic Linking) 动态链接方式:将对某些模块的链接推迟到执行时才实施, 亦即,在执行过程中,当发现一个被调用模块尚未装 入内存时,立即由OS去找到该模块并将之装入内存, 把它链接到调用者模块上。特点如下: 特点:凡在执行过程中未被用到的目标模块,都不会被调 入内存和被链接到装入模块上,这样不仅可加快程序 的装入过程,而且可节省大量的内存空间。
动态运行时装方式:
• 装入内存后的所有地址都仍是相对地址;逻辑地址到
物理地址的变换要推迟到程序真正执行时才进行; • 地址变换发生在程序执行过程中(即动态重定位)。 为使地址转换不影响程序执行速度,必须使用硬件支 持。
第四章 存 储 器 管 理
链接和装入的关系(一)
• 静态链接会形成磁盘上的可执行文件,而 装入时动态链接和运行时动态链接不会产 生磁盘上的可执行文件。 • 静态链接产生的可执行文件装入时内存是 连续分配的,而地址映射既可采用可重定 位装入方式(静态重定位)也可以采用动 态运行时装入方式(动态重定位)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
L+ M 模块 C
N- 1 Retu rn;
L+ M+ N- 1 Retu rn;
(a) 目标模块 图实际操4作-3系统程cha序pter存链储器接管理示意图 (b) 装入模块
静态链接将目标模块装配成一个装入模块时,须解 决以下两个问题:
(1) 对相对地址进行修改。 (2) 变换外部调用符号。
2. 装入时动态链接(Load time Dynamic Linking) 优点:(1)便于修改和更新。
N
继续 检索 下一 个表 项
Y
m .s iz e - u . s i ze ≤ s i z e ?
N 从该 分区 中划 出 u.siz e 大 小 的 分 区
Y 将该 分区 从链 中移 出
将该 分区 分配 给请 求者 修 改有 关数 据结 构
实际操作返系回统chapter存储器管理
2) 回收内存
图 4-7 内存回收时的情况
ቤተ መጻሕፍቲ ባይዱ
2. 动态重定位的实现
0 100
LOAD1,2500
2500 365
相对地址 2500
重定位寄存器 10000
10000 10100
LOAD1,2500
+
12500
365
5000
作业J
15000
处理机一侧 存储器一侧
图 4-10 动态重定位示意图 实际操作系统chapter存储器管理
主存
3. 动态重定位分区分配算法
实际操作系统chapter存储器管理
4.3.4 可重定位分区分配
1. 动态重定位的引入
操作系统 用户程序1
10 KB 用户程序3
30 KB 用户程序6
14 KB 用户程序9
26 KB
操作系统 用户程序1 用户程序3 用户程序6 用户程序9
80 KB
(a) 紧凑前
(b) 紧凑后
图实际操4作-8系统紧cha凑pter存的储器示管理意
实际操作系统chapter存储器管理
4.2.2 固定分区分配
1. 划分分区的方法 (1) 分区大小相等, 即使所有的内存分区大小相等。 (2) 分区大小不等。
实际操作系统chapter存储器管理
2. 内存分配
图 4-5 固定分区使用表
实际操作系统chapter存储器管理
4.2.3 动态分区分配
1. 分区分配中的数据结构
(1) 空闲分区表。
(2) 空闲分区链。
前
后
向
向
指
指
针
针
N
N个 字 节 可 用
N
+
+
2
2
0
0
实际操作系统cha图pter存4储-器6管空理 闲链结构
-
3. 分区分配操作
1) 分配内存
图 4 7 内 存 分 配 流 程
从头 开始 查表
检索 完否 ?
Y
返回
N m .s iz e > u . s i ze ?
内存
库
编 译程 序产 生 的目 标模 块
链接 程序
装 入模 块
装入 程序
…
第 一步
第 二步
第 三步
图 4-1 对用户程序的处理步骤 实际操作系统chapter存储器管理
4.1.1 程序的装入
1. 绝对装入方式(Absolute Loading Mode)
程序中所使用的绝对地址,既可在编译或汇编时给出, 也可由程序员直接赋予。 但在由程序员直接给出绝对地址 时, 不仅要求程序员熟悉内存的使用情况,而且一旦程序 或数据被修改后,可能要改变程序中的所有地址。因此, 通常是宁可在程序中采用符号地址,然后在编译或汇编时, 再将这些符号地址转换为绝对地址。
3. 动态运行时装入方式(Denamle Run-time Loading) 动态运行时的装入程序,在把装入模块装入内存后, 并不立即把装入模块中的相对地址转换为绝对地址,而 是把这种地址转换推迟到程序真正要执行时才进行。因 此, 装入内存后的所有地址都仍是相对地址。
实际操作系统chapter存储器管理
第四章 存储器管理
4.1 存储器的层次结构 4.2 程序的装入和链接 4.3 连续分配方式 4.4 基本分页存储管理方式 4.5 基本分段存储管理方式 4.6 虚拟存储器的基本概念 4.7 请求分页存储管理方式 4.8 页面置换算法 4.9 请求分段存储管理方式
实际操作系统chapter存储器管理
4.1 程序的装入和链接
实际操作系统chapter存储器管理
2. 可重定位装入方式(Relocation Loading Mode)
0
100 0 LOAD 1,2500
250 0 365
500 0 作业 地址 空间
100 00 11000 LOAD 1,2500
125 00
365
150 00
内存 空间
图实际4操-2作系作统c业hapt装er存储入器管内理存时的情况
请 求分 配 u.size分 区
检 索空 闲分 区 链(表 )
无 法分 配
否
返回
空 闲分 区 总 和 ≥u.size?
是 进 行紧 凑形 成 连续 空闲 区
修 改有 关的 数 据结 构
否
找 到 大 于u.size
的 可用 区否 ?
按 动态 分区 方 式 进 行分 配
修 改有 关的 数 据结 构
返 回分 区号 及 首批
(2) 便于实现对目标模块的共享。
实际操作系统chapter存储器管理
3. 运行时动态链接(Run-time Dynamic Linking)
近几年流行起来的运行时动态链接方式,是对上述在 装入时链接方式的一种改进。这种链接方式是将对某些模 块的链接推迟到执行时才执行,亦即,在执行过程中,当 发现一个被调用模块尚未装入内存时,立即由OS去找到该 模块并将之装入内存, 把它链接到调用者模块上。凡在执 行过程中未被用到的目标模块,都不会被调入内存和被链 接到装入模块上,这样不仅可加快程序的装入过程,而且 可节省大量的内存空间。
4.1.2 程序的链接
1. 静态链接方式(Static Linking)
0 模块 A
0
CALL B;
L- 1 Retu rn;
L- 1
模块 A
JSR“ L” Retu rn;
0 模块 B
L 模块 B
CALL C;
JSR “ L+ M”
M- 1 Retu rn;
L+ M- 1 Retu rn;
0 模块 C
实际操作系统chapter存储器管理
4.2 连续分配方式
4.2.1 单一连续分配
这是最简单的一种存储管理方式,但只能用于单用户、 单任务的操作系统中。采用这种存储管理方式时,可把内 存分为系统区和用户区两部分,系统区仅提供给OS使用, 通常是放在内存的低址部分;用户区是指除系统区以外的 全部内存空间, 提供给用户使用。