0%

存储器管理

存储器管理

  • 确保计算机有足够的内存处理数据
  • 确保程序可以从可用内存中获取一部分内存使用
  • 确保程序可以归还使用后的内存以供其他程序使用

分页存储

由于连续分配方式会导致形成许多碎片,而如果总是进行碎片整合进行拼接会有很大的开销,为了解决这个问题,产生了一种离散分配的方式,基本单位是页,称为分页存储管理方式。

该方式是将一个进程的逻辑地址空间分成若干个大小相等的页,为各个页进行编号,同样将物理内存空间分成与页相同大小的若干个存储块,称为物理块(物理块号也叫做页帧号)。以页面为单位把进程空间装进物理内存中分散的物理块

地址结构

这样32位的分页地址的地址结构就是

分页地址结构

分为页号和偏移量,地址长度为32位,其中0~11位为页内地址,即每页的大小为4K;12~32位为页号,地址空间最多允许1M页

16位的分页地址的地址结构就是

16位分页式地址结构

分为页号和偏移量,地址长度为16位,其中0~11位为页内地址,即每页的大小为4K;12~15位为页号,地址空间最多允许16页

逻辑地址 = 页号+页内地址

物理地址 = 页帧号+页内地址

页面大小一般为512B~8K,过大的话难以分配,过小会导致内存碎片过多

优点 利用率高,碎片小,分配及管理简单

缺点 增加了系统开销;可能产生抖动现象(可能会存在某一页经常性的调入调出内存)

页表

为了使得在内存中找到每个页面多对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表,记录页面在内存中对应的物理块号,页表一般存放在内存中。

进程在执行时,通过查找页表来寻找每页在内存中的物理块号

段式存储

将用户程序地址空间分为若干个大小不等的段,每段可以定义一组 相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻存储,段的长度也可以不一样,也实现了离散分配

段表

与分页存储类似,段式存储也需要段表来进行映射

其分为 段号、基址、段长,与页不同的是,每段的大小不等,所以需要加一个段长字段

优点:多道程序共享内存,各段程序修改互不影响

缺点:内存利用率低,内存碎片浪费大

段页式存储

由于分页存储和段式存储都有自己的优缺点,将两者的优点结合起来形成了段页式存储

  • 逻辑空间首先被分为若干个逻辑分段,每段都有自己的段号
  • 再将段内空间分为若干个大小相等的页,主存空间也分为大小相等的页,主存的分配以页为单位

地址结构

32位段页式地址结构

优点:空间浪费小、存储共享容易、存储保护容易、能动态连接

缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降

淘汰顺序

当要访问的页面不在内存中的时候,系统应该首先淘汰未被访问的页面,因为根据程序的局部性原理,最近未被访问的页面下次被访问的概率更小;如果页面最近都被访问过,应该先淘汰未修改过的页面,因为未修改过的页面内存与辅存一致,故淘汰时无须写回辅存,使系统页面置换代价更小。

  • 先看状态位,是否在内存中
  • 再看访问位,为0则直接淘汰
  • 最后看修改位,为0直接淘汰

页面置换算法

  • 最优算法

  • 随机算法

  • 先进先出算法 有可能产生抖动

  • 最近最少使用算法 不会抖动,LRU的理论依据是 局部性原理

    时间局部性:刚被访问的内容,立即又被访问

    空间局部性原理:刚被访问的内容,临近的空间很快被访问

欢迎关注我的其它发布渠道