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. 虚拟段式存储管理
原文地址:http://www.cnblogs.com/zhang123shuo/p/3980848.html