内存分页

简介:         虚拟存储器的思想是程序、数据和堆栈的大小都有可能超过物理内存大小,由操作系统把当前使用的放在内存,而不需要的放在磁盘。 而绝大部分操作系统使用的虚拟存储器技术就是分页技术。
        虚拟存储器的思想是程序、数据和堆栈的大小都有可能超过物理内存大小,由操作系统把当前使用的放在内存,而不需要的放在磁盘。  
而绝大部分操作系统使用的虚拟存储器技术就是分页技术。  
        在虚拟存储器中,程序所产生的地址为虚拟地址,虚拟地址构成了虚拟地址空间。(当然了在没有虚拟存储器的系统上,程序产生的地址就是物理地址。其实程序并不知道,只是操作系统和处理器知道。下面都是按照使用虚拟存储器的系统来说)这些虚拟地址通过MMU(内存管理单元)映射为物理地址。  
        采用分页机制的系统,虚拟地址空间以页面为单位进行划分,虚拟地址空间会被划分成多个等大小的页面。物理地址空间也按页面为单位进行划分每一块成为页帧,或者页框。每一虚拟页面可以随意对应到物理页框,也可以对应到磁盘的页面文件的上。  
        我们按照IA32的分页机制来说,标准页面大小为4K。  
        例如一条mov指令:mov   eax,[0];  
        此时虚拟地址0将被发给MMU,MMU发现0属于页面0的范围内,如果页面0对应的页框号为1,那么物理地址在物理地址4096-8191范围,此时就会将4096发送到地址总线上。因为虚拟地址0的页内偏移也是0(页内偏移:在页面里的位置,比如1,的页面偏移是1,4097的页面偏移也是1,这是因为一个页面大小为4K,用虚拟地址   mod   4k就得到了页内偏移)。  
        就类似mov   eax,[4095];mov   eax,[4096],4095属于页面0,页面0对应页框1,那么物理地址为8191,而4096属于页面1的范围,如果页面1对应页框0,此时的物理地址就是0。  
        由上面可以看出,虚拟地址空间是连续的,而物理空间是可以不连续的。也就是说一个程序只要保证他的虚拟地址空间是连续的,它就可以正常运行。  
        上面说的是虚拟地址到物理地址的映射的简单情况。可是如何记录这些页面到页框的映射关系呢?(当然也有些处理器系统是页框到页面的转化)。在IA处理器上使用的是页表,就是在物理内存里有一块连续的空间,来记录这些页面到页框的映射关系。每一个页表项里都有一部分去指向页框的起始地址,还有部分记录了这个页面的属性。可以通过页面号来做索引。页面号就是虚拟地址   /   4K,得到的整数部分。  
        当然如果只是单一的页表,也是有问题的,如果虚拟地址空间过大,那么页表所占的空间也会很大,这时候可以采用多级页表。IA32在采用4K页面的时候就使用了2级页表,IA64使用了4级。  
        其实两级也很简单,最上一级就是一个总的目录指示每一个二级页表的起始物理地址,可以在页号的高几位来索引页目录项。例如IA32就是通过虚拟地址的高10位来索引页目录项,然后中间10位来索引页表项。  
        这样,我们就可以只将用到的虚拟地址空间的页表写入内存,而没有用到的虚拟地址空间的页表就不写入。  
        例如,我们正好是只用了虚拟地址0-0x3FFFFF,那么我们可以在页目录第0项指向一个页表,这个页表就只表示了虚拟地址地址0-0x3FFFFF到物理地址空间的映射关系(因为高10位为页目录索引,页目录第0项,就表示了虚拟地址高10位必为0,也就是说只有低24位有效,所以最大只能到0x3FFFFF)。

从虚拟地址到物理地址要经过两步,第一步从虚拟地址到线性地址到线性地址,第二步从线性地址从物理地址。  
第一步从段描述符表描述的段基址加上段偏移生成线性地址。  
IA32中线性地址高10位为页目录索引,通过此找到页表,线性地址中间10位为页表项索引,通过前面找到的页表加上这个索引,找到页表项。页表项指示着页框号,页框号加上线性地址低12位(页内偏移)就生成了物理地址。


相关文章
|
17天前
|
算法 程序员
深入理解操作系统内存管理:分页系统的优势与挑战
【4月更文挑战第7天】 在现代操作系统中,内存管理是一项至关重要的任务,它确保了计算机能够高效、安全地运行各种程序。分页系统作为内存管理的一种技术,通过将物理内存分割成固定大小的单元——页面,为每个运行的程序提供了一种独立且连续的内存地址空间。该技术不仅简化了内存分配,还允许更高效的内存使用和保护。本文探讨了分页系统的核心原理,优势以及面临的挑战,旨在为读者揭示其在操作系统设计中的重要性。
|
5月前
|
存储 网络虚拟化 索引
【OSTEP】分页(Paging) | 页表中究竟有什么 | 页表存在哪 | 内存追踪
【OSTEP】分页(Paging) | 页表中究竟有什么 | 页表存在哪 | 内存追踪
45 0
|
1月前
|
缓存 算法 安全
深入理解操作系统内存管理:分页系统的优势与挑战
【2月更文挑战第30天】 在现代操作系统中,内存管理是核心功能之一,它负责将有限的物理内存资源分配给多个并发运行的进程。分页系统作为内存管理的一种流行技术,其通过虚拟到物理地址的映射提供了程序的逻辑地址空间,并允许更高效的内存分配和保护。本文旨在探讨分页系统的关键优势,包括其如何提升内存利用率、实现内存保护以及支持多任务处理。同时,我们也将分析分页机制带来的挑战,诸如页面置换算法的效率问题、页表管理和TLB(Translation Lookaside Buffer)的维护等。
|
1月前
|
存储 算法
深入理解操作系统内存管理:分页系统的优势与挑战
【2月更文挑战第29天】 在现代操作系统中,内存管理是核心功能之一,它负责有效地分配、跟踪和回收内存资源。分页系统作为一种内存管理技术,已经成为大多数操作系统的标准配置。本文将探讨分页系统的原理、优势以及面临的挑战。通过对分页机制的深入分析,我们旨在提供一个全面的视角,以帮助读者更好地理解这一关键技术如何影响操作系统的性能和稳定性。
|
5月前
|
存储 算法 程序员
【OSTEP】超越物理内存:机制 | 请求分页 | 交换位与存在位 | 页错误
【OSTEP】超越物理内存:机制 | 请求分页 | 交换位与存在位 | 页错误
30 0
|
3月前
|
关系型数据库 芯片
畅游内存分页
畅游内存分页
28 0
|
3月前
|
存储 关系型数据库 C语言
开启内存分页
开启内存分页
27 0
|
3月前
|
存储 缓存 算法
内存分页机制
内存分页机制
23 0
|
5月前
|
存储 缓存 Linux
系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
虚拟内存的主要作用是提供更大的地址空间,使得每个进程都可以拥有大量的虚拟内存,而不受物理内存大小的限制。此外,虚拟内存还可以提供内存保护和共享的机制,保护每个进程的内存空间不被其他进程非法访问,并允许多个进程共享同一份物理内存数据,提高了系统的资源利用率。虚拟内存的实现方式有分段和分页两种,其中分页机制更为常用和灵活。分页机制将虚拟内存划分为固定大小的页,将每个进程的虚拟地址空间映射到物理内存的页框中。为了减少页表的大小和访问时间,采用了多级页表的方式,将大的页表划分为多个小的页表,只加载需要的页表项,节约了内存空间。
199 0
系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理
|
6月前
内存分段和按需分页
内存分段和按需分页

热门文章

最新文章