存储器管理
- 确保计算机有足够的内存处理数据
- 确保程序可以从可用内存中获取一部分内存使用
- 确保程序可以归还使用后的内存以供其他程序使用
分页存储
由于连续分配方式会导致形成许多碎片,而如果总是进行碎片整合进行拼接会有很大的开销,为了解决这个问题,产生了一种离散分配的方式,基本单位是页,称为分页存储管理方式。
该方式是将一个进程的逻辑地址空间分成若干个大小相等的页,为各个页进行编号,同样将物理内存空间分成与页相同大小的若干个存储块,称为物理块(物理块号也叫做页帧号)。以页面为单位把进程空间装进物理内存中分散的物理块
地址结构
这样32位的分页地址的地址结构就是
分为页号和偏移量,地址长度为32位,其中0~11
位为页内地址,即每页的大小为4K;12~32
位为页号,地址空间最多允许1M页
16位的分页地址的地址结构就是
分为页号和偏移量,地址长度为16位,其中0~11
位为页内地址,即每页的大小为4K;12~15
位为页号,地址空间最多允许16页
逻辑地址 = 页号+页内地址
物理地址 = 页帧号+页内地址
页面大小一般为512B~8K,过大的话难以分配,过小会导致内存碎片过多
优点 利用率高,碎片小,分配及管理简单
缺点 增加了系统开销;可能产生抖动现象(可能会存在某一页经常性的调入调出内存)
页表
为了使得在内存中找到每个页面多对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表,记录页面在内存中对应的物理块号,页表一般存放在内存中。
进程在执行时,通过查找页表来寻找每页在内存中的物理块号
段式存储
将用户程序地址空间分为若干个大小不等的段,每段可以定义一组 相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻存储,段的长度也可以不一样,也实现了离散分配
段表
与分页存储类似,段式存储也需要段表来进行映射
其分为 段号、基址、段长,与页不同的是,每段的大小不等,所以需要加一个段长字段
优点:多道程序共享内存,各段程序修改互不影响
缺点:内存利用率低,内存碎片浪费大
段页式存储
由于分页存储和段式存储都有自己的优缺点,将两者的优点结合起来形成了段页式存储
- 逻辑空间首先被分为若干个逻辑分段,每段都有自己的段号
- 再将段内空间分为若干个大小相等的页,主存空间也分为大小相等的页,主存的分配以页为单位
地址结构
优点:空间浪费小、存储共享容易、存储保护容易、能动态连接
缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降
淘汰顺序
当要访问的页面不在内存中的时候,系统应该首先淘汰未被访问的页面,因为根据程序的局部性原理,最近未被访问的页面下次被访问的概率更小;如果页面最近都被访问过,应该先淘汰未修改过的页面,因为未修改过的页面内存与辅存一致,故淘汰时无须写回辅存,使系统页面置换代价更小。
- 先看状态位,是否在内存中
- 再看访问位,为0则直接淘汰
- 最后看修改位,为0直接淘汰
页面置换算法
最优算法
随机算法
先进先出算法 有可能产生抖动
最近最少使用算法 不会抖动,LRU的理论依据是 局部性原理
时间局部性:刚被访问的内容,立即又被访问
空间局部性原理:刚被访问的内容,临近的空间很快被访问