摘要:分页(Paging): 分页是一种内存管理策略,它将进程的逻辑地址空间划分为固定大小的块,称为“页”(Pages)。物理内存也被划分为同样大小的块,称为“帧”(Frames)。 每个页在内存中可能不...
分页(Paging):
分页是一种内存管理策略,它将进程的逻辑地址空间划分为固定大小的块,称为“页”(Pages)。物理内存也被划分为同样大小的块,称为“帧”(Frames)。
每个页在内存中可能不连续存放,但通过页表来记录页号与物理帧号之间的映射关系,实现从逻辑地址到物理地址的转换。
访问内存时,需要两次内存访问:第一次查找页表以获取物理地址,第二次访问实际数据。
分页的主要目的是解决内存碎片问题,提高内存利用率,并支持虚拟内存,使得程序可以访问超过实际物理内存大小的地址空间。
分段(Segmentation):
分段则是将程序的地址空间按照逻辑或功能划分为若干个独立的段(Segments),如代码段、数据段、堆栈段等,每个段的大小可变。
段表用于存储段的基地址和长度,逻辑地址由段号和段内偏移量组成。
分段机制允许每个段在内存中独立地进行连续分配,这有助于数据保护、共享和程序结构的逻辑划分。
相对于分页,分段更关注于满足程序员对程序结构的逻辑需求。
分页与分段的区别:
1. 目的不同:分页侧重于提高内存利用率和实现虚拟内存,而分段侧重于满足程序的逻辑结构和提供数据保护、共享能力。
2. 地址空间:分页的地址空间是一维的,而分段的地址空间是二维的,需要段号和段内偏移量。
3. 块大小:分页的页大小固定,由操作系统决定;分段的段大小不固定,由程序逻辑决定。
4. 透明性:分页对程序员通常是透明的,而分段需要程序员明确划分段。
5. 碎片问题:分页可能导致内部碎片,但避免了外部碎片;分段则可能产生外部碎片,但内部碎片较少。
在现代操作系统中,为了结合两者的优点,经常采用段页式存储管理,即先将程序划分为段,再将每个段分成页,这样既保持了逻辑上的独立性,又实现了高效的内存分配和管理。