### 内存管理
#### 1. **分页(Paging)**
1. **定义**:
- 分页是一种内存管理技术,将物理内存分成固定大小的块,称为“页框”(Page Frame),同时将逻辑内存分成相同大小的块,称为“页”(Page)。
2. **页表(Page Table)**:
- 页表是一个数据结构,用于存储逻辑地址到物理地址的映射关系。
- 每个进程都有一个页表,页表条目(PTE)中包含物理页框的地址和一些控制信息。
3. **分页的优点**:
- **消除外部碎片**:因为内存分配以固定大小的页为单位,所以不会产生外部碎片。
- **简化内存管理**:内存分配和释放更加简单和高效。
4. **分页的缺点**:
- **页表开销**:每个进程都有自己的页表,页表可能会占用大量内存。
- **页表查找开销**:每次内存访问都需要查找页表,增加了访问时间。
#### 2. **分段(Segmentation)**
1. **定义**:
- 分段是一种内存管理技术,将逻辑内存划分成不同长度的段,每个段代表一种逻辑单元(如代码段、数据段、堆栈段)。
2. **段表(Segment Table)**:
- 段表是一个数据结构,用于存储段基址和段长度。
- 每个进程都有一个段表,段表条目(STE)中包含段的基址和长度。
3. **分段的优点**:
- **逻辑单元分隔**:不同类型的内存单元(如代码、数据、堆栈)可以分开管理,增加内存的安全性和可靠性。
- **灵活的内存分配**:段的大小可以根据需要动态调整。
4. **分段的缺点**(续):
- **外部碎片**:因为段的大小不固定,内存中可能会产生未使用的小碎片。
- **段表开销**:每个进程都有自己的段表,段表可能会占用一定的内存。
#### 3. **分页和分段结合(Segmentation with Paging)**
1. **定义**:
- 分页和分段结合是一种综合内存管理技术,将逻辑内存先划分为段,每个段再划分为固定大小的页。
- 这种技术结合了分页和分段的优点,避免了它们各自的缺点。
2. **段页表(Segment Page Table)**:
- 每个段有一个页表,页表条目(PTE)中包含物理页框的地址和控制信息。
3. **优点**:
- **消除外部碎片**:因为内存分配以页为单位,所以不会产生外部碎片。
- **逻辑单元分隔**:不同类型的内存单元可以分开管理,增加内存的安全性和可靠性。
4. **缺点**:
- **复杂性增加**:分页和分段结合的机制增加了内存管理的复杂性。
- **双重开销**:既有页表开销,又有段表开销。
#### 4. **虚拟内存(Virtual Memory)**
1. **定义**:
- 虚拟内存是一种内存管理技术,通过使用磁盘空间扩展物理内存,使得进程可以使用比实际物理内存更大的地址空间。
**工作原理**:
- 虚拟内存将进程的地址空间划分成若干个页(Page),每个页可能在物理内存中或在磁盘上。
- 当进程访问一个不在物理内存中的页时,会产生页面故障(Page Fault)。
- 页置换算法用于决定在发生页面故障时,如何将不在物理内存中的页从磁盘加载到物理内存中,以及将哪个页从物理内存中移出以腾出空间。
- 当发生页面故障时,操作系统需要在物理内存中找到一个空闲的页框来加载所需的页。如果没有空闲的页框,则需要使用页置换算法决定哪个页被移出。
- 常见的页置换算法包括FIFO(First-In-First-Out)、LRU(Least Recently Used)、OPT(Optimal)等。
2. **页置换算法(Page Replacement Algorithms)**:
- **FIFO(First-In-First-Out)**:
最简单的算法,按页进入内存的顺序进行置换。
缺点:可能会置换掉常用的页,导致性能下降。
- **LRU(Least Recently Used)**:
置换最近最少使用的页,基于最近的访问历史。
缺点:实现复杂,需要维护访问历史。
- **OPT(Optimal)**:
理论上最优的置换算法,置换未来最久不会使用的页。
缺点:实际中无法实现,因为无法预知未来的访问情况。
- **其他算法**:
- **Clock**:也称为“二次机会”算法,结合了FIFO和LRU的思想。
- **NRU(Not Recently Used)**:根据最近的访问和修改情况进行置换。
3. **页面故障(Page Fault)**:
- **定义**:当进程访问的页不在物理内存中时,产生页面故障。
- **处理流程**:
1. 操作系统检测到页面故障。
2. 从磁盘中加载所需的页到物理内存中。
3. 更新页表,重新执行导致页面故障的指令。
**优点**:
- **扩展内存**:虚拟内存允许进程使用比实际物理内存更大的地址空间。
- **提高效率**:通过按需加载页,可以更高效地使用物理内存。
- **隔离性**:每个进程都有独立的虚拟地址空间,增强了进程间的隔离。
**缺点**:
- **性能开销**:页面置换和页面故障处理会带来性能开销。
- **复杂性**:管理虚拟内存和页表增加了系统的复杂性。