第三章内存用于在计算机运行时临时存储CPU需要处理的数据和程序指令逻辑地址也称为虚拟地址是程序在运行时所看到和使用的地址物理地址实地址是数据在物理内存硬件上真实存储的地址如何将指令中的逻辑地址转换为物理地址装入方式绝对装入程序在编译时其在内存中的物理地址就已经被完全确定只适用于单道程序环境灵活性差可重定位装入程序经过编译链接后生成的可执行文件装入模块中的地址都是从0开始的逻辑地址当操作系统决定将该程序装入内存时它会寻找一块足够大的空闲内存区域。假设程序被装入到起始物理地址为x的位置那么装入程序会扫描整个程序将所有指令和数据中的逻辑地址都加上一个偏移量x将其修改为最终的物理地址。地址装换完成后程序便在内存中驻留及执行。优缺点支持多道程序运行期间不可移动所有地址在装入时固定必须连续分配内存无法动态扩展动态重定位将逻辑地址到物理地址的转换推迟到程序真正执行时在每次访问内存的瞬间才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。重定位寄存器存放的是进程的起始物理地址优缺点支持程序在内存中移动支持非连续内存分配便于程序段共享支持虚拟内存需要硬件支持存在运行时开销3.1内存管理概念操作系统作为系统资源的管理者需要对内存进行管理具体管的内容为操作系统负责内存空间的分配和回收操作系统需要提供某种技术从逻辑上对内存空间进行扩充操作系统需要提供地址转换功能负责程序的逻辑地址和物理地址的转换操作系统需要提供内存保护功能保证进程在自己的内存空间内运行不会越界访问3.2进程的内存映像内存覆盖技术3.3基本分页存储管理分页存储操作系统将进程的逻辑地址空间划分为大小相等的页同时将物理内存划分为大小相等的页框并通过页表将页映射到任意页框中的一种内存管理方式。操作系统为每个进程建立一张页表页表存储在PCB中每个页表项占多少字节基本地址变换机构基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址的硬件机制。核心部件包括页表寄存器MMU页表地址变换过程分割逻辑地址将CPU产生的逻辑地址分为页号P和页内偏移W检查页号合法性将页号P与页表寄存器中的页表长度比较访问页表根据页表寄存器中的页表起始地址找到该进程的页表然后用页号P作作为索引找到对应的物理块号F即页框号计算物理地址物理地址F×页大小偏移量W访问内存MMU按计算出的物理地址去读内存单元具有快表的地址变换机构快表又称联想寄存器TLB是一种访问速度比内存快很多的高速缓存用来存放最近访问的页表项的副本可以加快地址变换的速度。慢表内存中的页表快表地址变换机构可以提高查询速度的原理时间局部性如果执行了程序中的某条指令那么不久后这条指令就很可能再次被执行如果某个数据被访问过不久之后该数据很可能再次被访问。因为程序中存在大量的循环空间局部性一旦程序访问了某个存储单元在不久之后其附近的存储单元也很有可能被访问。因为很多数据在内存中都是连续存放的两级页表当单级页表很大需要占用很多个连续的页框时。我们可以使用两级页表3.4分段式存储管理分段式存储管理是将用户的逻辑地址空间按程序自身的逻辑结构划分为若干个大小可变的段每段拥有一段连续的地址空间并且段与段之间可以离散地放入内存中。段表记录每一段在物理内存中的基址和段长。段式地址变换机构包括段表基址寄存器和段表长度寄存器地址转换过程CPU生成逻辑地址段号和段内偏移比较段号s和段表长度寄存器中的段表长度是否越界根据段表基址寄存器和段号找到段表中对应项取出段的物理基址和段长检查段内偏移是否越界计算物理地址优点无内部碎片易于动态分配缺点产生外部碎片内存分配效率低段表占用内存硬件支持复杂3.5段页式管理方式基本思想逻辑地址空间按照用户逻辑划分为若干段将每一段进一步划分为固定大小的页把页分配到物理内存中不连续的页框中内存管理段之间的离散消除了外部碎片仅存在少量页内碎片。段页式系统的逻辑地址结构由段号、页号、页内地址组成段页式地址管理是二维的地址转换需要寄存器段表基址寄存器和段表长度寄存器3.6虚拟内存虚拟内存是一种内存管理技术它使每个进程认为自己拥有一个连续、完整的地址空间而实际物理内存可能只加载了部分内容且位置可以分散。虚拟内存允许程序部分装入即可运行。虚拟内存的主要功能地址空间扩展内存保护内存共享按需调页3.7请求分页管理请求分页允许进程只装入少数必要页面就启动运行过程中通过缺页异常动态调入缺失的页面。请求分页存储管理的页表组成页号、内存块号、状态位、访问字段、修改位、外存地址缺页中断程序访问一个尚未加载到物理内存中的虚拟内存页时由CPU的内存管理单元MMU触发的硬件中断。页面置换在发生缺页中断时若物理内存已满操作系统必须选择一个当前驻留在内存中的页面将其换出若页面被修改写回磁盘为新页面腾出空间。缺页异常机制当CPU访问存在位0的虚拟地址时MMU触发一个缺页中断操作系统接管并处理。请求分页的地址转换CPU生成逻辑地址查找TLBTLB命中得到物理块号访问内存TLB未命中到进程页表中查找检查页表项中的存在位存在位1计算物理地址访问内存并将该页表项装入TLB存在位0缺页异常转入操作系统内核。缺页异常处理1、判断虚拟地址是否合法。 2、查找空闲页框若没有空闲页框执行页面置换算法选择一个页框调出。 3、将所需页面从磁盘读入空闲页框。 4、更新存在位1修改位0访问位0填写物理块号。 5、重新执行引发缺页的指令恢复正常运行。3.8页面置换算法最佳置换算法OPT选择最长时间不再使用的页面换出。先进先出算法FIFO选择最早进入内存的页面换出。实现简单性能差出现belady异常分配页框增多缺页率反而上升。最近最久未使用置换算法LRU选择最长时间未访问的页面换出。性能好但需要硬件维护访问时间或访问次序成本较高时钟算法CLOCKNRU页框组织成环形通过指针扫描访问位1则清0并跳过访问位0则换出。利用页表项的访问位页面分配策略驻留集指请求分页存储管理中给进程分配的物理块集合。固定分配操作系统为每个进程分配一组固定数目的物理块在进程运行期间不再改变。即驻留集大小不变。可变分配先为每个进程分配一定数目的物理块在进程运行期间可根据情况做适当的增加或减少。局部置换发生缺页时只能选进程自己的物理块进行置换。全局置换可以将操作系统保留的空闲物理块分配给缺页进程也可以将别的进程持有的物理块置换到外存再分配给缺页进程。从何处调入页面外存磁盘分有对换区和文件区系统拥有足够的对换区空间页面的调入、调出都是在内存与对换区之间进行这样可以保证页面的调入、调出速度很快。在进程运行前需将进程相关的数据从文件区复制到对换区。抖动当系统内存不足进程频繁缺页导致CPU大部分时间等待磁盘I/O系统吞吐量急剧下降的现象。原因是分配的物理页框数少于进程的工作集。工作集在某段时间间隔里进程实际访问页面的集合。3.9内存映射文件内存映射文件是一种将磁盘文件的内容直接映射到进程的虚拟地址空间的技术使应用程序可以像访问普通内存一样通过指针来读写文件而无需使用传统的read/write系统调用。内存映射文件基于虚拟内存的请求分页机制实现映射建立操作系统在进程虚拟地址空间中分配一段区域并记录该区域对应的磁盘文件。按需调页当进程首次访问映射区域内的某个地址时CPU发生缺页异常操作系统从磁盘文件中将对应的数据页读入物理内存并建立虚拟页到物理页框的映射。写操作修改内存页时该页会被标记为脏页。脏页最终会写回磁盘。文件共享多个进程映射同一文件时可以共享相同的物理页框从而实现高效进程间通信和共享数据。参考王道操作系统