首页 > 代码库 > 操作系统知识梳理3-存储管理

操作系统知识梳理3-存储管理

1. 单道程序存储管理
  存储器系统的层次结构:register, cache, DRAM, 外部存储器
  分为系统区和用户区;
  优点:简单、开销小、易于管理;适用于单用户、单任务的OS;
  劣:每次1个程序;浪费内存;应用程序的bug影响OS
2. 多道程序内存管理

  2.1 固定分区存储管理
  分为系统区和用户区;用户区分成多个小区,每个进程1个区;
  用户分区的大小、位置都是固定的;多个小分区,适量的中等分区,少量的大分区;
  数据结构:设置内存分配表,分区号、起始地址、长度、状态、进程名
  内存分配:最先匹配法,最佳匹配法
  固定分区的缺点:内碎片,限制了程序的数目;

  2.2 可变分区存储管理
  特点:动态变化、无内碎片、有外碎片
  数据结构:分区链表,状态、起始地址、大小
  分区匹配算法:最先匹配法、下次匹配法、最佳匹配法、最坏匹配法
  分区回收算法:进程结束内存回收时,有空闲内存的合并;
  程序的内存分布,从低地址到高地址依次为:代码段、数据段、动态堆空间、栈
  地址映射:
    物理地址:内存地址、绝对地址,直接寻址
    逻辑地址:相对地址、虚地址
    静态地址映射:直接修改指令代码,一次性将逻辑地址改为物理地址;
    动态地址映射:程序运行过程中,对指令进行一一地址映射;
    由硬件地址映射机制完成,采用一个基址寄存器;
  存储保护:采用一个限长寄存器
  CPU将虚拟地址发给MMU,MMU检查逻辑地址和限长寄存器的值的大小,如果可以访存,则访问,否则抛出访存异常;
  劣势:导致内碎片和外碎片;

  2.3 页式存储管理
  将物理内存分成多个物理页面,逻辑地址分为大小相同的页面;页面大小为2^n,一般在512k~8k字节之间;程序装入内存时,以页面为单位进行分配;装载同一个程序的页面不必是连续的;
  页表:系统为每个进程建立页表,给出了逻辑页面号和具体内存页面号的对应关系;
  物理页面表:内存共256个页面,可以用256个位示图表示+一个空闲页面数;空闲页面链表;
  内存分配(位示图):计算页面数N;分配页表;分配物理页面;修改位示图;
  内存回收:将位示图由0-1;修改空闲页面数
  逻辑地址划分:高位表示页号,低位表示页内地址;
  页表实现
    两个regs: 一个page-table base register, PTBR, 一个page-table length register PTLR,
    采用TLB translation lookaside buffer实现地址翻译;
  优点:无内碎片,外碎片小于页大小;程序不必连续;便于管理;
  缺点:程序必须全部装入内存;必须为每个进程维护一个页表;

  2.4 段式存储管理
  程序分为几个段(数据段、代码段、栈等);
  物理内存采用可变分区的管理方法;
  程序装入内存时,以段为单位进行分配,把每个段装入一个内存分区中;
  虚拟地址分为两部分:高位为段号,低位为段内偏移;
  段表:系统为每个进程维护一个段表;
  段表的实现:
    两个regs: 一个segment-table base register, STBR, 一个segment-table length register, STLR
    地址转换:虚拟地址,段号--段表中的起始地址--物理地址
  优点:按段进行共享;程序不必连续存放;
  缺点:程序必须全部、外碎片;

  2.5 段页式存储管理
    先把程序划分为段,然后在段内进行分页;内存的划分和分配按页式存储管理方案进行;
    段表:记录了每个段的页表起始地址和页表长度,而不是该段所在内存分区的起始地址。
    页表:记录了逻辑页面号与物理页面号之间的对应关系。(每一段有一个,一个程序可能有多个页表)
    需要的硬件支持:段表基地址寄存器(STBR)和段表长度寄存器(STLR)

  2.6 虚拟存储技术
  程序的局部性原理:TLB,Cache
  内存物理页面称为page frame, 磁盘上的是backing frame
  页表表项:逻辑页号、物理页号、驻留位(页是否在内存中)、保护位、修改位(是否被修改过)、访问位
  当访问的逻辑页面不存在时,出发缺页中断:
    如果有空闲的物理页面,直接分配,设置f;
    如果没有,采用页面置换技术,将被替换的页面f1,如果修改过写回到外存;
    对f1对应的页表项进行修改;
    将需要访问的页面p装入到物理页面中,修改p的表项,驻留位和物理页面号
    重新运行被中断的指令(PC不变)
  用户进程感觉不到缺页中断
  页面置换算法:尽可能地减少页面的换进换出的次数
    最优页面置换算法:(需要知道接下来要访问的页表)
      计算每个页面再次被访问的等待时间,选择等的时间最长的页面进行替换;
    最近最久未被访问算法:LRU, least recently used
    最不常用算法:leat frequently used, LFU
    先进先出算法:FIFO, first-in first-out,替换驻留时间最长的页面
    始终页面置换算法Clock: 基本思路FIFO + 跳过访问过的页面

4. 工作集模型
  工作集:当前时刻t前边delta窗口内的页面集合
  驻留集:当前时刻,进程驻留在内存中的页面集合
  工作集是进程运行过程中的性质,驻留集取决于系统分配给进程的物理页面数目,及采用的页面置换算法。

5. 虚拟页式的设计问题
  5.1 页面的分配策略
  固定分配策略:驻留集大小固定;局部置换的方式;
  可变分配策略:驻留集大小可变;开始时分配一定数目的物理页面,运行过程中动态调整驻留集的大小
  可采用全局的页面置换算法,性能较好,增加了系统开销
  可采用缺页率算法PFF, page-fault frequency来动态调整驻留集的大小
  缺页率:缺页次数/内存访问次数

  5.2 页表结构
  多级页表

6. 虚拟段式存储管理

操作系统知识梳理3-存储管理