分页存储(Paging)是一种现代计算机系统中广泛采用的内存管理技术,它将主存(RAM)划分为固定大小的连续区域,称为“页”(Page)。同时,将进程的逻辑地址空间划分为同样大小的虚拟页(Virtual Page)。分页存储的主要目的是实现虚拟内存管理,使得进程可以使用比实际物理内存更大的地址空间,并支持进程的并发执行和内存共享。以下是对分页存储系统的主要特性和工作原理的详细介绍:
主要特点:
- 逻辑地址与物理地址分离:
- 分页存储系统引入了两级地址结构:逻辑地址(由进程生成)和物理地址(由硬件识别)。逻辑地址由页号(Page Number, PN)和页内偏移(Offset)组成。物理地址则对应主存中的实际位置,由物理页号(Physical Page Number, PPN)和页内偏移组成。
- 页表:
- 为了将逻辑地址转换为物理地址,系统为每个进程维护一张页表(Page Table)。页表是一个数组,每个条目(Page Table Entry, PTE)对应进程的一个虚拟页。PTE包含该虚拟页对应的物理页号以及其他控制信息,如有效位(Valid/Invalid Bit)、访问位(Accessed Bit)、修改位(Dirty Bit)等。
- 硬件支持:
- 系统硬件(如MMU,Memory Management Unit)负责逻辑地址到物理地址的转换。当CPU发出一个逻辑地址访问请求时,MMU首先提取出页号和页内偏移,然后查找页表获取对应PTE中的物理页号。如果有效位为1(表示该虚拟页已映射到物理内存),则将物理页号与页内偏移拼接成物理地址,完成地址转换;否则触发缺页异常(Page Fault),由操作系统介入处理。
- 页面大小:
- 页面大小通常是2的幂(如4 KiB、2 MiB等),这样可以简化地址转换过程。页面大小的选择应考虑系统性能、内存利用率和外部碎片等因素。
- 页面替换算法:
- 当发生缺页异常,且主存已满时,需要选择一个已存在的物理页将其内容换出到辅存(如硬盘上的交换空间),以便为新的虚拟页腾出空间。常用的页面替换算法包括:最久未使用(LRU)、先进先出(FIFO)、最近最少使用(LFU)、Clock算法、二次机会等。
- 内存保护:
- 通过页表中的权限位(如读/写/执行权限)实现对每个虚拟页的访问权限控制,防止非法访问和数据破坏。
工作原理:
- 进程创建与加载:
- 当操作系统创建或加载一个进程时,为其分配页表,并根据进程的内存需求,将部分或全部虚拟页映射到物理内存。初始时,可能只有部分页面被装入内存,其余页面在首次访问时触发缺页异常。
- 地址转换:
- 进程执行过程中,CPU生成逻辑地址。MMU截获访问请求,通过查页表将逻辑地址转换为物理地址。若所需页面已在内存中,则直接访问;否则触发缺页异常。
- 缺页异常处理:
- 操作系统收到缺页异常后,检查是否因访问越界或权限错误导致。若合法,根据页面替换算法选择一个牺牲页(Victim Page),将其内容换出到辅存,并更新页表。然后,从辅存加载所需的虚拟页内容到空出的物理页,更新页表,并重试原访问指令。
- 页面换出与换入:
- 页面换出时,操作系统将牺牲页的内容写回辅存,并更新页表。页面换入时,操作系统从辅存读取所需虚拟页内容到空闲物理页,并更新页表。换出和换入过程可能涉及磁盘I/O,因此会引入一定延迟。
- 页面共享:
- 分页存储支持进程间的内存共享。多个进程的页表可以映射到相同的物理页,从而实现数据或代码的共享。这对于减少内存占用、提高系统效率(如共享库文件)非常有用。
优缺点对比:
优点:
- 灵活的内存管理:分页存储支持任意大小的内存分配,且易于实现内存的动态分配与回收。
- 虚拟内存:使得进程可以使用超过物理内存大小的地址空间,通过页面换入换出实现按需访问,大大提高了内存利用率。
- 内存保护:通过页表中的权限位实现对每个虚拟页的访问控制,增强了系统的安全性。
- 进程并发执行:每个进程有自己的页表,通过逻辑地址到物理地址的转换,实现了进程间内存的隔离,支持多进程并发执行。
缺点:
- 额外开销:分页存储引入了页表查询、地址转换等额外开销,可能影响系统性能。现代硬件通过TLB(Translation Lookaside Buffer)缓存最近使用的页表项,以降低这部分开销。
- 内部碎片:由于页面大小固定,分配给进程的内存可能会出现不能完全填满页面的情况,导致内部碎片。
- 页面换入换出:频繁的页面换入换出(Thrashing)会导致大量的磁盘I/O,严重影响系统性能。
总结来说,分页存储是一种重要的内存管理技术,通过逻辑地址与物理地址的分离、页表的使用以及硬件的支持,实现了虚拟内存管理、内存保护和进程并发执行。尽管存在额外开销和内部碎片等问题,但通过优化硬件(如TLB)和页面替换算法,现代操作系统已经能够在很大程度上克服这些挑战,使得分页存储成为现代计算机系统不可或缺的一部分。