存储管理

本文隶属于分类

互联网

推荐文章

广告推荐

技术交流学习或者有任何问题欢迎加群 : 154514123 爱上编程

分层存储体系:寄存器,cache,内存,磁盘存储。

无存储抽象

这是最简单的存储器抽象,即操作的地址均为物理地址,一旦一个程序装入内存,它将一直在内存中运行直到完成。虽然对于大型计算机、小型计算机、台式计算机、个人PC已经几乎不再使用,但对于嵌入式系统和智能卡系统中还是很常见的,如收音机、洗衣机和微波炉等。

一种存储抽象:地址空间

地址概念举例:
电话号码的地址空间:00000000-99999999
IPv4的地址空间:32位的数字,从02321
互联网域名地址空间:一套“.com”结尾的字符串
给每个程序一个自己的地址空间,使得一个程序中的地址28所对应的物理地址与另一个程序中的地址28所对应的物理地址不同。

基址寄存器和界限寄存器

使用基址寄存器和界限寄存器可以解决地址空间的问题。
基址寄存器中值为16384,界限寄存器中值也为16384,界限寄存器为该程序所需要的地址空间数,则对于JMP 28,硬件自动把这条指令解释为JMP 28+16384,其中28+16384为对应的实际物理地址。

交换技术

用于解决物理内存有限不能保存所有的进程的情况。即把一个进程完整调入内存,使该进程运行一段时间,然后把它存回磁盘,空闲进程主要存储在磁盘上,所以当他们不运行时就不会占用内存。
这里写图片描述
对于交换过程中产生的多个空闲区(也称空洞),通过内存紧缩技术可以将所有的进程往下移动,有可能将这些小的空闲区合成一大块。
如果进程所需要的内存空间允许变化,则采用预留空间的策略来避免频繁的进行交换,浪费宝贵的CPU时间。
这里写图片描述
空闲内存管理:
位图和链表
这里写图片描述
使用位图管理的优缺点:优点是提供了一种简单的利用一块固定大小的内存就能对内存使用情况进行记录的方法,但问题是当决定把一个占k个分配单元的进程调入内存时,存储管理器必须搜索位图,在位图中找出有k个连续0的串,这是一种耗时操作。
使用链表的好处是当进程终止或被换出时其更新非常直接,只需更新链表结点的两个邻居即可,一般双链表比单链表更方便。
有以下四种算法为创建的进程分配内存:
1)首次适配法
直接从链表头开始搜索,直到第一次搜索到满足要求的一块内存;
2)下次适配法
是对首次适配法的修改,每次找到合适的空闲区时都记录当时的位置,以便在下次寻找空区时从上次结束的地方开始搜索,而不是像首次适配法那样每次都从头开始。(性能略低于首次适配法)
3)最佳适配法
搜索整个链表(从开始到结束),找出能够容纳进程的最小空闲区。(会产生大量无用的小空间)
4)最差适配法
总是分配最大的可用空闲区,使新的空闲区比较大从而可以继续使用。
5)为进程和空闲区维护各自对立的链表
增加了复杂度和内存释放变慢

虚拟内存

用于解决软件膨胀的问题,其基本思想是每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称作页或页面,每一页有连续的地址范围,这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序,当程序引用到一部分在物理内存中的地址空间时,由硬件理科执行必要的映射,当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。这种策略很适合在多道程序设计系统中使用,许多程序的片段同时保存在内存中,当一个程序等待它的一部分读入内存时,可以把CPU交给另一个进程使用。

分页技术

这里写图片描述

这里写图片描述

虚拟地址到物理地址的映射:虚拟地址被分成虚拟页号(高位部分)和偏移量(地位部分),虚拟页号可以用作页表的索引,以找到该虚拟页面对应的页表项,由页表项可以找到页框号,然后把页框号拼接到偏移量的高位端,以替换掉虚拟页号,形成送往内存的物理地址。
页表的目的是把虚拟页面映射成页框,从数学角度说,页表是一个函数,它的参数是虚拟页号,结果时物理页框号。
页表项的结构:
这里写图片描述
值得再次强调的是:虚拟内存本质上是用来创造一个新的抽象概念-地址空间,这个概念是对物理内存的抽象,类似于进程是对物理机器(CPU)的抽象。

需要解决的两个问题
1. 虚拟页面到物理地址的映射必须非常快
2. 如果虚拟地址空间很大,页表也会很大

加速分页过程

1)转换检测缓冲区(TLB)
将常用的较少的页表项的虚拟地址直接映射到物理地址,而不必再访问页表,用于加速分页,由硬件完成,通产在MMU中。
这里写图片描述
2)软件管理TLB

针对大内存的页表

1)多级页表
这里写图片描述

2)倒排页表(一般针对64位机)

页面置换算法

1)最优页面置换算法
置换那些经过较长时间才能够访问的页面,一般无法实现
2)最近未使用页面置换算法(NRU)
淘汰那些没有被访问的页面
3)先进先出页面置换算法(FIFO)
维护一个链表,最新进入的页面放在表尾,最久进入的页面放在表头,每次都置换表头的页面
4)第二次机会页面置换算法
对先进先出页面算法的修改,避免了先进先出算法置换那些常用的页面
5)时钟页面置换算法
避免移动链表,将单链表替换成环形链表,并只是单纯的移动链表指针
6)最近最少使用页面置换算法(LRU)
置换未使用时间最长的页面
7)最不常用页面置换算法(NFU)
8)老化算法(aging)
是用软件模拟的LRU
9)工作集页面置换算法
10)工作集时钟页面置换算法
小结:
这里写图片描述

分段

为了避免分页中进程内存增长带来的困扰,每个段构成了一个独立的地址空间,所以它们可以独立的增长或减小而不会影响到其他的段。
这里写图片描述

分段页分页比较

这里写图片描述
分段优点:1)可以帮助处理在执行过程中大小有变化的数据结构,2)能简化连接和共享,3)有利于为不同的段提供不同的保护。

技术交流学习或者有任何问题欢迎加群 : 154514123 爱上编程

广告推荐

讨论区