计算机操作系统 第三章、内存

第一章 ​​操作系统的概念-CSDN博客

第二章上、进程-CSDN博客

第二章下、调度算法-CSDN博客

第三章、内存-CSDN博客

第三章下:分页、分段存储,虚拟内存-CSDN博客

第四章、文件管理软件实现-CSDN博客

第五章、文件管理硬件实现-CSDN博客

第六章、IO管理-CSDN博客

操作系统补充 上-CSDN博客

操作系统补充 下-CSDN博客


存储单元,内存地址,按字编址,按字节编址

逻辑地址---相对地址;物理地址---绝对地址

内存管理(操作系统完成)

内存管理做得四件事:空间分配与回收,空间扩充(实现虚拟性),地址转换(逻辑地址转绝对地址),存储保护(进程只能访问自己的)

地址转换:

从写程序到程序运行:编译,链接,装入

装入过程会遇到的问题:逻辑地址中有指令对地址80操作,装入内存后模块很可能不是从0开始的,所以80对应的数据不是目标数据

实现地址转换的三种装入方式

绝对装入

如果知道装入模块要从地址为100的地方开始存放,那就可以在在编译、链接阶段直接修改指令中的地址

单道程序阶段使用(无并发进程)

静态重定位(可重定位装入)


在装入阶段修改地址初始值

再装入时必须分配其要求的全部内存空间(地址一次性修改);运行期间不能在移动(否则地址又错了)

动态重定位(动态运行装入)(现代操作系统使用)

内存中直接装入,有一重定位寄存器记录存放初始位置,在指令运行时加上。允许程序在运行时移动位置。程序运行只需要装入部分代码就能运行

内存保护:

法一:CPU汇总设置一堆上下限寄存器存放进程的地址区间

法二:重定位寄存器(存起始物理地址)和界地址寄存器(存最大逻辑地址即长度)

内存空间扩充:解决程序大小超过物理内存总和的问题         (也就考考选择)

覆盖技术

将程序分为多个段常用的段常驻内存,不常用的段在需要时调入内存。内存中分为1个“固定区”和若干个“覆盖区”需要常驻内存的段放在固定区中,调入后就不再调出(除非运行结束)不常用的段放在覆盖区,需要用到时调入内存,用不到时调出内存

让一个程序中不可能同时被访问的程序段共享一个覆盖区

需要由程序员声明覆盖结构

缺点:对用户不透明,增加编程负担

交换技术

将某些进程暂时挂起到外存,将已具备运行条件的进程放入内存。前面讲的内存调度(中级调度)就是为了实现交换技术。    ps:PCB不会换出内存

挂起到外存的什么位置?

磁盘(外存)中分为对换区和文件区。前者速度快,挂起的文件在这里。

何时交换?

进程运行缺页时,后面讲

换出哪些进程?

优先阻塞进程,优先级低的进程

覆盖与交换的区别:覆盖是在同一个进程中的,交换是在不同进程间的。

内存分配与回收

连续分配管理方式

单一连续分配

内存被分为系统区和用户区。内存中只能有一个程序,独占用户区

优点:实现简单,无外部碎片,可采用覆盖技术扩充,可能不需要内存保护

   缺点:单任务单用户,有内部碎片(空间给了程序,但程序没有用,如图中的蓝色区域:属于A但A没使用)无外部碎片,存储器利用率低

固定分区分配:

将用户空间分成固定大小的分区,每个分区最多一道作业

分区大小相等:适合多个相同对象的场景

分区大小不等:增加灵活性

实现简单,无外部碎片。

有内部碎片、无外部碎片。当程序太大时,需要覆盖技术,降低性能

通过分区说明表存放分区状态:

动态分区分配

不预先划分内存分区,根据进程建立分区

与固定分区分配相同,通过表或链表记录空间使用状态

若有多个空闲分区满足要求,选择哪个区域?

按一定的动态分区分配算法,后面讲

如何进行分配回收操作?

表中该合并就合并,该删除就删除。

无内部碎片,有外部碎片。外部碎片可以通过紧凑技术(移动进程在内存中的位置,将零碎的空余空间合并)消除

动态分区分配算法

若分配的空闲分区远大于所需空间(大于某阈值),则只是分配空闲空间的一部分,剩下的不属于该进程,而是继续作为空闲空间

首次适应算法:

最佳适应算法:

算法思想:尽可能留下大面积的空闲区,优先使用小面积空闲区

优点:内部碎片最小

缺点:每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。因此这种方法会产生很多的外部碎片。算法开销大(因为空间改变可能需要重新排序空余空间表/链)

邻近适应算法(循环指针):  与上面两种结合使用

首次适应算法每次都从开头检索,所以高地址处的大面积空余容易留下来给将来的大进程。而临近适应算法因为是循环检测地址的,所以大面积空余都容易被使用。将来有大进程时,就没有合适的空间了。

综合看来,首次适应算法才是最好的

非连续分配管理方式:

连续分配指一个进程的内容连续的放到内存里,容易出现碎片。非连续指进程的内容可以分散的放入内存,解决的碎片问题

基本分页存储管理

将内存空间分为大小相等的分区,每个分区就是一个“内存块”配有“内存块号/物理块号”。进程的地址空间也分为与内存块大小相等的区域,称为“页/页面”配有“页号”。(注:进程的最后一个页面可能没有一个内存块那么大。因此,内存块不能太大,否则可能产生过大的内部碎片)。各个页面不必连续存放,也不必按先后顺序来。

非连续分配实现逻辑地址到绝对地址(动态重定位方法的扩展)

那么电脑如何知道一个页面对应的起始地址?   建立页表

一行叫一个页表项

因为每个页表项的长度是相同的,所以页表中页号可以是隐含的:

最后这一段的意思是:世知道页表项长度和页号就能找到对应页表项和块号

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值