内存管理

分层存储器体系

存储管理器 :操作系中管理分层存储器体系的部分

无存储器抽象

PSW(程序状态字)

IBM 360系统的不用交换运行多个程序

避免绝对物理地址的引用

ing

存储器抽象:地址空间

概念

运行多个程序互相不影响,需要解决两问题:

  • 保护
  • 重定位

基址寄存器与界限寄存器 动态重定位

交换技术

把一个进程完整调入内存,使该进程运行一段时间,再将其写回磁盘

内存紧缩 :将小空闲区合并成一大块

空闲内存管理

  • 使用位图的存储管理

    img

  • 使用链表

  • 首次适配算法

  • 下次适配算法

  • 最佳适配算法

  • 最差适配算法

  • 快速适配算法

虚拟内存

地址空间被分为多块,每块称作 页被映射到物理内存,如果程序引用不存在的物理内存 由操作系统负责将缺失的部分装入物理内存

分页

缺页中断 :当访问的页没有映射到物理内存中时,操作系统会将其他的页写到磁盘,将空出来的内存映射给当前的页, 内存管理单元(MMU) 则是执行这个映射的服务

202032184635

页表

  • 页表项的结构

    • 保护位:允许什么类型的访问(读、写、执行)
    • 修改位:判断页面是否被写过
    • 访问位:判断页面是否被访问过
    • 高速缓存禁止位

加速分页过程

分页系统需要考虑的2个问题:

  • 虚拟地址映射到物理地址必须非常快
  • 如果虚拟地址空间很大,则页表也会很大

转换检测缓冲区(TLB) :小型硬件设备,能直接将虚拟地址映射成物理地址,而无需访问页表(二八定律)

软件TLB管理

软失效与硬失效

针对大内存的页表

  • 多级页表

  • 倒排页表

    地址映射与散列查找

页面置换算法

主要目的 :挑选出最不常使用的页面

WEB服务器文件缓存

  • 最优页面置换算法(OPT, Optimal replacement algorithm)

无法确定哪个页面未来最少被使用 ,该算法只是一种理论算法,无法实现

  • 最近未使用(NRU)页面置换算法

随机淘汰最近一个时钟周期没有访问、没有修改的页面

  • 先进先出页面置换算法(FIFO, First In First Out)

选择换出的页面是最先进入的页面

  • 第二次机会页面置换算法

淘汰掉一个进入时间最长,且最久未被使用的页面

  • 时钟页面置换算法

使用一个指针指向最老的页面

202032185224

  • 最近最少使用(LRU)页面置换算法

在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的

  • 工作集页面置换算法

工作集 :进程当前正在使用的页面集合 淘汰掉工作集中最少使用的页面

  • 工作集时钟页面置换算法

用软件模拟LRU

最不常使用(NFU) 会记住最近一段时间内各个时钟周期的访问情况

分页系统中的设计问题

局部分配策略与全局分配策略

缺页中断率(PFF) :用来指出何时增加或减少分配给进程的页面

负载控制

将进程从内存交换到磁盘

页面大小

  • 选择小页面的好处:节省内存

分离的指令空间和数据空间

共享页面

如果地址空间分离实现共享页面就会非常简单 写时复制

共享库

位置无关代码 :只使用相对偏移量的代码

内存映射文件

把文件当做成一个内存中的大字符数组

清除策略

分页守护进程

虚拟内存接口

分布式共享内存

有关实现的问题

  • 与分页有关的工作

    • 创建一个新进程时:确定程序和数据大小,创建一个页表
    • 进程执行时:重置MMU,刷新TLB,清除之前进程的痕迹
    • 缺页中断时:确定是哪个虚拟地址发生了中断,读入所需页面,重新执行指令
    • 进程退出时:释放页表、页面
  • 缺页中断处理

  • 指令备份 重启引起缺页中断的那条指令,这不是一件容易的事

  • 锁定内存中的页面 锁住正在做IO操作的内存中的页面保证它不会被移出内存

  • 后备存储 linux中的swap

  • 策略与机制分离

    • MMU
    • 缺页中断处理程序
    • 页面调度程序

分段

表碰撞 :动态增长的表会导致覆盖的问题

202032185558

纯分段的实现

段页式

程序的地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能

分段和分页结合:MULTICS

段(段号,段内地址(页号,偏移地址))

分段和分页结合:Intel x86

LDT与GDT 线性地址(目录,页面,偏移量)

分页与分段

对比 分页 分段
透明性 对程序员透明 需要程序员显示划分每个段
地址空间维度 一维地址 二维地址
大小可否改变 页大小不可改变 段大小可以动态改变
出现原因 分页用来实现虚拟内存,以获得更大的地址空间 分段是为了独立程序和数据并且有助于共享与保护

results matching " "

No results matching " "

results matching " "

No results matching " "