存储管理是操作系统的重要职能之一,主要任务是对内存空间进行分配与回收。由于计算机内存容量有限(现在一般都是32位或64位系统),而外存储设备的容量增长速度非常快,例如移动硬盘已经到了T的级别,这时如果要访问这块儿移动硬盘内的大数据,我们的计算机就有点力不从心了。。。故在此基础上发展了虚拟存储系统。
虚存理念:利用有限资源尽可能的执行大程序,对用户程序和内存进行分块,将用户程序一块块拿到内存中来,一个执行完后释放内存,下一个继续执行。
虚拟存储通过将运行进程访问的地址(逻辑地址、虚拟地址)与主存的物理地址(实际地址)分开,从而使得提供大于物理地址的逻辑地址空间成为可能。
虚存管理的组织结构如下图示
1.页式存储组织
系统划分,逻辑地址=页号+页内地址。
基本思想:内存分为固定大小的页。
基本原理:将各进程的虚拟空间划分为若干个长度相等的页,把内存空间以与页相等的大小划分为大小相等的片或页面。采用请求调页或预调页技术实现内外存统一管理。
例:
已知程序逻辑地址为14位且前三位为011,页面大小2K,采用页式存储。
已知逻辑地址14位,每个页面2K=2^11,所以页内地址11位,页号为3位。又前三位为011变为十进制为3,对应的物理块号为b。地址变换过程如下图所示
优点:利用率高,产生的内存碎片小,内存间分配及管理简单。
缺点:要有相应的硬件支持,增加了系统开销。请求调页的算法选择不当,有可能产生抖动现象。
2.段式存储组织
从用户角度划分,逻辑地址=段号+段内地址。
基本思想:程序按逻辑单位分成基本独立的段。
基本原理:系统为每一个作业建立一个段表,其内容包括段号与内存起始地址的对应关系、段长和状态等。
地址变换过程与页式变换同理,如下图所示
优点:便于多道程序共享内存,便于对存储器的保护,各段程序修改互不影响
缺点:内存利用率低,内存碎片浪费大。
3.段页式存储组织
逻辑地址=基号+段号+页号+页内地址
一个段表+一组页表。
段页式存储组织是段式存储组织和页式存储组织的组合,这样可以充分利用两者的优点,实存等分为页,程序按逻辑模块分成段。其中,基号作为用户标志号存在。
地址变换过程公式:
(((x)+s)+p)*2^n +d
其中,X表示基号,(x)表示基寄存器中地址为x的单元的内容,S为段号,P表示页号,d表示页内地址,n表示页内地址的位数。
优点:空间浪费小,存储共享容易、存储保护容易、能动态连接。
缺点:由于软件的增加,复杂性和开销增加,需要的硬件以及占用的内存增加,执行速度大大下降。
页面置换算法(从要执行的元素自身开始算起)
在开始页面置换之前,要了解一个概念,页面置换是相对缺页现象来讲的。缺页,简单的来理解,就是由于实际主存是小于虚存的,因此可能会发生主存中已满,而要使用的页不在主存中,这时就会出现缺页现象。
最优算法
查看后面的序列,最后被使用的元素被替换掉
随机算法
随机淘汰,没有一定的约束性。
先进先出
最先进入主存的元素先被淘汰。
最近最少使用算法
查看前面的序列,最后被访问的元素被替换掉
例
初始关键字 |
2 |
4 |
6 |
5 |
3 |
4 |
2 |
最优置换 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
|
|
4 |
4 |
4 |
4 |
4 |
4 |
|
|
|
6 |
5 |
3 |
3 |
3 |
缺页(*) |
* |
* |
* |
* |
* |
|
|
解析:
主存初始添加页2,4,6,直接依次放入即可,但是都会出现缺页现象。
添加页5,主存中没有5,所以会出现缺页现象,根据最优置换的规定,5后面又依次出现了3,4,2所以6被替换掉。
添加页3,主存中没有3,出现缺页现象,3后面出现了4和2,5被替换掉
添加页4,主存中2,4,3包含3,没有缺页现象,不用进行最优置换。
初始关键字 |
2 |
4 |
6 |
5 |
3 |
4 |
2 |
先进先出 |
2 |
2 |
2 |
5 |
2 |
2 |
2 |
|
|
4 |
4 |
4 |
3 |
3 |
3 |
|
|
|
6 |
6 |
6 |
4 |
4 |
缺页(*) |
* |
* |
* |
* |
* |
* |
|
解析:
主存初始添加页2,4,6,直接依次放入即可,但是都会出现缺页现象。
添加页5,主存中没有5,所以会出现缺页现象,根据先进先出的规定,主存中已有页出现顺序为2,4,6,所以2被替换掉
添加页3,主存中没有3,出现缺页现象,主存中已有页出现顺序为4,6,5,所以4被替换掉
添加页4,主存中没有4,出现缺页现象,主存中已有页出现顺序为6,2,3,所以6被替换掉
添加页2,主存中有2,没有缺页现象。
总结:
没有学不会的知识,只有不愿意学的知识。再简单的知识点,不学习不总结,也掌握不好;再难的知识点,只要想学、愿意学、会学,那么也可以掌握。点滴积累吧!