目录
一、进程运行的基本知识
1.三种基本概念:编译(高级语言翻译机器语言)、链接(生成装入模块形成完整逻辑地址)、装入(装入内存形成物理地址);
2.三种链接方式:静态链接(装入前链接)、装入时动态链接(运行前边装入边链接)、运行时动态链接(运行时需要才装入并链接) 目的:确定完整的逻辑地址;
3.三种装入方式:绝对装入(编译时产生绝对地址,单道程序环境)、静态重定位(装入时将逻辑地址转化为物理地址,多道批处理操作系统)、动态重定位(运行时将逻辑地址转化为物理地址,需要设置定位寄存器,现代操作系统) 目的:确定最终的物理地址;
二、内存管理的概念
2.1、内存空间的分配与回收
2.1.1、连续分配管理方式:单一连续分配(内存分为系统区和用户区,只能有一道用户程序)(无外部碎片,有内部碎片)、固 定分区分配(将整个用户空间划分若干个固定大小的分区,分区大小可相等也可不相等,每个分区只能装入一道作业,分区说明表进行管理)(无外部碎片,有内部碎片)、动态分区分配(根据进程的大小动态地建立分区,使用空闲分区表或空闲分区链进行管理,动态分区算法选择合适的空闲分区分配)(有外部碎片,无内部碎片)
补充:内部碎片(已分配),分配给某进程的内存区域中,而之有些部分没有用上;
外部碎片(未分配),内存中某些空闲分区由于太小而难以利用。
2.1.2、动态分区分配算法:首次适应算法(按地址递增次序排列,依次查找)(综合性能最好);最佳适应算法(按容量大小递增次序排列,依次查找,优先使用容量小的);最坏适应算法(首次适应演变而来,按容量大小递减次序排列,依次查找,优先使用容量大的);邻近适应算法(按地址递增次序排列,从上次查找结束开始的位置依次查找)
2.1.3、非连续分配管理方式:基本分页存储管理;基本分段存储管理;段页式存储管理
基本分页存储管理
补充:页框=页帧=内存块=物理块=物理页面(内存分区);页=页面(进程逻辑地址空间分区);页面和页框一一对应(页表,页表项由“页号”和“块号”组成,页号不占用内存空间)
基本地址变换机构:将逻辑地址转化为物理地址(根据逻辑地址算出页号和页内偏移量-->检查页号是否合法,应小于页表长度-->根据页表起始地址和页号找到对应页表项-->根据页表项中记录的块号和页内偏移量得到物理地址-->访问物理内存单元)。
具有快表(TLB)的地址变换机构:(根据逻辑地址算出页号和页内偏移量-->检查页号是否合法,应小于页表长度-->查快表,若命中则跳过根据页表起始地址和页号找到对应页表项-->根据页表项中记录的块号和页内偏移量得到物理地址-->访问物理内存单元)。
TLB和普通Cache的区别:TLB中只有页表项的副本,而普通Cache中可能会有其他各种数据的副本。
页表长度是指这个页表中总共有几个页表项,即总共有几个页;页表项长度是指每个页表项占多大的存储空间;页面大小是指一个页面占多大的存储空间。
注意:当页表过大需要很大的连续空间时,可以使用多级页表的方法,但多级页表不使用TLB时N级页表访问一个逻辑地址需要N+1次访存
基本分段存储管理
进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每段有段名且每段从0开始编址;
逻辑地址结构:段号和段内地址(段内偏移量);
内存分配规则:以段为单位进行分配,每个段在内存中占据连续的空间,各段不相邻 ;
段表中的段表项由段号(隐含的,不占存储空间)、段长、基地址组成;
与页表地址转换的不同之处在于增加了还要根据段表中记录的段长来检查段内地址是否越界
分段与分页的区别:分页对用户不可见,分段可见;分页的逻辑地址结构是一维的(偏移量),分段是二维的(段名+偏移量);分段更容易实现信息的共存和保护
段页式存储管理
将进程按逻辑模块分段后再将每个段分页,不会产生外部碎片,只会产生少量内部碎片;
逻辑地址结构(二维):段号、页号、页内偏移地址 + 页号、页面存放的块号;
地址变换:由逻辑地址得到短号、页号、页内偏移量-->段号与段表寄存器中的段长度比较,检查是否越界-->由段表始址、段号找到对应段表项-->根据段表中记录的页表长度,检查页号是否越界-->由段表中的页表地址、页号查询页表项-->由块号和页内偏移得到物理地址-->访问目标单元;
3次访存:查段表、查页表、访问目标单元--------->设置快表,命中则仅需一次访存。
2.2、内存空间的扩充:覆盖技术;交换技术;虚拟存储技术
覆盖技术包含一个固定区(区内程序段在运行过程中不会调入调出)和若干覆盖区(区内程序段在运行过程中需要调入和调出),对用户不透明增加用户编程负担,是在同一个程序或者进程中进行的;
交换技术是内存紧张时,换出某些进程以腾出内存空间,再换入某些进程,而外存磁盘分为文件区和对换区,换出的进程放在对换区,是在不同进程(或作业)之间的;
虚拟存储技术详见下述三、虚拟内存管理。
2.3、地址转换:绝对装入;可重定位装入;动态运行时装入
详细请见上述一、进程运行的基本知识 3.的三种装入方式。
2.4、内存保护(保证各进程在各自的存储空间内运行,互不干扰):设置上下限寄存器(起始物理地址和终止物理地址);利用重定位寄存器(起始物理地址)、界地址寄存器(最大逻辑地址)。
三、虚拟内存管理
1.虚拟内存使用的原理:局部性原理
时间局部性:现在访问的指令和数据在不久后会被访问
空间局部性:现在访问的内存单元周围的内存空间,很可能在不久后会被访问
高速缓存技术:使用频繁的数据放到更高速的存储器中
2.虚拟内存的定义:程序不需要全部装入即可运行,运行时动态调入,若内存不够则进行置换
3.虚拟内存的特征
多次性:无需在作业运行时一次性全部装入内存,而是允许被分为多次调入内存
对换性:无需在作业运行时一直常驻内存,而是允许在作业运行过程中,将作业换入和换出
虚拟性:逻辑上扩充内存容量,用户看到的内存容量远大于实际容量
4.虚拟内存技术的实现:请求分页存储管理;请求分段存储管理;请求段页式存储管理
请求分页管理方式
两个重要功能(基于基本分页存储管理上增加):请求调页(页面缺失时)、页面置换(内存不够)
请求页表项:页号、内存块号、状态位(是否已调入内存)、访问字段(最近访问次数)、修改位(调入内存后是否被修改)、外存地址(页面在外存存放位置)
缺页中断机制:找到页表项后检查页面是否已在内存,若没在内存,产生缺页中断-->缺页中断处理中,进行页面的跳入,必要时还需进行置换-->一条指令可能会产生多次缺页中断
地址变换:找到页表项后页面不在内存时还需使用缺页中断机制,页面调入内存后还要修改对应的页表项
页面置换算法:最佳置换算法(OPT)----->预知以后访问页面序列,置换最长时间内不被访问的页面,理想化算法;先进先出置换算法(FIFO)-------->置换最早进入内存的页面,具有Belady异常;最近最久未使用置换算法(LRU)------->置换最近最久未适应的页面;时钟置换算法(最近未用算法NRU)------>循环扫描各页面,第一轮淘汰访问位=0的,并将扫描过的页面访问位改为1,若均为1,扫描后置为0,则第一轮后均为0,进行第二轮扫描;改进型的时钟置换算法-------->(访问位,修改位)第一轮:淘汰(0,0),第二轮淘汰(0,1)并将扫描过的页面访问位置为0,第三轮淘汰(0,0),第四轮淘汰(0,1)
补充:Belady异常:当为进程分配的物理块数增大时,缺页次数不减反增的异常现象
页面分配策略
驻留集:是指请求分页存储管理中给进程分配的物理块的集合(即是系统给进程分配的物理块数)
固定分配局部置换:进程运行前就分配号驻留集,缺页时只能换出进程自己的某一页
可变分配全局置换:只要缺页就分配新的物理块,可能来自空闲物理块,也可能需换出别的进程页面
可变分配局部置换:根据发生缺页的频率来动态地增加或减少进程的物理块
何时调入页面:预调页策略(运行前);请求调页策略(运行时)
何处调用页面:UNIX方式:第一次使用的页面都从文件区调入,调出的页面都写回对换区,再次使用时从对换区调入
抖动(颠簸)现象:由于分配给进程的物理块不够导致,刚刚换出的页面马上又换入主存,刚刚换入的页面马上就要换出主存------>如果是因为页面替换策略失误,可以修改替换算法来解决这个问题;如果是因为运行的程序太多,造成程序无法同时将所有频繁访问的页面调入内存,则要降低多道程序的数量;否则终止该进程或者增加驻留集大小
工作集:是指在某段时间间隔里,进程实际访问页面的集合(驻留集大小一般不小于工作集大小来防止抖动现象)