操作系统原理课件讲课资料

上传人:youn****329 文档编号:132990792 上传时间:2020-05-22 格式:PPT 页数:170 大小:1.98MB
返回 下载 相关 举报
操作系统原理课件讲课资料_第1页
第1页 / 共170页
操作系统原理课件讲课资料_第2页
第2页 / 共170页
操作系统原理课件讲课资料_第3页
第3页 / 共170页
操作系统原理课件讲课资料_第4页
第4页 / 共170页
操作系统原理课件讲课资料_第5页
第5页 / 共170页
点击查看更多>>
资源描述

《操作系统原理课件讲课资料》由会员分享,可在线阅读,更多相关《操作系统原理课件讲课资料(170页珍藏版)》请在金锄头文库上搜索。

1、1 第二章存储管理 2 1存储管理基础2 2基本存储管理方法2 3可变分区存储管理方法2 4内存扩充技术2 5纯分页的存储管理2 6请求分页系统2 7段式存储管理2 8段页式存储管理2 9Linux存储管理 2 存储器可分为 内存储器和外存储器 内存储器 可以被CPU直接访问 外存储器 不可以被CPU直接访问 外存与CPU之间只能够在输入输出控制系统的管理下 进行信息交换 4 内存储器是由一个个存储单元组成 一个存储单元可存放若干个二进制的位 bit 8个二进制位被称为一个字节 Byte 内存中的存储单元按一定顺序进行编号 每个单元所对应的编号 称为该单元的单元地址 物理地址 绝对地址 实地址

2、 内存中存储单元的地址 物理地址可直接寻址 逻辑地址 相对地址 虚地址 用户的程序经过汇编或编译后形成目标代码 目标代码通常采用相对地址的形式 其首地址为0 其余指令中的地址都相对于首地址来编址 不能用逻辑地址在内存中读取信息 5 6 地址重定位 地址重定位 地址映射 将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址 当程序装入内存时 操作系统要为该程序分配一个合适的内存空间 由于程序的逻辑地址与分配到内存物理地址不一致 而CPU执行指令时 是按物理地址进行的 所以要进行地址转换 7 2 1 2地址定位方式 1 固定定位方式 由程序员在编写程序时或由编译连接程序对源程序进行编译连接时

3、 直接指定程序在执行时访问的实际存储器地址的方式称为固定定位方式 此种定位方式一般只适合于单板机或单用户系统 在多道程序环境下 应保证各个作业的地址互不重叠 这就比较困难了 8 9 2 静态重定位方式 源程序经编译和连接后生成目标代码中的地址是以0为起始地址的相对地址 当需要执行时 由装入程序运行重定位程序模块 根据作业在本次分配到的内存起始地址 将可执行目标代码装到指定内存地址中 并修改所有有关地址部分的值 修改的方式是对每一个逻辑地址的值加上内存区首地址 或称基地址 值 10 11 静态重定位的特点 1 静态重定位是在程序运行之前完成地址重定位工作的 2 静态重定位由软件实现 无须硬件提供

4、支持 3 实行静态重定位时 地址重定位工作是在程序装入时被一次集中完成的 4 绝对地址空间里的目标程序与原相对地址空间里的目标程序面目已不相同 因为前者进行了地址调整 5 实施静态重定位后 若用户程序在内存中做了移动 那么程序指令中的地址就不再反映所在的存储位置了 除非重新进行地址重定位 12 3 动态重定位方式 采用动态重定位方式 将程序在装入内存时 不必修改程序的逻辑地址值 程序执行期间在访问内存之前 再实时地将逻辑地址变换成物理地址 动态重定位要靠硬件地址变换机构实现 当程序开始执行时 系统将程序在内存的起始地址送入地址变换机构中的基地址寄存器BR中 在执行指令时 若涉及到逻辑地址 则先

5、将该地址送入虚拟地址寄存器VR 再将BR和VR中的值相加后送入地址寄存器MR 并按MR中的值访问内存 MR BR VR 13 14 2 2基本存储管理方法 2 2 1单一连续分区存储管理 基本思想 内存分为两个区域 系统区 用户区 应用程序装入到用户区 可使用用户区全部空间 最简单 适用于单用户 单任务的OS 单用户系统在一段时间内 只有一个进程在内存 15 特点 1 系统总是把整个用户区分配给一个用户使用 2 实际上 内存用户区又被分为 使用区 和 空闲区 两部分 在操作系统中 把分配给用户 但又未使用的区域称为 内部碎片 3 由于任何时刻内存的用户区中只有一个作业运行 因此这种系统只使用于

6、单用户的情况 4 进入内存的作业 独享系统中的所有资源 包括内存中的整个用户区 16 特点 5 由于整个用户区都分配给了一个用户使用 因此作业进入用户区后 没有移动的必要 采用这种存储分配策略时 将对用户程序实行静态重定位 6 实行静态重定位 并不能阻止用户有意无意地通过不恰当地指令闯入操作系统所占用的存储区域 如何阻止对操作系统的侵扰 就是所谓的 存储保护 问题 用于存储保护的专用寄存器 界限寄存器 17 存储保护过程 在用户态下 对内存的每一次访问 都要在硬件的控制下 与界限寄存器中的内容进行比较 一旦发现该访问的地址小于界限寄存器中的地址 就会产生 地址越界 中断 阻止这次访问的进行 优

7、点 易于管理 便于用户的了解和使用 缺点 由于每次只能有一个作业进入内存 故它不适用于多道程序设计 整个系统的工作效率不高 资源利用率底下 只要作业比用户区小 那么在用户区里就会形成碎片 造成内存储器资源的浪费 若用户作业的相对地址空间比用户区大 那么该作业就无法运行 18 2 2 2固定分区存储管理 把内存区固定地划分为若干个大小相等 和不等 的连续分区 每个分区装一个且只能装一个作业 分区的划分原则一般由系统操作员或操作系统决定 分区一旦划分结束 在整个执行过程中每个分区的长度和内存的总分区个数将保持不变 分区大小相等 只适合于多个相同程序的并发执行 处理多个类型相同的对象 分区大小不等

8、多个小分区 适量的中等分区 少量的大分区 根据程序的大小 分配当前空闲的 适当大小的分区 19 固定分区 大小相同 固定分区 多种大小 20 内存分配 为了便于内存分配 通常将分区按大小进行排队 并为之建立一张分区说明表 其中各表项包括每个分区的起始地址 大小及状态 是否已分配 当有一用户程序要装入时 由内存分配程序检索该表 从中找出一个能满足要求的 尚未分配的分区 将之分配给该应用程序 然后将该表项中的状态置为 已分配 若未找到大小足够的分区 则拒绝为该用户程序分配内存 21 22 地址重定位与存储保护 固定分区存储管理中 每个分区只允许装入一个作业 作业在运行期间没有必要移动自己的位置 因

9、此 应该对程序实行静态重定位 在固定分区存储管理中 不仅要防止用户程序对操作系统形成的侵扰 也要防止用户程序与用户程序之间形成侵扰 因此必须在CPU中设置一对专用的寄存器 用于存储保护 将两个专用寄存器分别起名为 下界寄存器 和 上界寄存器 23 存储保护过程 当进程调度程序调度某个作业进程运行时 就把该作业所在分区的低边界地址装入到低界限寄存器 高边界地址装入到高界限寄存器 作业运行时 对内存的每一次访问 都要在硬件的控制下 与两个界限寄存器中的内容进行比较 一旦发现该访问的地址小于界限寄存器中的地址 就会产生 地址越界 中断 阻止这次访问的进行 24 固定分区存储管理的特点 1 它是最简单

10、的 具有 多道 色彩的存储管理方案 2 当把一个分区分配给某个作业时 该作业的程序将一次性的全部被装入到分配给它的连续分区里 25 优点 易于实现 开销小 缺点 内碎片造成浪费 小作业不能有效地利用分区空间 分区总数在系统生成时确定 固定 限制了并发执行的程序数目 如果到达作业的尺寸比任何一个分区的长度都大 那么它就无法得到运行 固定分区方式的评价 26 2 3可变分区存储管理 基本思想 内存不是预先划分好的 而是当作业装入时 根据作业的需求和内存空间的使用情况来决定是否分配 若有足够的空间 则按需要分割一部分分区给该进程否则令其等待主存空间优点 没有内碎片 缺点 有外碎片 27 外部碎片问题

11、 作业A 16KB 空闲区 236KB 空闲区 220KB 作业B 100KB 空闲区 120KB 作业C 70KB 空闲区 50KB 空闲区 100KB 作业D 75KB 空闲区 25KB 内碎片 占用分区之内未被利用的空间外碎片 占用分区之间难以利用的空闲分区 通常是小空闲分区 28 2 3 1空闲存储区表 管理空闲内存区的数据结构可采用链接法和连续线性表格法 下面举一个连续线性表格管理空闲内存的方法 如采用链接法 就需要在表项中增加一个指向下一个空闲区的指针 每一个空闲分区用一个map结构管理 structmap unsignedm size 空闲分区的长度char m addr 空闲分

12、区的起始地址 structmapcoremap N 各个空闲分区按起始地址由低到高顺次登记在空闲存储区表中 m size为0的表项是空白表项 它们集中在表的后部 29 在系统初始阶段 拥有一块很大的内存空白区 这时空闲存储区表coremap中只需有一项登记该空闲区 其余的coremap表项为空白项 即m size皆为零 30 以后随着很多作业的不断申请内存和释放内存 整个存储空间将出现许多大小不等的区域 存储区表和实际的内存空间就可能变成如图所示的情况 31 2 3 2首次适应算法 1 分配算法 采用首次适应法为作业分配大小为size的内存空间时 总是从表的起始端的低地址部分开始查找 当第一次

13、找到大于或等于申请大小的空闲区时 就按所需大小分配给作业 如果分配后原空闲区还有剩余空间 就修改原存储区表项的m size和m addr 使它记录余下的 零头 如果作业所需空间正好等于该空闲区大小 那么该空闲区表项的m size就成为0 接下来要删除表中这个 空洞 即将随后的各非零表项依次上移一个位置 32 char malloc mp size structmap mp unsignedsize registerchar a registerstructmap bp for bp mp bp m size bp if bp m size size a bp m addr bp m addr

14、size if bp m size size 0 do bp bp 1 m addr bp m addr while bp 1 m size bp m size return a return 0 33 2 回收算法 当某一作业释放以前所分配到的内存时 就要将该内存区归还给系统 使其成为空闲区而可被其他作业使用 释放区与原空闲区相邻情况可归纳为如图所示的4种情况 34 仅与前空闲区相连 合并前空闲区和释放区构成一块大的新空闲区 并修改空闲区表项 该空闲区的m addr不变 仍为原前空闲区的首地址 修改表项的长度域m size为原m size与释放区长度之和 与前空闲区和后空闲区都相连 将三块空

15、闲区合并成一块空闲区 修改空闲区表中前空闲区表项 其起始地址m addr仍为原前空闲区起始地址 其大小m size等于三个空闲区长度之和 这块大的空闲区由前空闲区表项登记 接下来还要在空闲区表中删除后项 方法是将后项以下的非空白表项顺次上移一个位置 35 仅与后空闲区相连 与后空闲区合并 使后空闲区表项的m addr为释放区的起始地址 m size为释放区与后空闲区的长度之和 与前 后空闲区皆不相连 在前 后空闲区表项中间插入一个新的表项 其m addr为释放区的起始地址 m size为释放区的长度 为此 先要将后项及以下表项都下移一个位置 36 若采用首次适应法 则其分配算法简单且合并相邻空

16、闲区也很容易 该算法的实质是尽可能利用存储区低地址部分的空闲区 而尽量在高地址部分保存较大的空闲区 以便一旦有分配大的空闲区的要求时 容易得到满足 其缺点是由于查找总是从表首开始 前面的空闲区往往被分割得很小 能满足分配要求的可能性较小 查找次数就较多 系统中作业越多 这个问题就越严重 37 2 3 3循环首次适应算法 把空闲表设计成顺序结构或链接结构的循环队列 各空闲区仍按地址从低到高的次序登记在空闲区的管理队列中 同时需要设置一个起始查找指针 指向循环队列中的一个空闲区表项 循环首次适应法分配时总是从起始查找指针所指的表项开始查找 第一次找到满足要求的空闲区时 就分配所需大小的空闲区 修改表项 并调整起始查找指针 使其指向队列中被分配的后面的那块空闲区 下次分配时就从新指向的那块空闲区开始查找 38 2 3 3循环首次适应算法 循环首次适应法的实质是起始查找指针所指的空闲区和其后的空闲区群常为较长时间未被分割过的空闲区 它们已合并成为大的空闲区可能性较大 比起首次适应法来 在没有增加多少代价的情况下却明显地提高了分配查找的速度 释放算法基本同首次适应法一样 首次适应法和循环首次适应

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号