操作系统原理三:存储器管理与虚拟存储器

您所在的位置:网站首页 存储管理的功能简述 操作系统原理三:存储器管理与虚拟存储器

操作系统原理三:存储器管理与虚拟存储器

2024-06-24 15:46| 来源: 网络整理| 查看: 265

存储器管理与虚拟存储器

存储器的功能是保存数据,存储器的发展方向是高速、大容量和小体积

重定位:实现逻辑地址(相对地址)到物理地址(绝对地址)的映射

程序的装入和链接 装入

编辑----编译----链接----装入----运行

绝对装入

编译后,装入前已产生了绝对地址(内存地址),装入时不再作地址重定位 绝对地址的产生:1. 由编译器完成,2. 由程序员编程完成 对 1. 而言,编程用符号地址。

可重定位装入

静态重定位:地址转换在装入时一次完成,由软件实现(重定位装入程序完成)。 缺点:不允许程序运行时在内存中移动位置。

动态运行时装入

在装入后不能移动 该情况一般在执行时才完成相对地址向绝对地址的转换,需要硬件地址变换 “重定位寄存器”的支持,才能保证进程的可移动性 链接

静态链接

对相对地址的修改 变换外部调用符号

装入时动态链接

便于修改和更新 便于实现对目标模块的共享

运行时动态链接

连续分配方式 单一连续分配 内存分为两个区域:系统区,用户区。应用程序装入到用户区,可使用用户区全部空间 最简单,适用于单用户、单任务的OS 优点:易于管理 缺点:对要求内存空间少的程序,造成内存浪费;程序全部装入,很少使用的程序部分也占用内存 分区式连续分配 固定式

将内存划分成若干个连续区域,称为分区。每个分区只能存储一个程序,而且程序也只能在它所驻留的分区中运行。有n个分区,则可同时装入n个作业/任务。

分区大小: 相等 不相等:不相等利用率更高 内存分配: 数据结构 分区表:将分区按大小排序,并将其地址、分配标识作记录 例:dos的MCB 优缺点: 优点:简单;缺点:有碎片(内零头) 可变式

内存不预先划分好,当作业装入时,根据作业的需求和内存空间的使用情况决定是否分配。若有足够的空间,则按需分割一部分分区给该进程。

数据结构:

空闲分区表 空闲分区链

分配算法:

首次适应算法 要求:分区按低址---高址链接,找到第一个大小满足的分区 低址部分不断划分留下碎片,低址内存使用频繁 循环首次适应算法 从首次适应中上次找到的空闲分区的下一个开始查找 空闲分区分布均匀,提高了查找速度,但缺乏大的空闲分区 最佳适应算法(和最坏适应算法) 分区按大小递增排序;分区释放时需插入到适当位置

内存回收:

上邻空闲区:合并,改大小 下邻空闲区:合并,改大小,首址 上、下邻空闲区:合并,改大小 不邻接,则建立一新表项

可重定位

连续式分配中,总量大于作业大小的多个小分区不能容纳作业

紧凑:

通过作业移动将原来分散的小分区拼接成一个大分区 作业的移动需重定位,是动态(因作业已经装入)

对换 将阻塞进程,暂时不用的程序,数据换出 将具备运行条件的进程换入 类型 整体对换:进程对换,解决内存紧张 部分对换:页面对换/分段对换:提供虚存支持 对换空间的管理 外存 对换区比文件区侧重于对换速度,因此,对换区一般采用连续分配 采用数据结构和分配回收类似于可变化分区分配 换出 选出被换出进程: 因素:优先级,驻留时间,进程状态 换出过程: 对于共享段:计数减1, 是0则换出,否则不换 修改PCB和MCB(或内存分配表) 换入 选择换入进程:优先级,换出时间等 申请内存 换入 基本分页存储管理

连续分配引起碎片问题

碎片问题的解决方案:紧凑方式消耗系统开销

离散分配:分页、分段、段页

分页:将用户程序地址分为若干个大小固定的区域,也就是页

页面和页表

页面和物理块:逻辑空间和内存空间

页面大小 :

页太大,页内碎片大 页太小:页表可能很长,换入/出效率低

地址结构:

逻辑地址A;页大小L;页内偏移d,则页号P和页内地址d:

\[P=INT\left [ \frac{A}{L} \right ] \]

\[d=\left [ A \right ]\% L \]

例:系统页面大小为1kb,A=2170B,P=2,d=122

地址变换机构

基本任务:逻辑地址——物理地址的映射

页号→块号:通过页表来完成 页内地址→块内地址:无需转换

基本地址变换机构:

越界保护 每个进程对应一页表,其信息(如长度、始址)放在PCB中,执行时将其首地址装入页表寄存器

需要考虑的问题:

页表放在哪里?整个系统的页表空间有多大?

直接映像的分页系统对系统效能的不利影响?(影响执行速度,因为CPU至少要访问两次主存才能存取到所要数据)

基本的地址变换机构

①页表驻留在内存中 ②系统中设置一个页表寄存器存放页表在内存中的始址和页表的长度 ③缺点:两次访问主存,速度降低近1/2

假设访问一次内存时间为t

\[EAT=t+t=2t \]

快表: 减少一次内存访问

假设命中率为a,查找快表需要时间为λ,访问一次内存时间为t

\[EAT=a\times λ+(1-a)\times (t+λ)+t=2t+λ-t\times a \]

多级页表 页表可能很大,将其离散存放在不同页块中。 建一“外部页表”来管理这些离散页表块。 相当于单级页表中的页表寄存器,一般应常驻内存。 每项记录页表始址,且增加存在位。 64位机器页表一般>3级,最外层页表常驻。

基本分段存储管理

按程序的逻辑结构,将程序的地址空间划分为若干段,各段大小可不相同。在进行存储分配时,以段为单位,这些段在内存中可以不相邻接。

每个段有其逻辑意义和功能,便于

方便编程 分段共享 分段保护 动态链接 动态增长

分段地址结构

段表

地址变换

分页和分段的主要区别

页是信息的物理单位,段是逻辑单位 页长度固定,段长度不固定(由用户指定) 一维与二维

段式管理的优缺点

优点:

程序的各段可独立编译(修改一个过程不会影响其它无关过程) 可采用不同的保护措施(段只包含一种类型的对象,可以有针对这种特定类型的合适的保护) 便于共享某些段(常见的例子是共享库,如图形库)

缺点:

段长受限制(段长不定会出现空闲区上内存的浪费) 段是作为一个整体调入调出,操作时间长 段页式存储管理

将用户程序分成诺干段,把每个段分成若干页

采用段页式存储管理,在CPU中应设置段表控制寄存器

地址变换过程

段页式存储管理中,访问快表失败时,每访问一条指令或存取一个操作数都要3次访问主存

虚拟存储器

常规存储器管理方式的特征

一次性(指全部装入) 驻留性(指驻留在内存不换出)

局部性原理

时间局部性:如循环执行 空间局部性:如顺序执行

虚拟存储器

具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储系统 实质:以时间换空间,但时间牺牲不大

虚存的实现方式:

需要动态重定位

请求分页系统

以页为单位转换 需硬件 请求分页的页表机制 缺页中断 地址变换机构 需实现请求分页机制的软件(置换软件等)

请求分段系统

以段为单位转换 请求分段的段表结构 缺段中断 地址变换机构 需实现请求分段机制的软件(置换软件等)

虚存特征:

离散性:部分装入(若连续则不可能提供虚存),无法支持大作业小内存运行 多次性:局部装入,多次装入 对换性 虚拟性 请求分页

需要:请求页表机制,缺页中断机制,地址变换机制

请求页表机制

状态位指示是否已调入内存

缺页中断机制

每当所访问的页面不存在时,便产生一缺页中断,请求OS将所缺页调入内存

一般中断在CPU一条指令执行完后才检查,而缺页中断在指令执行期间立刻处理 一条指令执行期间可能产生多次缺页中断

地址变换机制

请求分页的内存分配

最小物理块数:能保证进程正常运行所需的最小

单地址指令,直接寻址:2块(一块存放指令页面,另一块存放数据页面 允许间接寻址:3块

内存分配策略:

固定分配局部置换: 固定分配:为每个进程分配一定物理块,不再改变 局部置换:缺页只能从分配的n个页中选一换出,再调入 -难以确定固定分配的页数(少:置换率高; 多:浪费) 可变分配全局置换: 可变分配:为每个进程分配一定物理块,运行期间可增减 全局置换:缺页从OS保留的空闲块取出分配,或以所有进程物理块为目标选出一块换出,再分配 可变分配局部置换 可变分配:为每个进程分配一定物理块,运行期间可增减 局部置换:只允许再该进程的页面中选择患处换入,如果频繁发生中断,OS再为其分配若干附加物理块知道缺页率减少

物理块分配算法:

平均分配

按进程大小比例分配: n个进程,页面数为Si,总页面数为S,总物理块m,分配到物理块bi=

\[b_{i}=\frac{S_{i}}{S}m \]

优先权:一部分按比例,一部分考虑优先权

页面调入策略:

调入时机:

预调:(根据空间局部性)目前:成功率≤50% 请求调入:较费系统开销,各有优劣

从何处调页:

对换区(连续):全部从对换区调入所需页面, 快 文件区(离散):修改过的页面换出到对换区, 稍慢 UNIX方式: 未运行过的页面,都应从文件区调入 曾经运行过但又被换出的页面,从对换区调入 对共享页,应判断其是否在内存区

页面调入过程:

访问页面状态位为0,向CPU发出缺页中断,中断程序先保留CPU环境,查找页表找到该页所在的外存物理块,若此时能容纳新页面,则启动磁盘I/O,调入内存,修改页表;若已满,则按照置换算法,选一页换出,如果该页修改位为0,则不必写回磁盘,繁殖则写回磁盘。再调入所缺页,并写入快表。最后利用修改后的页表访问数据物理地址,再访问数据

缺页率:进程逻辑空间为n页,系统分配物理块数m,访问页面成功的次数为S,失败的次数为F,A=S+F,缺页率f=

\[f= \frac{F}{A} \]

页面置换算法

先进先出(FIFO):淘汰最先进入内存的页面

最佳(Optimal):淘汰最长(未来)时间内不再被访问的页面

最近最久未使用(LRU):

须为每个在内存中的页面配置一个移位寄存器:R=Rn-1Rn-2...R1R0,访问某物理块时将相应寄存器的Rn-1位置1,定时信号每个一段时间寄存器右移1位,具有最小数值的寄存器就是LRU 然后再用栈保存当前页面:

Clock置换算法:

为每页设置一位访问位,将内存中所有页面通过指针链接成一个循环队列,被访问时访问位置1

淘汰时:访问位是0,则换出;访问位是1,则置0,给予页面第二次驻留内存的机会,再按照FIFO检查下一个页面

改进Clock:对于修改过的页面,换出时所付出的开销更大

访问位A,修改位M:A=0,M=0:未被访问,未被修改,最佳淘汰页

扫描循环队列,寻找上述最佳淘汰页,第一次扫描不改变A 1失败则进入第二轮,寻找A=0,M=1;所有扫描过的页面A置0 2失败则进入第三轮,重复1,再失败则进入2,一定能找到 性能分析

被访问页在内存中,且在快表中 内存访问有效时间EAT=查找快表时间λ+访问实际物理地址时间t

\[EAT=λ+t \]

被访问页在内存中,不在快表中 查找快表+查找页表+修改快表+访问实际物理地址

\[EAT=λ+t+λ+t \]

不在内存 查找快表+查找页表+缺页中断处理时间ε+修改快表+访问实际物理地址

\[EAT=λ+t+ ε+λ+t =ε+2(λ+t) \]

考虑到命中率a,缺页率f:

\[EAT=λ+a\times t + (1-a)\times [t+f\times(ε+λ+t)+(1-f)\times (λ+t)] \]

仅考虑缺页率,λ=0,a=0

\[EAT=t+f\times(ε+t)+(1-f)\times t \]

CPU利用率与多道程序度的关系:多道程序度指在内存中并发执行的程序数目。在低度情况下,CPU利用率呈线性变化关系。随着度的上升,CPU利用率也逐渐上升,最终上升到一个最大值,若在这种情况下,进一步增加度,则系统发生抖动,且CPU利用率将迅速恶化.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3