以下是本人大学学计算机操作系统的笔记。有版权的,转载请注明出处。
存储管理:就是对内存的管理。
内存管理提高存储器的利用率以及从逻辑上扩充存储器。
存储管理功能:
内存的回收与分配,地址变换(程序中的逻辑地址与内存中的物理地址之间的转换),内存扩充(借助虚拟技术或覆盖技术从逻辑上扩充内存容量),内存保护(保证进入内存的各道作业都在自己的存储空间运行,互不干扰)
虚拟内存
以往的存储管理技术必须将作业全部装入内存才能执行且作业常驻内存直到运行结束,难以满足较大作业或较多作业进入内存执行。所以为了能让作业的一部分装入就可以运行的存储管理技术叫做虚拟内存管理技术。
局部性原理:大多数程序执行时,在一个较短的时间内仅能使用程序代码的一部分,相应的,程序所访问的存储空间也局限于某个区域,这就是程序执行的局部性原理。
表现为时间局部性和空间局部性。
基于局部性原理,在程序装入时可以将程序的一部分放入内存,而将其余部分放在外存,然后启动程序(部分装入)。
在程序执行期间,当所访问的信息不在内存中,再由操作系统将所需的部分调入内存(请求调入)。
另外,系统将内存中暂时不用的内容置换到外存上,腾出空间存放将要调入内存的信息(置换功能)。
这种从逻辑上扩充内存容量的存储器系统称为虚拟存储器。
分区存储管理:将内存分成若干个大小不等的区域,由多道环境下的各并发进程共享。
(给每一个内存中的进程划分一块适当大小的存储区,连续存储进程的程序和数据)
特点:管理简单,存在严重的碎片问题使内存利用率不高。进程在分区连续存放,进程大小受到分区大小的限制。
两种分法:
固定分区法:把内存固定的划分为若干个大小不等的区域。(系统对内存的管理和控制通过分区说明表进行,分区说明表说明各分区号,分区大小,起始地址和是否空闲(分区状态)。内存的分配释放,保护,地址变换都是通过分区说明表进行)
动态分区法:在作业执行前不建立分区,分区的建立是建立在作业的处理过程中进行的,大小随着作业或进程对内存的要求而改变的。相比提供内存利用率。
动态分区除了分区说明表还把内存中的可以分区单独构成可用分区表或可以分区自由链,描述内存资源。
动态分区组成,,分区说明表-,,可用分区表,每个表目记录一个空闲区:区号,分区长度,起始地址.,管理简单,缺点表大小难以确定,-占用一部分内存-可用分区自由链(利用每个空闲区头几个单元存放本空闲区大小和下一个空闲区的起始地址,系统设置一个-自由链指针指向第一个空闲区。)查找比较困难,但不占用额外内存区。....
页式管理:各进程的虚拟空间被划分为若干个长度相等的页,页长1K—4K。
进程虚拟地址变为由页号P与页内地址W组成。
同时也把内存分成与页面大小相等的区域,称为块或物理块(页面)。用户进程在内存空间除了在每个页面内地址连续之外,每个页面之间不再连续。
调度作业时必须将作业的所有页面一次调入内存,如果内存没有足够多的物理块,那么作业等待,这种方式称为简单分页。
特点:减少了碎片(任一碎片都小于一个页面)以及只在内存存放反复执行或即将执行的程序段与数据部分,把不经常执行的程序段和数据存放于外存,执行时再调入,且由连续存储提高为非连续存储。
页式虚拟地址与内存页面物理地址转:页式虚拟地址与内存物理地址建立一一对应的页表(硬件地址变换机构来执行转换)。将逻辑地址上连续的页号映射到物理内存中称为离散的多个物理块(页面),将页面和物理块一一对应,体现在页表。(页表由页号和块号组成)
对内外存的统一管理采用请求调页技术(基于局部性原理)。(什么管理?只在内存存放反复执行或即将执行的程序段与数据部分,把不经常执行的程序段和数据存放于外存,执行时再调入)
动态页式管理:1,请求页式管理2,预调入页式管理
相同点:在作业开始执行之前,都不把作业或进程的程序段和数据段一次性的全部装入内存,而只装被认为是经常执行的部分,其他部分执行过程中动态装入。
不同点:
请求页式管理:当需要的数据或指令不在内存即发生缺页中断,系统将外存中相应页面调入内存。
预调入页式管理:系统对外存中的页进行调入计算,估计出这些页中指令和数据的执行和被访问顺序,按此顺序调入和调出内存。
重点请求页式管理
系统如何发现不在内存中的虚页?
扩充页表法。
如何处理虚页这种情况设计两个问题,1,何种方式把所缺页调入内存2,内存没有空闲区,调进来的页放在什么地方()。
页面置换算法置换的单位是页面,连续存储中交换区交换的是整个进程
缺页的调入和存放,内存没有空闲页时都是一个内存页面置换算法问题。
置换算法:在内存中没有空闲页面时被调用,目的是选出一个被淘汰的页面。
轮转法:循环换出内存可用区内一个可用被换出的页,无论该页是刚被换进或已换进内存很长时间。
先进先出(FIFO)法:选择在内存驻留时间最长的一页将被淘汰。(实现方式,把已分配页面按分配时间链接起来,组成FIFO队列,置换指针指向队首,置换时把队首页换出,换人的页链接在队尾。)
FIFO的bleady现象:未给进程或作业分配足它所要求的页面数时,有时会出现分配的页面数增多,缺页次数增加的现象。
引用串 |
3 |
4 |
2 |
6 |
4 |
3 |
7 |
4 |
3 |
内存 |
3 |
4 |
2 |
6 |
6 |
3 |
7 |
4 |
4 |
3 |
4 |
2 |
2 |
6 |
3 |
7 |
7 |
||
3 |
4 |
4 |
2 |
6 |
3 |
3 |
|||
是否缺页 |
T |
T |
T |
T |
T |
T |
T |
缺页7次,命中率2/9=
最近最少使用LRU算法:选择最近最长时间没有被使用过的页面予以淘汰。
引用串 |
3 |
4 |
2 |
6 |
4 |
3 |
7 |
4 |
3 |
内存 |
3 |
4 |
2 |
6 |
4 |
3 |
7 |
4 |
3 |
3 |
4 |
2 |
6 |
4 |
3 |
7 |
4 |
||
3 |
4 |
2 |
6 |
4 |
3 |
7 |
|||
是否缺页 |
T |
T |
T |
T |
T |
T |
缺页6次,命中率3/9=
最近没有使用NUR页面淘汰算法:从那些最近一个时期内未被访问的页中任选一页淘汰。在页表中增设一个访问位,当某页被访问时,访问位置1,否则置0。系统周期性对所有访问位清0.淘汰时从哪些访问位为0的页面选择一个进行淘汰。
引用串 |
3 |
4 |
2 |
6 |
4 |
3 |
7 |
4 |
3 |
内存 |
3 |
3 |
3← |
6 |
6 |
6← |
6 |
4 |
4 |
← |
4 |
4 |
4← |
4← |
4 |
7 |
7← |
7← |
|
← |
2 |
2 |
2 |
3 |
3← |
3 |
3 |
||
是否缺页 |
T |
T |
T |
T |
T |
T |
T |
缺页7次,命中率2/9=
最不经常使用LFU页面淘汰算法:淘汰到当前时间为止被访问次数最少的那一页。在页表中增设一个访问计数器。每当某页被访问,访问计数器加1,发生中断时,淘汰计数值最小的那一页,并将所有页计数器清零。
抖动现象:内存页面置换算法选择不当,导致刚被调出内存的页面又马上调入内存,调入内存不久的页面马上被调出,如此反复的现象。
抖动原因:请求分页系统中每个进程只能分配到所需全部内存空间的一部分。