虚拟地址和物理地址转换
- 格式:docx
- 大小:38.67 KB
- 文档页数:4
vmme中的ipu单元名称和功能VMME(Virtual Memory Management Engine)是一种硬件加速器,用于在虚拟内存系统中处理内存管理的任务。
在VMME中,IPU (Internal Processing Unit)是一个重要的组件,负责执行多种操作来管理虚拟内存。
I. IPU单元名称和功能概述VMME中的IPU单元拥有多个子单元,每个子单元都负责不同的功能。
下面将介绍其中几个重要的IPU单元及其名称和功能:1. 地址转换单元(Address Translation Unit):地址转换单元的主要功能是将虚拟地址转换为物理地址。
它根据底层的内存映射表(Memory Mapping Table),执行虚拟地址到物理地址的转换操作。
该单元使用高效的内存管理算法,确保数据的快速访问,并保证内存的安全性和完整性。
2. 页面表管理单元(Page Table Management Unit):页面表管理单元负责管理虚拟内存的页面表。
页面表是一个数据结构,用于存储虚拟地址与物理地址之间的映射关系。
该单元通过维护和更新页面表,实现虚拟地址到物理地址的有效映射,以及内存的分配和释放。
3. 内存保护单元(Memory Protection Unit):内存保护单元用于实现对内存的安全保护。
它通过对虚拟地址的访问权限进行检查和控制,确保每个程序只能访问其允许的内存区域。
该单元还可以检测并防止非法内存访问操作,提高系统的安全性和稳定性。
II. IPU单元的工作流程为了更好地理解IPU单元的工作原理,下面将介绍IPU单元的工作流程。
1. 地址转换流程:当CPU发出一个虚拟地址请求时,地址转换单元会首先获取该请求,并将其与内存映射表进行匹配。
然后,它会执行地址转换算法,将虚拟地址转换为物理地址。
转换完成后,地址转换单元将物理地址返回给CPU,使其能够正确地访问内存中的数据。
2. 页面表管理流程:页面表管理单元在虚拟内存系统中起着关键作用。
模拟页式虚拟存储管理中硬件的地址转心得体会
页式虚拟存储管理中,硬件的地址转换过程是非常复杂的,需要多个硬件组件的协同工作来完成。
在我的学习中,我有一些体会和心得体会:
首先,在页式虚拟存储管理中,硬件的地址转换是通过页表实现的。
每个进程都有自己的页表,其中包含了虚拟页与物理页之间的对应关系。
当进程需要访问内存时,其虚拟地址会被分为页号和页内偏移量两部分,而页号就是用来查找页表中对应的物理页号的。
其次,在硬件地址转换的过程中,还需要使用到一个称为MMU(内存管理单元)的硬件组件。
MMU的作用就是将虚拟地址转换为物理地址。
它会在页表中查找想要访问的虚拟页号对应的物理页号,并使用物理页号和页内偏移量重新构造出物理地址。
最后,在使用页式虚拟存储管理时,还需要注意物理页的分配和清除。
物理页可以被多个进程共享使用,但是在进程结束时,需要及时清除对应的物理页帧,以确保不会引起内存泄漏和资源浪费。
总之,页式虚拟存储管理中硬件的地址转换过程非常复杂,需要多个硬件组件的协同工作来完成。
正确理解这个过程,并且合理地进行管理和分配物理页,才能保证进程的正常运行。
tlb的组相联映射组相联映射(group associative mapping)是一种在TLB (Translation Lookaside Buffer)中用于实现虚拟地址到物理地址转换的技术。
在组相联映射中,TLB被划分为多个组,每个组包含多个条目(entry),每个条目存储了一个虚拟地址到物理地址的映射。
下面是一个详细的组相联映射的工作流程:1. TLB被划分为多个组,每个组包含多个条目。
组的数量和每个组的条目数量可以根据系统的需求进行设置。
2. 当CPU访问一个虚拟地址时,首先检查TLB中是否存在对应的映射。
TLB是一个高速缓存,存储了最近被访问的虚拟地址到物理地址的映射。
3. 如果TLB中存在对应的映射,则称为TLB命中(TLB hit),TLB会直接将物理地址返回给CPU,从而加快地址转换的速度。
4. 如果TLB中不存在对应的映射,则称为TLB未命中(TLB miss)。
此时,CPU需要从页表(Page Table)中获取对应的映射。
5. CPU首先从虚拟地址中提取页号(Page Number),然后使用页号去访问页表。
页表是一个存储在内存中的数据结构,用于记录虚拟地址到物理地址的映射关系。
6. 在组相联映射中,CPU在访问页表时,会根据页号的一部分(通常是低位)选择一个特定的组。
7. 在选定的组中,CPU会逐个比较每个条目的页号部分与所需的页号是否匹配。
如果找到匹配的条目,则称为组相联命中(group associative hit)。
8. 在组相联命中的情况下,CPU会将对应的物理地址返回给TLB,并将该映射添加到TLB中,以便下次快速访问。
9. 如果在选定的组中没有找到匹配的条目,则称为组相联未命中(group associative miss)。
此时,CPU需要从内存中获取对应的页表条目,并将其添加到选定的组中。
10. 组相联映射的优势在于可以提高TLB的查找效率。
通过将TLB划分为多个组,可以减少每次查找的范围,从而加快地址转换的速度。
ARM中MMU地址转换理解(转)⾸先,我们要分清ARM CPU上的三个地址:虚拟地址(VA,Virtual Address)、变换后的虚拟地址(MVA,Modified Virtual Address)、物理地址(PA,Physical Address)启动MMU后,CPU核对外发出虚拟地址VA,VA被转换为MVA供MMU使⽤,在这⾥MVA被转换为PA;最后通过PA读写实际设备MMU的作⽤就是负责虚拟地址(virtual address)转化成物理地址(physical address)。
32位的CPU的虚拟地址空间达到4GB,在⼀级页表中使⽤4096个描述符来表⽰这4GB的空间,每个描述符代表1M的虚拟地址,要么存储了它的对应物理地址的起始地址,要么存储了下⼀级页表的地址。
使⽤MVA[31:20]来索引⼀级页表(4096个描述符)(因为全⽤MVA的⾼12位来索引,因此⼤⼩为 2^12 = 4096)由协处理器CP15中的寄存器C2(⾼18位,即[31:14]为转换表基地址,低14位为0)为⼀级转换表基地址,指向2^14=16KB整除的存储器即16K对齐,这个存储区称为⼀级转换表;MVA的⾼12位,即位[31:20]作为⼀级转换表的地址索引,因此⼀级转换表具有2^12=4096项,每⼀项的地址为32位,最⾼的18位[31:14]为寄存器C2的⾼18位,中间12位为MVA的⾼12位[31:20],最低2位为0b00。
每⼀项的内容称为⼀个描述符,在段(Section)下,⼀级描述符的⾼12位为⼤⼩为1MB的段基地址,段内地址(偏移地址)为MVA的低20位,即段内每个存储器的地址是这样组成:⾼12位为⼀级描述符的⾼12位,低20位MVA的低20位。
这样,借助于寄存器C2和⼀级描述符,将⼀个MVA转换成⼀个PA。
(在这⾥⼀定要注意:MVA的⾼12位是⽤来索引4096个项的,然后使⽤项的内容(即描述符)的⾼12位为段的⾼12位,类似于指针⾥⾯存放地址,4096项类似指针,描述符类似指针⾥⾯的内容)虚拟地址(注意:是⼀个确定的地址,不是⼀个空间)被MMU分成2个部分,第⼀部分是4096页号索引(descriptor index)即⽤选择4096(2^12)个号中的某个页号,⽐喻description index为768,页号768中保存的是物理地址的某个页框的起始地址(0x300),第⼆部分则是相对于section base(0x300)为起始地址空间为1M的偏移量(offset)(如下图)例如:假设现在执⾏指令MOV REG, 0x30100013,虚拟地址的⼆进制码为00110000 00010000 00000000 00010011,前12位是Descriptor Index = 2^9+2^8+1 = 769,找到769项对应的内容0x301,偏移量为0000 00000000 00010011=13,那么段地址为0x3000000D。
tlb的组相联映射TLB(Translation Lookaside Buffer)是一种硬件缓存,用于加速虚拟地址到物理地址的转换过程。
TLB采用组相联映射的方式来存储虚拟地址到物理地址的映射关系。
组相联映射是一种将TLB划分为多个组的方式,每个组中包含多个条目(entry)。
每个条目由两部分组成:标记(tag)和数据(data)。
标记用于存储虚拟地址的高位,而数据则存储对应的物理地址和其他相关信息。
具体的组相联映射过程如下:1. 将虚拟地址分为三个部分:页号(page number)、页内偏移(page offset)和标记(tag)。
2. 使用页号作为索引,从TLB的组索引部分中找到对应的组。
3. 在该组中,将标记与TLB中的标记进行比较,以确定是否命中。
4. 如果命中,表示TLB中已经存储了该虚拟地址到物理地址的映射关系,可以直接从TLB中获取对应的物理地址。
5. 如果未命中,表示TLB中没有存储该虚拟地址到物理地址的映射关系,需要进行TLB miss操作。
6. TLB miss操作会触发一次内存访问,将虚拟地址转换为物理地址,并将转换结果存储到TLB中,同时替换掉一个旧的条目。
7. 下次再访问相同的虚拟地址时,就可以直接从TLB中获取到物理地址,不再需要进行TLB miss操作。
总结起来,组相联映射将TLB划分为多个组,每个组中包含多个条目。
通过比较标记,可以确定是否命中TLB。
如果命中,则可以直接获取物理地址;如果未命中,则需要进行TLB miss操作,将虚拟地址转换为物理地址并存储到TLB中。
这样可以加速虚拟地址到物理地址的转换过程,提高系统的性能。
操作系统虚拟内存操作系统中的虚拟内存是一种管理计算机内存的技术,它利用硬盘空间作为“虚拟”的内存扩展,允许更多的程序同时运行,并提高内存的利用率。
本文将介绍虚拟内存的概念、工作原理以及其在操作系统中的作用。
概念及原理虚拟内存是一种将硬盘空间用作内存扩展的技术。
通常情况下,每个程序运行时所需的内存超过了计算机的物理内存容量。
为了解决这个问题,操作系统将不常用的内存数据暂时存储在硬盘上,以便为新的内存需求腾出空间给其他程序使用。
虚拟内存通过把逻辑内存地址映射到物理内存地址来实现。
每个进程都拥有自己的虚拟地址空间,而不受物理内存大小的限制。
操作系统将虚拟地址映射到物理内存,使得进程能够访问所需的数据。
虚拟内存的作用虚拟内存在操作系统中起到了几个重要的作用。
1. 内存管理:虚拟内存允许多个程序同时运行,并且每个程序拥有自己的虚拟地址空间。
操作系统通过调度和管理虚拟内存的分配,实现了对内存资源的合理利用。
2. 内存保护:虚拟内存提供了内存保护的机制。
每个进程在运行时只能访问自己的虚拟地址空间,而不能访问其他进程的地址空间。
这样可以避免不同程序之间的内存冲突,提高系统的稳定性和安全性。
3. 内存共享:虚拟内存使得不同进程之间可以共享同一块物理内存空间。
这种共享机制在多进程间的通信和资源共享中发挥了重要的作用,提高了系统的效率和灵活性。
虚拟内存的实现虚拟内存的实现一般包括以下几个步骤:1. 地址转换:当进程访问虚拟地址时,操作系统将虚拟地址转换为物理地址。
这个转换过程是通过使用页表或段表等数据结构来实现的。
2. 页面置换:当物理内存不足时,操作系统需要将不常用的页面从物理内存中调出,腾出空间给新的页面使用。
常用的页面置换算法有最佳置换算法(OPT)、先进先出(FIFO)和最近最少使用(LRU)等。
3. 页面调度:操作系统需要决定哪些页面被调入物理内存,哪些页面被调出物理内存。
调度算法的选择会影响系统的性能。
常用的页面调度算法有先进先出(FIFO)和最近最久未使用(LRU)等。
虚拟内存技术的工作原理虚拟内存是一种操作系统提供的一种技术,它将主存和辅助存储器(通常是硬盘)结合起来,为进程提供了一个比实际物理内存更大的地址空间。
虚拟内存技术的核心原理是将进程的逻辑地址空间与物理内存进行映射,使得进程能够访问超出实际物理内存大小的数据。
虚拟内存的工作原理可以分为几个关键步骤:1.地址转换:当进程执行时,它使用的是虚拟地址。
这些虚拟地址需要被转换为物理地址,才能在实际的物理内存中进行访问。
操作系统通过硬件机制(如页表)来进行地址转换。
2.页面调度:当进程需要访问的页面不在物理内存中时,操作系统需要将该页面从辅助存储器(硬盘)加载到物理内存。
为了提高效率,操作系统会将物理内存空间划分为固定大小的页面,这些页面是虚拟内存和物理内存之间的基本单位。
3.页面置换:当物理内存不足时,操作系统需要将一些不常用的页面从物理内存中置换出去,而将需要访问的页面置换到物理内存中。
常见的页面置换算法有FIFO(先进先出)、LRU(最近最久未使用)等。
4.页面写入:当需要写入页面数据时,操作系统可以选择将页面直接写入辅助存储器,而不是每次都写回物理内存。
这样可以减少对物理内存的访问次数,提高效率。
1.扩展了物理内存大小:虚拟内存将进程的逻辑地址空间与实际物理内存分离,使得进程可以拥有比实际物理内存更大的地址空间。
这意味着即使物理内存大小有限,进程仍然可以处理更大的数据集。
2.提高了内存利用率:由于虚拟内存将进程的逻辑地址空间与物理内存进行映射,操作系统可以根据进程的需求动态地将页面放入或置换出物理内存。
这样可以更灵活地利用物理内存,提高内存利用率。
1.频繁的页面置换可能导致性能下降:当物理内存不足时,无法避免进行页面置换操作。
如果页面置换过于频繁,会导致系统性能下降,因为频繁的磁盘访问速度远远慢于内存访问速度。
2.增加了一些开销:虚拟内存技术需要额外的硬件支持和软件机制,这会增加了一些开销。
例如,需要维护页表来进行地址转换,需要进行页面的加载和置换等操作,这些都需要消耗一定的计算资源和时间。
虚拟地址和物理地址转换内核也不能直接访问物理地址.但因为内核的虚拟地址和物理地址之间只是一个差值0xc0000000的区别,所以从物理地址求虚拟地址或从虚拟地址求物理地址很容易。
那么虚拟地址和物理地址怎么转换?店铺整理了修改硬盘物理地址的相关资料。
供大家参考!虚拟地址和物理地址转换参考如下虚拟地址(Virtual Address Space)虚拟地址并不真实存在于计算机中。
每个进程都分配有自己的虚拟空间,而且只能访问自己被分配使用的空间。
理论上,虚拟空间受物理内存大小的限制,如给有4GB内存,那么虚拟地址空间的地址范围就应该是0x00000000~0xFFFFFFFF(4GB)。
为什么每个进程的虚拟地址空间范围都可以这么大呢,这涉及到地址的映射机制;程序实际运行时,系统会先将虚拟地址映射到物理地址中的范围。
另外一个概念:虚拟内存。
虚拟内存是内存中的一片连续地址空间。
在物理存储位置上的意义,不一定就是指物理内存,可能也是在硬盘上开辟的一篇地址空间。
物理地址(physical address)物理地址用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。
所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。
也许错误的理解更利于形而上的抽像。
虚地址到物理地址的转换过程MVA (Modified Virtual address,修改过的虚拟地址,这个地址由CPU产生#1)step1.通过TTBR找到粗表描述符转换表基地址#2 + MVA的粗页表索引 = 粗页表的物理地址step2.通过粗表描述符找到小页描述符粗页表基地址#3 + MVA的小页表索引 = 小页表的物理地址step3.通过小页描述符找到物理地址小页基地址#4 + MVA的页索引 = 物理地址step1得到的粗页表的物理地址位定义step2得到的小页表的物理地址位定义step3得到的物理地址位定义注1:严格的说,这个地址是可能是FCSE或ARM926ej-s处理器产生注2:转换表基地址保存在TTBR,详见TTBR注3:粗页表基地址保存在粗页表描述符中,详见粗页表描述符注4:小页表基地址保存在粗页表描述符中,详见小页表描述符--------------------------------------------------------------------------------------CP15系统控制协处理器(CP15)被用来配置和控制ARM926ej-s处理器。
通俗理解物理地址、逻辑地址、线性地址、虚拟地址、有效地址
的区别
物理地址:物理地址就是内存单元的绝对地址,⽐如你有⼀个4G的内存条插在电脑上,物理地址0x0000就表⽰内存条的第⼀个存储单元,0x0010就表⽰内存条的第17个存储单元,不管CPU内部怎么处理地址,最终访问的都是物理地址。
在CPU实模式下“段基址+段内偏移地址”就是物理地
址,CPU可以使⽤此地址直接访问内存。
线性地址、虚拟地址:CPU在保护模式下,“段基址+段内偏移地址”叫做线性地址,注意,保护模式下段基址寄存器中存储的不是真正的段基值(和实模式的含义不⼀样),⽽是被称为“段选择⼦”的东西,通过段选择⼦在GDT(全局描述表)中找到真正的段基值。
另外,如果CPU在保护模式下没有开启分页功能,则线性地址就被当做最终的物理地址来⽤,若开启了分页功能,则线性地址就叫虚拟地址(在没开启分页功能的情况下线性地址和虚拟地址就是⼀回事)。
但是,如果开启分页功能,虚拟地址(或线性地址)还要通过页部件电路转换成最终的物理地址。
逻辑地址、有效地址:⽆论CPU在什么模式下,段内偏移地址⼜称为有效地址或者逻辑地址(只是叫法不⼀样罢了),例如实模式下 “mov ax,
[0x7c00]”,0x7c00就是逻辑地址(或有效地址),但这条指令最终操作的物理地址是DS*16+0x7c00。
操作系统内存管理实验报告操作系统内存管理实验报告引言:操作系统是计算机系统中的核心软件,负责管理计算机系统的各种资源,其中内存管理是操作系统的重要功能之一。
内存管理的目标是有效地管理计算机的内存资源,提高计算机系统的性能和可靠性。
本实验旨在通过设计和实现一个简单的内存管理系统,加深对操作系统内存管理原理的理解,并通过实践来加深对操作系统的认识。
一、实验背景计算机内存是计算机系统中的重要组成部分,它用于存储程序和数据。
在操作系统中,内存被划分为多个不同的区域,每个区域有不同的用途和访问权限。
内存管理的主要任务是为进程分配内存空间,并进行合理的管理和调度,以提高系统的性能和资源利用率。
二、实验目的本实验旨在通过设计和实现一个简单的内存管理系统,加深对操作系统内存管理原理的理解,并通过实践来加深对操作系统的认识。
具体目标包括:1. 设计和实现一个简单的内存分配算法,实现内存的动态分配和回收;2. 实现内存的地址映射机制,实现虚拟地址到物理地址的转换;3. 实现内存保护机制,确保进程之间的内存隔离和安全性;4. 实现内存的页面置换算法,提高内存的利用率和性能。
三、实验设计与实现1. 内存分配算法为了实现内存的动态分配和回收,我们设计了一个简单的内存分配算法。
该算法根据进程的内存需求和剩余内存空间的大小,选择合适的内存块进行分配。
当进程结束或释放内存时,将已使用的内存块标记为空闲状态,以便下次分配。
2. 地址映射机制为了实现虚拟地址到物理地址的转换,我们设计了一个地址映射机制。
该机制使用页表来记录虚拟地址与物理地址的映射关系。
当进程访问内存时,操作系统根据页表将虚拟地址转换为物理地址,并进行内存访问。
3. 内存保护机制为了确保进程之间的内存隔离和安全性,我们实现了一个简单的内存保护机制。
该机制通过设置每个进程的访问权限,限制进程对内存的读写操作。
只有获得相应权限的进程才能访问内存,确保进程之间的数据安全和隔离。
虚拟地址和物理地址转换
参考如下
虚拟地址虚拟地址空间
虚拟地址并不真实存在于计算机中。
每个进程都分配有自己的虚拟空间,而且只能访
问自己被分配使用的空间。
理论上,虚拟空间受物理内存大小的限制,如给有4gb内存,
那么虚拟地址空间的地址范围就应该是0x00000000~0xffffffff4gb。
为什么每个进程的虚拟地址空间范围会这么大?这涉及地址映射机制;当程序实际运
行时,系统将首先将虚拟地址映射到物理地址中的范围。
另外一个概念:虚拟内存。
虚拟内存是内存中的一片连续地址空间。
在物理存储位置
上的意义,不一定就是指物理内存,可能也是在硬盘上开辟的一篇地址空间。
物理地址
物理地址用于内存芯片级的单元寻址,与处理器和cpu连接的地址总线相对应。
--这个概念应该是这些概念中最容易理解的,但值得一提的是,虽然物理地址可以直
接理解为插入机器上的内存本身,但内存可以被视为一个从0字节到最大空容量逐字节编
号的大数组,然后该数组被称为物理地址,实际上,它只是一个由硬件提供给软件的映像,内存不是以这种方式寻址的。
因此,更恰当的说法是“与地址总线相对应”。
然而,无论
物理内存的寻址模式如何,都可以将物理地址逐个直接对应到物理内存。
也许错误的理解
更有利于形而上学的抽象。
虚地址到物理地址的转换过程
MVA修改的虚拟地址,由CPU#1生成
step1.通过ttbr找到粗表描述符
转换表基址#2+MVA的厚页表索引=厚页表的物理地址
step2.通过粗表描述符找到小页描述符
粗页表基址#3+MVA的小页表索引=小页表的物理地址
step3.通过小页描述符找到物理地址
小页面基址的页面索引#4+MVA=物理地址
step1得到的粗页表的物理地址位定义
步骤2中获得的小页表的物理地址位定义
step3得到的物理地址位定义
注1:严格来说,该地址可能由FCSE或ARM926EJ-S处理器生成
注2:转换表基地址保存在ttbr,详见ttbr
注3:厚页表的基址保存在厚页表描述符中。
有关详细信息,请参见厚页表描述符
注4:小页表基地址保存在粗页表描述符中,详见小页表描述符
--------------------------------------------------------------------------------------
cp15
系统控制协处理器CP15用于配置和控制ARM926EJ-S处理器。
缓存和MMU由CP15寄存器控制。
访问CP15寄存器需要特殊说明。
arm926ej-s系统中的地址
ARM926EJ-S生成的地址是虚拟地址va。
FCSE快速上下文切换控制器将va转换为修改后的虚拟地址MVA供MMU使用,MMU将MVA转换为TCM和AMBA总线的物理地址PA。
cp15的c1寄存器
C1寄存器是ARM926EJ-S处理器的控制寄存器。
该寄存器用于启用或禁用缓存以及配置MMU。
i0:禁用icache,1使能icache
C0:禁用DCache,1启用DCache
如果c1寄存器禁用了cache,小页表的c、b位是无效的。
tlb
mmu是os分页内存管理的硬件基础。
mmu使用tlbtranslationlookasidebuffer,即旁路转换缓冲,或称为页表缓冲;用来存放虚拟地址到物理地址的转换表将虚拟地址转换为物理地址。
TLB保存在SDRAM中。
ttbr
Ttbr是翻译表基址寄存器的缩写。
其中文全称为:翻译表基址寄存器。
Ttbr是协处理器CP15的C2寄存器。
由于读取ttbr时bit13~bit0是不可预测的,所以粗页表的起始地址必须是按64k对齐的。
粗表描述符
填充为红色的位固定为0/1。
bit8~bit5为域控制位,可以定义16个域。
小页面描述符
填充为红色的位固定为0/1。
ap3~ap0为访问控制位,访问控制位和域控制位配合完成了对内存访问权限的管理。
在boot中,禁用域控制,同时将ap3~ap0全部设置为3任何人都可以读写。
只关注ccache控制位,bbuffer控制位。
#写下来。
读取命中、从dcche读取数据、读取未命中、缓存线填充;写入命中、使用DCache写入数据、缓冲区到外部内存、写入未命中、缓冲区到外部内存
#写回。
读命中,从dcache读取数据,读未命中,cache行填充;写命中,写数据带dcache;写未命中,缓冲到外部存储器
从虚拟地址到物理地址的转换步骤
已知一个虚拟地址0x01af5518,则转换的过程如下:
注:*此处讨论windows下正常模式下的分页情况,即二级页表的情况*
1.首先把虚拟地址拆分成3个部分低12位,中10位,高10位,换成2进制如下:
->00000001101011110101010100011000
按照10,10,12的位数重新排列后
->页面目录索引0000000 110,页面表条目索引1011110101,偏移量0101000011000
换算成十六进制后可以得到如下结果
页面目录索引=6,页面表条目索引=0x2f5,偏移量=0x518
2.根据当前的cr3寄存器中的物理地址定位页目录表基址
CR3存储物理地址,该地址指向进程的页目录表的基址
页目录表基址pde=cr3=0xaa0e5000
3.计算页面表项的地址
页表地址存放在页目录表pde中的第6个项目中,也就是
[0xaa0e5000+4*6]=[0xaa0e5018]=0x3d955867,其中0x00000867是页表的属性值,PTE=0x3d955000
3.计算页面物理地址
我们要查找的页面位于页面表的0x2f5项中,因此虚拟地址所在页面的物理地址为
[0x3d955000+0x2f5*4]=[0x3d955bd4]=
假设[0x3d955bd4]=0x7095e847,则页面x0x7095e000,0x00000847的物理地址代表页面属性
4.计算最终的物理地址
由虚拟地址分隔的偏移量可以计算出最终的物理地址
0x7095e000+0x00000518=0x7095e518.。