目录
1. 基本概念
1.1 逻辑地址空间与物理地址空间
虚拟存储器的核心思想是将逻辑地址空间与物理地址空间分离。
- 逻辑地址空间是程序员使用的地址空间,它由程序员在编写程序时定义,不受物理内存容量的限制。 逻辑地址空间可以是连续的,也可以是不连续的。
- 物理地址空间是计算机硬件可以寻址的地址空间,它的大小由物理内存容量决定。 物理地址空间是连续的。
1.2 地址转换机制
虚拟存储器通过地址转换机制将逻辑地址转换为物理地址。 地址转换机制由硬件和软件共同实现:
- 硬件部分通常由**内存管理单元(MMU)**实现。 MMU负责将逻辑地址中的虚拟页号转换为物理页号。
- 软件部分由操作系统实现。 操作系统负责管理虚拟页表,虚拟页表是将虚拟页号映射到物理页号的表。
2. 页式虚拟存储器
页式虚拟存储器(Paged Virtual Memory)是虚拟存储器的一种实现方式,它将逻辑地址空间和物理地址空间都划分为大小相等的页面。每个页面都有一个虚拟页号和一个物理页号。当程序访问一个逻辑地址时,MMU会先将该地址中的虚拟页号转换为物理页号,然后使用物理页号寻址物理内存。
优点
1. 实现简单,易于管理
页式虚拟存储器的实现相对简单,因为每个页面的大小都是固定的,所以虚拟页表也相对容易管理。
2. 页面大小可以根据需要进行调整
页面的大小可以根据系统的实际需求进行调整。例如,对于大型程序,可以使用较大的页面大小,以减少虚拟页表的开销;对于小型程序,可以使用较小的页面大小,以提高内存利用率。
3. 可以有效地支持稀疏地址空间
页式虚拟存储器可以有效地支持稀疏地址空间,即逻辑地址空间中存在大量空闲区域的情况。这是因为每个页面都是独立分配的,所以只有那些被实际使用的页面才会被分配物理内存。
缺点
1. 存在内部碎片
内部碎片是指物理内存中存在一些无法使用的空闲空间,这些空闲空间的大小小于一个页面的大小。内部碎片的产生会导致内存浪费。
2. 需要额外的开销来维护虚拟页表
虚拟页表是将虚拟页号映射到物理页号的表。为了维护虚拟页表,需要额外的硬件和软件开销。
3. 段式虚拟存储器和段页式虚拟存储器
段式虚拟存储器
段式虚拟存储器将逻辑地址空间划分为大小可变的段。 每个段都有一个起始地址和一个长度。 当程序访问一个逻辑地址时,MMU会先将该地址中的虚拟段号转换为段的起始地址,然后再加上地址中的偏移量得到物理地址。
段式虚拟存储器具有以下优点:
- 可以有效地利用内存空间,减少内部碎片:由于段的大小可以根据程序的实际需要进行调整,因此可以有效地减少内部碎片的产生。
- 可以方便地共享代码和数据:段可以被多个程序共享,因此可以方便地实现代码和数据的共享。
段式虚拟存储器也存在一些缺点:
- 实现复杂,难以管理:由于段的大小可以变化,因此虚拟页表也需要动态维护,这增加了虚拟存储器的实现复杂度和管理难度。
- 难以支持稀疏地址空间:如果逻辑地址空间中存在大量空闲区域,则段式虚拟存储器会存在较大的内存浪费。
段页式虚拟存储器
段页式虚拟存储器结合了页式虚拟存储器和段式虚拟存储器的优点。 它将逻辑地址空间划分为大小可变的段,每个段又可以细分为大小相等的页面。 段页式虚拟存储器是一种比较通用的虚拟存储器实现方式。
段页式虚拟存储器(Segmented-Paged Virtual Memory)结合了页式虚拟存储器和段式虚拟存储器的优点。它将逻辑地址空间划分为大小可变的段,每个段又可以细分为大小相等的页面。段页式虚拟存储器使用段表来管理段,使用页表来管理页面。
段页式虚拟存储器具有以下优点:
- 兼顾了段式虚拟存储器和页式虚拟存储器的优点:段页式虚拟存储器可以有效地利用内存空间,减少内部碎片,并且可以方便地共享代码和数据。
- 可以有效地支持稀疏地址空间:段页式虚拟存储器可以通过只分配那些被实际使用的页面的物理内存来支持稀疏地址空间。
段页式虚拟存储器的缺点是实现复杂,需要额外的硬件和软件开销。
4. 虚存的替换算法
1. 概述
当物理内存空间不足时,操作系统需要将一些页面或段从物理内存中换出到外部存储器中,以腾出空间容纳新的页面或段。为了选择要被换出的页面或段,操作系统需要使用替换算法。
2.1 最近最久未使用(LRU)算法
基本原理: LRU算法将最近最久未使用的页面或段优先换出。LRU算法维护一个最近使用的页面或段的链表,当需要选择要被换出的页面或段时,LRU算法会将链表中位于最前面的页面或段换出。
优点: LRU算法简单易实现,并且在大多数情况下能够有效地提高内存利用率。
缺点: LRU算法无法区分近期可能被使用的页面或段和近期不可能被使用的页面或段,因此在某些情况下可能会导致性能下降。
2.2 最近未使用算法(NRU)算法
基本原理: NRU算法将最近未使用但近期可能被使用的页面或段优先换出。NRU算法使用参考位和修改位来判断一个页面或段是否被最近使用过以及是否被修改过。当需要选择要被换出的页面或段时,NRU算法会优先选择那些参考位为0且修改位为0的页面或段。
优点: NRU算法能够更好地区分近期可能被使用的页面或段和近期不可能被使用的页面或段,因此在某些情况下能够比LRU算法更有效地提高内存利用率。
缺点: NRU算法的实现比LRU算法复杂,并且需要额外的硬件支持。
2.3 时钟算法
基本原理: 时钟算法为每个页面或段分配一个时钟位。当需要选择要被换出的页面或段时,操作系统会将时钟指针向前移动一个刻度,并将时钟指针指向的页面或段换出。
优点: 时钟算法简单易实现,并且在大多数情况下能够有效地提高内存利用率。
缺点: 时钟算法无法区分近期可能被使用的页面或段和近期不可能被使用的页面或段,因此在某些情况下可能会导致性能下降。
3. 算法比较
算法 | 优点 | 缺点 |
---|---|---|
LRU | 简单易实现 | 无法区分近期可能被使用的页面或段和近期不可能被使用的页面或段 |
NRU | 能够更好地区分近期可能被使用的页面或段和近期不可能被使用的页面或段 | 实现复杂,需要额外的硬件支持 |
时钟 | 简单易实现 | 无法区分近期可能被使用的页面或段和近期不可能被使用的页面或段 |
4. 应用场景
LRU算法、NRU算法和时钟算法都各有优缺点,因此在实际应用中需要根据具体情况选择合适的算法。
- LRU算法通常用于通用操作系统,例如Windows、Linux等。
- NRU算法通常用于对内存敏感的应用程序,例如数据库系统等。
- 时钟算法通常用于实时操作系统。
5. 存储管理部件
虚拟存储器是计算机系统内存管理的一种重要技术,它使得应用程序可以访问比物理内存更大的地址空间。存储管理部件是实现虚拟存储器的硬件和软件部件的集合,它负责将逻辑地址转换为物理地址,管理虚拟页表,选择要被换出的页面或段,以及存储不在物理内存中的页面或段。
1. 存储管理部件的组成
存储管理部件主要包括以下部件:
1.1 内存管理单元(MMU)
MMU是虚拟存储器中最重要的硬件部件,它负责将逻辑地址转换为物理地址。MMU通常包含以下功能:
- 虚拟页号转换:将逻辑地址中的虚拟页号转换为物理页号。
- 页表基址寄存器:存储虚拟页表的基址。
- 页保护:防止非法访问内存。
1.2 虚拟页表
虚拟页表是将虚拟页号映射到物理页号的表。虚拟页表可以存储在物理内存中,也可以存储在外部存储器中。虚拟页表通常包含以下信息:
- 虚拟页号
- 物理页号
- 页面状态位:指示页面是否有效、是否被修改等。
1.3 页面置换算法
页面置换算法是选择要被换出的页面或段的算法。常用的页面置换算法包括:
- 最近最久未使用(LRU)算法:将最近最久未使用的页面或段优先换出。
- 最近未使用算法(NRU)算法:将最近未使用但近期可能被使用的页面或段优先换出。
- 时钟算法:为每个页面或段分配一个时钟位,当需要选择要被换出的页面或段时,操作系统会将时钟指针向前移动一个刻度,并将时钟指针指向的页面或段换出。
1.4 外部存储器
外部存储器用于存储不在物理内存中的页面或段。常用的外部存储器包括:
- 硬盘驱动器(HDD)
- 固态硬盘(SSD)
2. 存储管理部件的工作原理
当程序访问一个逻辑地址时,MMU会首先将该地址中的虚拟页号转换为物理页号。如果该页面不在物理内存中,则需要发生页面错误。操作系统会根据页面置换算法选择一个要被换出的页面,并将该页面从物理内存中换出到外部存储器中。然后,操作系统将要访问的页面从外部存储器中调入物理内存中,并更新虚拟页表。最后,MMU会再次将逻辑地址转换为物理地址,并完成对内存的访问。
3. 存储管理部件的性能影响
存储管理部件的性能会对应用程序的性能产生 significant 影响。以下因素会影响存储管理部件的性能:
- 虚拟页表的大小:虚拟页表越大,则地址转换的开销就越大。
- 页面置换算法的效率:页面置换算法的效率越高,则页面错误的发生率就越低。
- 外部存储器的速度:外部存储器的速度越快,则页面调入调出的速度就越快。
总结
虚拟存储器是现代计算机系统的重要组成部分,它使得程序可以访问比物理内存更大的地址空间,提高了程序的运行效率。