操作系统第四章---存储管理子系统

重点:分页、分段技术

1.存储器层次结构
(满足不同位置数据需求-速度快、不易失)
你比如说直接跟cpu对接的 寄存器 cache 内存 外存(常理解为硬盘)他们读取的速度不一样、易失性也不一样。
负责管理上面的结构的—存储管理器。

—进程的换进换出和页面置换都是内存不足造成的。—

2.单道程序存储管理
把整个内存划分为系统区和用户区,用户区负责执行用户程序,系统区用于执行操作系统程序。
大概有三种实现方式
操作系统第四章---存储管理子系统
(上面的模型已经不再采用,现代操作系统一般都能同时运行多个进程。)

3.固定分区的多道程序系统
将内存划分出多个内存块,用来装载不同的进程。
多道程序增加了cpu的利用率。

4.重定位和存储保护
多道程序技术引发了两个很重要的问题:地址重定位和存储保护。
(当一个程序被链接时,连接器必须知道程序将在内存的什么地址开始运行。)
1.重定位—既定的内存位置发生改变(比如说文件内的相对地址到内存中的绝对地址)(如果简单解决会产生一部分安全问题,会让很多程序访问不属于他的地址)(从实际的物理地址,到内存中的虚拟地址)
另一种解决方案,在机器中增加两个特殊的硬件寄存器。
(基地址寄存器和边界寄存器)
基地址加偏移量,先判断是否在边界寄存器范围内(就是说在不在可访问地址之内),然后就能找到实际地址。(时至今日,又没有人用了。。。。)
存储保护:就是设置好边界,让不该访问其他绝对地址的进程无法访问它不该访问的地址。

5.交换技术
5.1交换策略策略
它把各个进程完整地调入内存,运行一段时间,然后再放回到磁盘上(解决内存不够大的问题)
5.2虚拟存储器策略
交换技术图图—这里面每一块的内存大小,都是浮动的。
操作系统第四章---存储管理子系统
浮动内存块大小就涉及到浮动内存分配策略。(动态分配)
(以下是基于交换策略)

5.1.1.基于位图的存储管理和基于链表的存储管理
简单描述一下,位图管理中1代表被占用了,0表示空闲。
链表的话 p代表被进程占用 h代表空闲
操作系统第四章---存储管理子系统(位图因为要搜索0位,效率很低)?为啥?
7.基于链表的存储管理的五种内存分配算法我们
目的:我们希望找到一种分配策略,满足以下要求的若干。
1.快速放入文件 2.文件无论大小能被放下 3.文件之间间隙够小,不至于很大浪费。文件间间隙够大,可以再放下文件。

1.最先匹配法
只要有大于等于进程所需要的空闲内存,给他!
2.下次匹配算法
在最先匹配算法的基础上,如果下次有另一个程序进来,会从上次那个点的下一个点开始最先匹配。而不是像最先匹配,每次都从端点开始匹配。这种算法,较大的空闲分区不容易,保存,速度虽然快,但是性能比最先匹配算法差一点。
3.最佳匹配算法
搜索整个磁盘,找到最小的空间能装下文件的地方。
但是它会把空间切割的很小。
4.最坏匹配算法
找到最大的空间分给他。(可以尽可能保证,被切割的空间足够大,可以装下下一个进程)
5.快速匹配算法
将常用的进程的内存,为他们设置各自的链表。链表指向,被切割成固定大小,直接找到常用的、专用的内存。

逻辑地址和物理地址
------上面说的都是交换技术,这是基于每一次都都已把程序全部装进内存中。我们还要解决内存不能一次把程序全部装进的问题。------虚拟存储技术。区别:交换的话,把每一个进程完整的先拿进来,然后来回换。虚拟的话,需要哪部分先掉进来哪部分(程序和数据的一部分),包括数据。

8.虚拟存储技术
基本思路:程序的代码、数据和栈的总大小可以超过实际可用的物理内存大小,等我们需要用到那一块的时候再说。(多出那部分,先存在硬盘里,先把需要的放在内存里。)
—>前期是用覆盖块的思想实现虚拟存储技术的。
—名词解释:覆盖块—覆盖块指的不是内存要被覆盖的块,而是程序被划分的块,就是运行完可以覆盖掉的程序,然后下一个覆盖块再进来覆盖掉。
—>后期这个技术从程序员手动完成,变为由虚拟存储器来完成。

9.虚拟页式存储管理
大部分虚拟存储系统采用的是一种称为-分页-的技术。
我们在程序中或者大多数计算机本身使用的就是虚拟地址,并不是实际的物理地址。
MMU (存储管理单元)—它负责把虚拟机映射为物理地址
操作系统第四章---存储管理子系统

10.页框—把物理内存划分为许多个固定的内存块-物理页

11.页面-把虚拟空间也划分为大小相同的块—虚拟页面

(页面一般多余页框)(页面大小必须是2的整数次幂)
页面中存储着对应的物理页面也就是页框号

12.有效位-也就是说不是所有的页面
(虚拟地址在实际内存中都能找到位置对应)—有效位来描述每个虚拟页面是否在内存中。
13.如果不在引起-缺页中断
(页表-存着页面和页框的对应关系)
–页表–
—整体梳理下这个虚拟技术的流程,首先我们先预订号虚拟内存和好实际内存的对应关系-这会产生一个–页表
页表里面存储的结构-左边一般是页面一列,右边一般是页框一列。(这块要注意,页面和页框大小都是一一对应的,所以实际地址(物理地址)就是等于页面地址的偏移量+页面对应的物理地址的开始。
(但是我们前期说过一般来说页面的大小大于页框的大小,所以说有一部分是没有与物理地址对应的,造成缺页,等我们要使用到相应的页面的时候再去改,再去生成相应的对应,也就是把没有对应物理地址的页面再装入页表中。(页表中的页面都是有对应关系的))
页表还存在多级页表(并不把所有页表放在内存中,需要再换进来)
分页 页面装入
因为缺页的存在,我们要有相应的页面置换算法

1.页面置换

最优页面置换算法
所有现在已经换进的页面,计算下次访问之前还要多长时间,换出最长时间才能被访问的页面。(这种算法无法实现,可以用来做与其他算法的评价)
2.最近未使用页面置换算法
将最近使用最少的页面置换出去。
3.先进先出置换算法
谁是现在已经换进来页面中最先进来的页面,将它换出。
但是有可能换出的页面是经常访问的页面。
4.第二次机会页面置换算法
二次机会,在先进先出的基础上,标记曾经被访问过的页面为1,再给他一次机会,先不出局,移动到页面队尾。
(如果引用都是1都被引用过,那就是先进先出了)
5.时钟页面替换算法—加入指针(原理一样,只是指针实现,而不是链表)(因为对于二次机会算法,用链表实现的过程中,需要频繁移动页面,开销很大。用指针解决这种问题)
6.最久最少使用页面替换算法(选择最近很少访问)(LRU)
每一个页面进来以后,如果访问这个刚进来的页面标记为加1,其他标记为减1,当需要去换出页面的时候,我们把标记位最小(最少访问换出去)