还剩35页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
虚拟内存管理技术虚拟内存管理技术是现代操作系统的核心组成部分,它通过巧妙的地址映射机制,使程序能够使用超过物理内存容量的地址空间这项技术不仅解决了内存容量限制的问题,还为多任务处理和内存保护提供了强有力的支持本课程将深入探讨虚拟内存的基本原理、管理机制、调度算法以及性能优化策略我们将从理论基础出发,结合实际应用案例,全面理解这项改变计算机发展历程的重要技术通过学习,您将掌握虚拟内存管理的精髓,为深入理解操作系统奠定坚实基础课程目录123基本原理管理机制调度与置换算法虚拟内存的核心概念、地址空间页式、段式和段页式结合的内存需求分页机制、缺页中断处理流映射机制以及技术发展历程,为管理技术,以及页表结构和地址程,以及各种页面置换算法的原后续深入学习奠定理论基础转换的具体实现方法理和性能比较45性能优化发展趋势快表技术、内存保护机制、写时复制技术以及实际系现代虚拟内存技术的新发展,包括超大页支持、持久统中的性能调优策略和方法性内存以及未来发展方向虚拟内存概念逻辑地址空间程序运行时使用的地址空间,独立于物理内存的实际容量和布局容量突破允许程序使用超过物理内存大小的地址空间,理论上可达到处理器位数限制地址隔离每个进程拥有独立的虚拟地址空间,确保进程间的内存访问隔离和安全虚拟内存是计算机系统中的一项重要抽象技术,它为每个程序提供了一个独立的、连续的地址空间视图这个地址空间的大小由处理器的位数决定,在32位系统中可达4GB,在64位系统中则几乎无限大通过这种抽象,程序无需关心物理内存的实际分布和容量限制,可以自由地进行内存分配和访问虚拟内存的基本思想按需调入程序运行时只加载当前需要的页面部分驻留进程执行时仅需部分数据在物理内存动态管理根据程序行为动态调整内存分配虚拟内存的核心思想是按需分页(demand paging),即程序运行时只将当前需要的页面加载到物理内存中,而不是一次性加载整个程序这种策略基于程序执行的局部性原理,大多数程序在任何时刻只会访问其地址空间的一小部分当程序访问不在物理内存中的页面时,系统会产生缺页中断,然后从外存中调入所需页面这种机制不仅减少了内存压力,还使得多个大型程序能够同时运行,大大提高了系统的多任务处理能力和整体性能虚拟与物理地址空间虚拟地址空间物理地址空间程序员看到的连续、统一的地址空间,从0开始编址每个实际的RAM内存地址,反映内存条的真实布局物理地址空进程都有独立的虚拟地址空间,互不干扰虚拟地址由CPU间是所有进程共享的资源,需要操作系统进行统一管理和分中的内存管理单元(MMU)负责转换为物理地址配虚拟地址通常分为页号和页内偏移两部分,页号用于定位页地址转换机制确保虚拟地址到物理地址的正确映射,同时提表项,页内偏移确定页面内的具体位置供内存保护和访问控制功能,防止非法内存访问虚拟内存的优势编程灵活性多任务支持程序员无需考虑物理内存限制,可以多个程序可以同时运行,每个都认为使用大型数据结构和算法自己拥有完整的地址空间内存利用率安全隔离通过页面共享和按需加载,显著提高进程间内存完全隔离,一个进程无法了物理内存的使用效率直接访问另一个进程的内存历史与发展11960年代虚拟内存首次在IBM System/360等大型机上引入,解决了当时昂贵内存的容量限制问题21970-80年代小型机和工作站开始广泛采用虚拟内存技术,DEC VAX系列成为代表性产品31990年代至今现代操作系统如Windows、Linux、macOS等都将虚拟内存作为标准配置,技术日趋成熟虚拟内存技术的发展经历了从大型机到个人计算机的演进过程早期的实现主要解决内存稀缺问题,而现代实现则更注重性能优化、安全性和对新硬件特性的支持随着内存容量的增长和处理器性能的提升,虚拟内存管理策略也在不断演进和完善虚拟内存体系结构用户空间内核空间应用程序运行的地址空间区操作系统内核专用的地址空间域,通常占据虚拟地址空间的区域,包含内核代码、数据结大部分用户程序只能访问用构和设备驱动程序内核空间户空间,无法直接访问内核空通常映射到物理内存的高地址间,确保了系统的安全性和稳区域,具有最高的访问权限定性地址空间布局典型的虚拟地址空间布局包括代码段、数据段、堆、栈等不同区域每个区域都有特定的用途和访问权限,通过内存管理单元进行保护和管理内存管理的基本技术分页分段分区管理现代虚拟内存管理的基础技术,将地址空连续分配将内存划分为若干个固定或可变大小的分间划分为固定大小的页面或逻辑相关的早期的内存管理方式,为每个程序分配连区,每个分区分配给一个程序使用这种段这些技术解决了碎片问题,并为虚拟续的物理内存空间虽然简单易实现,但方式改善了内存利用率,但仍然存在内部内存管理奠定了基础存在内存碎片和地址重定位问题,难以支碎片和外部碎片问题持大型程序和多任务环境分页存储管理页表映射建立虚拟页号到物理页框号的映射关系地址分解虚拟地址分为页号和页内偏移两部分页面管理将虚拟和物理地址空间划分为固定大小的页面分页存储管理是虚拟内存的核心实现技术它将虚拟地址空间和物理内存都划分为相同大小的页面,通常为4KB虚拟地址由页号和页内偏移组成,通过页表完成地址转换页表记录了每个虚拟页面对应的物理页框号以及相关的控制信息,如有效位、保护位等这种设计消除了外部碎片,简化了内存分配和回收过程段式存储管理逻辑模块划分根据程序的逻辑结构划分段独立映射每个段独立进行地址映射段级保护为每个段设置不同的访问权限段式存储管理按照程序的逻辑结构将地址空间划分为若干个段,如代码段、数据段、栈段等每个段都有独立的逻辑意义和访问属性,可以设置不同的保护权限段的大小是可变的,更符合程序的自然结构段式管理通过段表记录每个段的基地址、长度和访问权限等信息虽然这种方式更接近程序员的思维模式,但会产生外部碎片,且段的大小限制可能影响程序设计的灵活性段页式结合机制段表查询页表定位首先通过段号在段表中查找段信息找到该段对应的页表起始地址地址计算页框查找结合页内偏移计算最终物理地址在页表中查找页号对应的物理页框段页式结合机制综合了分段和分页的优点,既保持了程序的逻辑结构清晰,又解决了外部碎片问题在这种机制中,程序首先被划分为若干个段,然后每个段再被分为固定大小的页面地址转换需要经过两级映射先通过段表找到页表,再通过页表找到物理页框异地执行与映像32绑定时机映射层次编译时、装入时、运行时三种地址绑定方式逻辑地址到虚拟地址,虚拟地址到物理地址1统一视图所有程序共享统一的虚拟地址空间布局异地执行是指程序可以在不同的物理内存位置运行,而无需修改其代码这通过动态地址绑定技术实现,程序中的地址在运行时才被确定虚拟内存系统提供了一个统一的地址视图,使得程序总是从相同的虚拟地址开始执行地址映射表维护了逻辑地址与物理地址之间的对应关系当程序被重新装入不同的物理位置时,只需更新映射表,而程序本身无需任何修改这种机制极大地提高了系统的灵活性和内存利用效率虚拟内存实现方式页式虚拟内存段式虚拟内存混合虚拟内存基于固定大小页面的虚拟内存实现,基于逻辑段的虚拟内存实现,段的大结合页式和段式的优点,先分段再分是目前最常用的方式页面大小通常小可变,更符合程序结构每个段有页提供了良好的逻辑结构支持和内为4KB,地址转换通过页表完成这独立的基地址和长度,支持细粒度的存利用率,但地址转换过程较复杂,种方式实现简单,硬件支持良好,但访问控制,但会产生外部碎片需要两级映射可能存在内部碎片•可变段大小•两级映射•固定页面大小•逻辑分割•结构清晰•页表映射•灵活保护•高效利用•无外部碎片页表结构概述有效位(Valid Bit)标识该页面是否在物理内存中当有效位为0时,访问该页面将产生缺页中断,触发页面调入过程页框号(Frame Number)指向该虚拟页面对应的物理页框结合页内偏移可以计算出完整的物理地址保护位(Protection Bits)控制对该页面的访问权限,包括读、写、执行权限以及用户/内核访问控制引用位和修改位记录页面的访问和修改历史,为页面置换算法提供决策依据多级页表机制一级页表虚拟地址的高位部分索引一级页表•包含二级页表的物理地址•大大减少页表占用的内存空间二级页表虚拟地址的中位部分索引二级页表•包含实际的页框号信息•只为需要的虚拟页面创建页表项物理地址结合页内偏移得到最终物理地址•完成虚拟到物理地址的转换•支持大规模虚拟地址空间多级页表解决了单级页表占用内存过多的问题在64位系统中,如果使用单级页表,仅页表就可能占用数TB的内存空间通过多级页表,只为实际使用的虚拟页面分配页表项,大大节省了内存开销现代处理器通常支持三级或四级页表结构反向页表与关联管理反向页表原理哈希查找机制反向页表为每个物理页框建立由于反向页表的查找是逆向一个表项,而不是为每个虚拟的,需要通过哈希表或关联存页面建立表项表项中记录了储器来加速查找过程哈希函当前占用该物理页框的进程ID数将虚拟地址映射到反向页表和虚拟页号,大大减少了页表的索引,提高了地址转换的效的存储开销率适用场景反向页表特别适合于超大虚拟地址空间的系统,如64位处理器系统它有效解决了传统页表在大地址空间下的存储开销问题,但查找过程相对复杂请求调页(需求分页)机制程序启动程序开始执行时,只装入必要的代码页面,如程序入口点附近的页面大部分页面保持在外存中,等待按需调入正常执行程序运行过程中访问已在内存中的页面,CPU可以直接进行地址转换和内存访问,无需额外开销缺页发生当程序访问不在内存中的页面时,MMU检测到页表项的有效位为0,立即产生缺页中断页面调入操作系统响应缺页中断,从外存中调入所需页面,更新页表,然后恢复程序执行预取调页空间局部性时间局部性基于程序访问相邻内存的趋势利用程序重复访问的特性•预取相邻页面•分析访问模式•减少未来缺页•预测未来需求成本控制性能提升平衡预取收益和开销减少程序等待时间•避免过度预取•重叠IO操作•智能预测算法•提高执行效率缺页中断流程异常检测MMU检测到访问无效页面,产生缺页异常•保存程序执行现场•转入内核态处理页面定位操作系统查找所需页面在外存中的位置•检查页面交换区•确定读取地址内存分配为新页面分配物理页框,必要时进行页面置换•选择空闲页框•执行置换算法恢复执行更新页表,恢复程序执行•设置页表项•重新执行中断指令缺页中断处理是虚拟内存管理的核心机制整个过程对用户程序是透明的,程序无需了解页面是否在内存中操作系统负责处理所有的细节,包括页面的调入、内存分配和页表更新,确保程序能够正常继续执行页面置换的必要性空间不足物理内存容量有限,需要腾出空间动态需求程序运行时内存需求不断变化效率优化保留最有用的页面在内存中当物理内存已满而需要调入新页面时,必须先移出一些现有页面以腾出空间页面置换算法的选择直接影响系统性能,好的算法能够减少缺页次数,而差的算法可能导致频繁的页面调换,严重影响系统效率置换策略的核心目标是预测哪些页面在未来最不可能被访问,从而选择它们作为置换对象不同的应用场景和访问模式需要不同的置换策略,现代操作系统通常采用多种算法的组合来应对复杂的实际情况置换算法分类最优置换(OPT)先进先出(FIFO)最近最少使用(LRU)理论上的最佳算法,选择未选择最早进入内存的页面进基于局部性原理,选择最近来最长时间不会被访问的页行置换实现简单,但可能最久未被访问的页面置换面进行置换虽然无法实际出现Belady异常现象,即增性能良好但实现开销较大,实现,但为其他算法提供了加页框数量反而导致缺页率需要维护页面访问的时间信性能比较的基准上升息时钟算法(CLOCK)LRU的近似实现,使用环形队列和引用位来模拟LRU行为实现效率高,是实际系统中常用的算法最优置换()OPT算法原理实现困难最优置换算法是一种理论上的完美算法,它总是选择在未来在实际系统中,操作系统无法预知程序未来的内存访问模最长时间内不会被访问的页面进行置换这种选择策略能够式,因此OPT算法无法直接实现它主要用作理论分析工保证最少的缺页次数,达到理论上的最优性能具,为评估其他实际可行算法的性能提供基准算法的核心思想是向前看,即分析程序未来的内存访问模尽管无法实现,OPT算法为页面置换算法的设计提供了重要式,选择最晚被访问的页面作为置换对象这种前瞻性的决的理论指导,启发了许多基于访问历史和预测的近似算法的策使得算法能够做出最优选择发展页面置换算法FIFO实现简单只需维护页面进入内存的时间顺序Belady异常增加页框可能导致缺页率上升忽略访问模式不考虑页面的实际使用频率FIFO算法基于先到先服务的原则,总是选择最早进入内存的页面进行置换实现时只需要一个简单的队列来记录页面的进入顺序当需要置换时,队头的页面被选中移出,新页面加入队尾FIFO算法的主要缺点是可能出现Belady异常现象这种反直觉的现象表明,仅仅增加物理内存的页框数量并不总是能够改善系统性能,算法的选择同样重要此外,FIFO算法完全忽略了程序的访问局部性,可能置换掉正在频繁使用的页面页面置换算法LRU访问记录最久查找维护每个页面的最近访问时间,记录扫描所有页面,找出最近最久未被访访问历史模式用于决策问的页面作为置换候选记录更新页面置换每次页面访问都要更新对应的时间将选中的页面移出内存,为新页面腾戳,保持记录的准确性出空间并更新访问记录LRU算法基于时间局部性原理,认为最近被访问的页面在近期再次被访问的可能性较大因此,它选择最近最久未被使用的页面作为置换对象这种策略在大多数情况下能够获得较好的性能,因为它符合程序执行的一般规律实现方式LRU栈式实现使用栈结构维护页面访问顺序,每次访问都将页面移至栈顶置换时选择栈底页面,但移动操作开销较大链表实现采用双向链表记录访问顺序,访问时将页面移至链表头部实现相对简单,但仍需要频繁的链表操作硬件支持利用硬件计数器或时间戳寄存器自动记录访问时间,减少软件开销但增加硬件成本近似算法使用时钟算法等近似方法模拟LRU行为,在性能和实现复杂度之间取得平衡时钟算法()Clock环形结构页面组织成环形队列,指针循环扫描引用位检查检查当前页面的引用位状态清零操作引用位为1时清零并继续扫描页面置换引用位为0时选择该页面进行置换时钟算法是LRU的一种高效近似实现,使用环形队列和引用位来模拟LRU的行为每个页面都有一个引用位,当页面被访问时硬件自动将引用位设为1置换时,算法从当前指针位置开始扫描,遇到引用位为1的页面就将其清零并继续,遇到引用位为0的页面就选择它进行置换这种设计巧妙地利用了硬件支持,将复杂的时间记录转化为简单的位操作时钟算法的性能接近LRU,但实现开销要小得多,因此在实际系统中得到广泛应用现代操作系统通常采用时钟算法的各种变种来进行页面置换与变种算法LFU12最少访问频率衰减选择访问次数最少的页面进行置换引入时间因子防止历史访问频率过度影响8位移近似使用位移操作近似实现频率计算LFU(Least FrequentlyUsed)算法选择访问频率最低的页面进行置换,适合处理具有明显访问偏好的程序算法维护每个页面的访问计数器,每次页面被访问时计数器递增置换时选择计数值最小的页面LFU算法的主要问题是早期频繁访问的页面可能长期占据内存,即使后来很少被访问为解决这个问题,现代实现通常引入时间衰减机制,定期将所有计数器右移一位,或者使用更复杂的衰减函数来平衡历史访问和当前需求页面分配策略固定分配可变分配为每个进程分配固定数量的页框,分配后不再改变这种策根据进程的实际需求动态调整页框分配数量系统监控各进略简单易管理,但可能导致内存利用率不高,因为不同进程程的缺页率和工作集大小,适时增加或减少分配给进程的页的内存需求差异很大框数量•实现简单•适应性强•隔离性好•利用率高•利用率可能不高•管理复杂页面分配策略还包括局部置换和全局置换的选择局部置换只在进程自己的页框中选择置换页面,而全局置换可以从系统所有页框中选择全局置换能够获得更好的整体性能,但可能影响进程间的公平性和可预测性页面抖动与缓冲技术抖动现象频繁的页面调入调出导致系统性能急剧下降工作集过大2进程活跃页面数量超过分配的物理页框性能监控通过缺页率等指标识别和预防抖动页面抖动是虚拟内存系统中的严重性能问题,发生时系统大部分时间都在进行页面交换,而不是执行有用的计算抖动的根本原因是系统中运行的进程总的工作集大小超过了可用的物理内存解决抖动的方法包括增加物理内存、减少并发进程数量、改进页面置换算法、使用工作集模型进行动态内存分配等现代操作系统通常采用多种技术的组合来预防和缓解抖动现象,确保系统的稳定运行工作集模型时间窗口活跃页面定义一个时间窗口Δ,观察进程在此工作集包含在时间窗口内被访问过的期间的内存访问行为所有页面内存分配动态变化根据工作集大小动态调整进程的页框随着程序执行,工作集的大小和内容分配不断变化工作集模型是预防页面抖动的重要理论基础它认为进程在任何时刻都有一个工作集,包含当前活跃使用的页面只要为进程分配足够容纳其工作集的页框,就能避免频繁的缺页中断局部性原理时间局部性程序倾向于重复访问最近访问过的内存位置这种特性在循环、递归和频繁调用的函数中尤为明显,是LRU等算法的理论基础空间局部性程序倾向于访问最近访问位置附近的内存数组遍历、顺序代码执行都体现了这种特性,支持预取和块缓存策略顺序局部性程序通常按照一定的顺序访问内存,如指令的顺序执行、数据的顺序处理等,为预测和优化提供了可能分支局部性程序中的条件分支和函数调用具有一定的规律性,可以通过分析程序结构来优化内存管理策略页面大小的取舍小页面优势大页面优势小页面能够减少内部碎片,提高内存利用率程序只需要加大页面减少了页表的大小和TLB缺失次数,提高了地址转换载真正需要的代码和数据,减少了不必要的内存占用此效率对于大型应用程序,大页面能够减少管理开销,提高外,小页面使得内存分配更加精细,适合小型程序和嵌入式整体性能现代系统支持多种页面大小的混合使用系统•减少页表开销•减少内部碎片•提高TLB效率•提高内存利用率•适合大程序•适合小程序典型的页面大小包括4KB、2MB、1GB等4KB是最常用的基本页面大小,2MB和1GB称为大页面或超大页面现代操作系统通常支持多种页面大小的动态选择,根据应用程序的特点自动优化页面大小配置快表()设计TLB高速缓存TLB是页表的高速缓存,存储最近使用的地址转换结果•访问速度接近CPU寄存器•大大减少内存访问次数并行查找TLB采用全相联或组相联结构,支持快速并行查找•硬件实现的关联查找•查找时间通常为1个时钟周期替换策略TLB满时需要选择条目进行替换,通常使用LRU或随机算法•保留最常用的转换结果•平衡性能和实现复杂度TLB的设计直接影响虚拟内存系统的性能现代处理器通常具有多级TLB结构,包括指令TLB和数据TLB的分离设计TLB的大小通常在64到1024个条目之间,命中率通常能达到95%以上命中与缺失TLB98%1典型命中率命中访问时间现代系统中TLB命中率通常超过95%TLB命中时的内存访问只需1个时钟周期100缺失处理时间TLB缺失需要访问页表,耗时约100个时钟周期TLB命中时,地址转换几乎没有额外开销,CPU可以直接获得物理地址进行内存访问TLB缺失时,硬件或软件需要访问内存中的页表来获取转换信息,这个过程的开销要大得多提高TLB命中率的策略包括增大TLB容量、改进替换算法、使用大页面减少TLB条目需求、优化程序的内存访问模式等操作系统也可以通过合理的进程调度和内存布局来改善TLB性能内存保护与访问控制读写权限执行权限特权级控制页表项中的读写位控制对页面的基现代处理器支持NX(No Execute)区分用户态和内核态的访问权限,本访问权限只读页面通常用于代位,防止数据页面被当作代码执确保普通程序无法直接访问内核内码段和常量数据,可写页面用于数行这是防御缓冲区溢出攻击的重存这种隔离是操作系统安全的基据段和栈这种细粒度的权限控制要机制,提高了系统的安全性础,防止恶意程序破坏系统防止了意外的内存修改写时复制()技术COW初始共享写操作触发多个进程共享同一物理页面,页面标当某个进程尝试写入共享页面时,产记为只读状态生写保护异常权限更新页面复制将新页面标记为可写,原页面保持共操作系统为写操作的进程分配新的物享状态理页面并复制内容写时复制技术大大优化了进程创建的效率,特别是在fork系统调用中父子进程最初共享所有内存页面,只有在实际写入时才进行复制这种延迟复制策略节省了大量内存空间和复制时间,因为很多页面可能永远不会被修改。
个人认证
优秀文档
获得点赞 0