操作系统_内存管理
Posted ~千里之行,始于足下~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统_内存管理相关的知识,希望对你有一定的参考价值。
内存管理
存储体系
CPU缓存(Cache Memory):是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾.
内存: 由于cpu与外设之间速度不匹配,用内存来缓冲.cpu不直接与外设产生联系,外设会通过中断等技术与cpu通信.cpu会将计算的数据予写入到内存,通过内存来写到磁盘或显示器上;而键盘输入的数据或磁盘上的数据会读到内存上,cpu直接到内存取数据.
管理的目的和任务
内存空间分为用户区和系统区,为了充分利用内存,引入多道程序,以及后期的进程通信,内存共享问题
- 内存:当前正在运行程序和代码的数据(PC所指的)
- 系统区:存放操作系统的常驻内存
- 用户区:装入并存放用户的代码和数据
内存的分配的方式:
- 静态分配:程序运行前一次性转入内存,运行过程中不能申请增加内存
- 动态分配:根据需要增加内存
内存共享
多道程序动态地共享内存,可以节省内存空间,提高内存利用率;实现进程通信
存储保护
内存中的各个进程互不影响
- 防止地址越界:每个进程都有相对独立的进程空间,防止侵犯 其他进程空间
2.防止操作越权:每个进程都有自己的访问权限
扩充内存容量
内外村结合起来,借助虚拟存储技术或其他交换技术,达到在逻辑上扩充内存够的效果
地址映射
分为静态地址映射和动态地址映射,通过基址寄存器(重定位)实现逻辑地址到物理地址的映射
分区存储管理方案
系统把内存用户区划分为若干分区,分区大小可以相等,也可以不等。一个进程占据一个分区
-
特点:
- 支持多个程序并发执行
- 难以进行内存分区的共享。
-
问题:可能存在内碎片和外碎片。
- 内碎片:占用分区之内未被利用的空间,如在固定分区的系统中,小作业占用大分区时。
- 外碎片:占用分区之间难以利用的空闲分区(通常是小空闲分区)。
-
固定分区
-
可变分区
*
分区算法:
- 最先匹配法(first-fit):按分区的先后次序,从头查找,找到符合要求的第一个分区,则结束查找。它要求可用表或自由链按起始地址递增的次序排列。
- 该算法的分配和释放的时间性能较好,较大的空闲分区可以被保留在内存高端。
- 但随着低端分区不断划分而产生较多小分区,每次分配时查找时间开销会增大。
- 最佳匹配法(best-fit):它要求找到一个长度大于等于所要求内存长度,且其大小与要求相差最小的空闲分区进行分配。它要求可用表或自由链按分区大小递增的次序排列
- 从个别来看,外碎片较小,但从整体来看,会形成较多外碎片。较大的空闲分区可以被保留。
- 最坏匹配法(worst-fit):它要求找到一个长度大于等于所要求内存长度,且最大的分区进行分配。它要求可用表或自由链按分区大小递减的次序排列。
- 基本不留下小空闲分区,但较大的空闲分区不被保留。
页式存储管理方案
概念:程序的连续存放造成了内存碎片问题。虽然可以利用紧缩法来解决问题,但要额外花费CPU时间。页式存储管理允许程序的存储空间是不连续的,既减少了内存碎片,提高了内存利用率,又增加存储管理的灵活性.
存储管理MMU(memory management Unit)芯片被用来从逻辑地址映射到物理地址.
页面尺寸的取值规律:
通常是:几KB到几十KB,必须是2的整数次方,页的大小是由机器硬件定义好的,OS可以将两页捆绑在一起分配使用。
- 太小->页表长,并导致需要更多的页表空间,对于大进程而言,页表可能太大,无法放到主存,只好放在磁盘,同时可能导致二次缺页;
- 太大->页表短,管理开销小,交换时对外存I/O效率高,但能使缺页率增加,还有页内碎片。
[建议]发生缺页时读取时间对页大页小的开销是差不多的,所以页大为好
分页式地址变换过程:
快表:为了提高查表速度,在地址变换机构中增设一个具有并行查找能力的高速缓冲存储器(快表),将访问最频繁的少数活动页面的页号放到快表中。
引入快表的目的: 为了提高地址映射速度
原因:CPU的指令处理速度与内存指令的访问速度差异大,CPU的速度得不到充分利用
解决:在CPU中使用了高速缓存(Cache)
引入快表的地址映射:
段式存储管理方案
页式管理和段式管理的比较:
-
页式和段式管理都提供了内外存统一管理的虚存实现,但分页是出于系统管理的需要,分段是出于用户应用的需要:
- 一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。
- 页式虚存只交换固定大小的页,需要多次缺页中断才能把所需信息完整地调入内存,而段式虚存每次交换得到是一段有意义的信息。
无法通过页面共享具有完整逻辑功能的子程序或数据块,而段则可以。 - 页大小是系统固定的,而段大小则通常不固定,对需要不断增加或吸收新数据的段十分有利
-
段式便于实现动态链接:段名+入口地址,需要硬件支持。
-
逻辑地址表示:
- 分页是一维的,各个模块在链接时必须组织成同一个地址空间;
- 分段是二维的,各个模块在链接时可以每个段组织成一个地址空间,反映了程序的逻辑结构。
-
通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。
段页式存储管理方案
覆盖技术与交换技术
覆盖技术
原理:把一个程序分成若干个功能上相对独立的程序段(代码段或数据段),它们按照时间先后占用公共的内存空间,即共享同一内存分区。
将程序的必要部分(常用功能)的代码和数据常驻内存;
可选部分(不常用功能)在其他程序模块中实现,平时存放在外存中(覆盖文件),在需要用到时才装入到内存,覆盖前面的程序段(覆盖前后的两个程序段不存在调用关系);
一般要求作业各模块之间有明确的调用结构,程序员要向系统指明覆盖结构,然后由操作系统完成自动覆盖
交换技术:
为什么引入?
当内存空间紧张时,系统将内存中某些进程暂时移到外存,把外存中某些进程换进内存,占据前者所占用的区域,这种技术是进程在内存与外存之间的动态调度
原理:暂停执行内存中的进程,将整个进程的地址空间保存到外存的交换区中(换出swap out),而将外存中处于外存就绪状态的进程的地址空间读入到内存中,并将该进程送到就绪队列(换入swap in)。
交换技术实现中的几个问题
选择原则
即:将哪个进程换出/内存?
例子:分时系统,时间片轮转法或基于优先数的调度算法,在选择换出进程时,要确定换出的进程是要长时间等待的
需要特殊考虑的是:任何等待I/O的进程中存在的问题
解决:
从不换出处于等待I/O状态的进程
有些I/O进程因DMA而不能换出内存或换出前需要操作系统的特殊帮助
何时需发生交换?
例子:
只要不用就换出(很少再用)
只在内存空间不够或有不够的危险时换出
交换时需要做哪些工作?
需要一个盘交换区:必须足够大以存放所有用户程序的所有内存映像的拷贝;必须对这些内存映像的直接存取
换入回内存时位置的确定
换出后再换入的内存位置一定要在换出前的原来位置上吗?
受地址“绑定”技术的影响,即绝对地址产生时机的限制
与覆盖技术相比,交换技术不要求用户给出程序段之间的逻辑覆盖结构;而且,交换发生在进程或作业之间,而覆盖发生在同一进程或作业内。此外,覆盖只能覆盖那些与覆盖段无关的程序段
虚拟存储技术
虚存:把内存与外存有机的结合起来使用,从而得到一个容量很大的“内存”,这就是虚存
实现思想:当进程运行时,先将一部分程序装入内存,另一部分暂时留在外存,当要执行的指令不在内存时,由系统自动完成将它们从外存调入内存工作
目的: 提高内存利用率
以上是关于操作系统_内存管理的主要内容,如果未能解决你的问题,请参考以下文章