首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Windows内核地址空间中将虚拟地址转换为物理地址

在Windows内核地址空间中,将虚拟地址转换为物理地址的过程是通过页表来实现的。页表是一种数据结构,用于将虚拟地址映射到物理地址。它将虚拟地址空间划分为固定大小的页,并将每个页映射到物理内存中的对应页框。

具体的转换过程如下:

  1. 当应用程序访问一个虚拟地址时,操作系统会将该虚拟地址分解为页目录索引、页表索引和页内偏移三个部分。
  2. 操作系统根据页目录索引找到对应的页目录表,再根据页表索引找到对应的页表。
  3. 在页表中,操作系统根据页表索引找到对应的页表项,该页表项记录了该虚拟地址对应的物理页框号。
  4. 操作系统将物理页框号与页内偏移组合,得到物理地址。

优势:

  • 虚拟地址转换为物理地址的过程是通过硬件支持的,可以提高地址转换的速度和效率。
  • 通过虚拟地址空间的划分,可以实现内存的隔离和保护,提高系统的安全性。
  • 可以实现内存的共享,多个进程可以共享同一物理页框,减少内存的占用。

应用场景:

  • 操作系统内存管理:虚拟地址转换为物理地址是操作系统进行内存管理的基础,用于实现进程的地址空间隔离和保护。
  • 虚拟内存:虚拟内存是一种将磁盘空间作为扩展内存的技术,通过虚拟地址转换为物理地址,实现了对磁盘上数据的透明访问。
  • 内存映射文件:将文件映射到内存中,通过虚拟地址转换为物理地址,实现了对文件的直接读写操作。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )

文章目录 一、物理地址空间 二、外围设备寄存器 三、外围设备寄存器物理地址 映射到 虚拟地址空间 一、物理地址空间 ---- " 物理地址空间 “ 是 CPU 处理器 ” 总线 " 上 访问内存的地址..., RISC 处理器 只能访问 物理地址空间 , 系统的 外围设备 与 物理内存 都使用 统一的物理地址空间 访问 ; RISC 全称 " Reduced Instruction Set Computer..." , 精简指令集计算机 ; 分配给 " 外围设备 " 的 物理地址 , 又称为 " 设备内存 " ; ARM64 架构的系统中 , 物理地址空间 分为 2 类 : ① 正常内存 : Normal...映射到 虚拟地址空间 用户空间 的 应用进程 , 访问 " 外围设备寄存器 " 只能通过 " 虚拟地址 " 实现 , Linux 内核 提供了 相关 API 函数 , 将 " 外围设备寄存器 “ 对应的...” 物理地址 “ 映射到了 ” 虚拟地址空间 " 中 ;

3.2K20

Linux内核页表管理-那些鲜为人知的秘密

1)地址转换 将虚拟地址换为物理地址 2)权限管理 管理cpu对物理页的访问,如读写执行权限 3)隔离地址空间 隔离各个进程的地址空间,使其互不影响,提供系统的安全性 打开mmu后,对没有页表映射的虚拟内存访问或者有页表映射但是没有访问权限都会发生处理器异常...页表存放在物理内存中,打开mmu之后,如果需要修改页表,需要将页表所在的物理地址映射到虚拟地址才能访问页表(如内核初始化后会将物理内存线性映射,这样通过物理地址虚拟地址的偏移就可以获得页表物理地址对应的虚拟地址...虚拟地址转换物理地址的过程:打开mmu后,cpu访问的都是虚拟地址,当cpu访问一个虚拟地址的时候,会通过cpu内部的mmu来查询物理地址,mmu首先通过虚拟地址tlb中查找,如果找到相应表项,直接获得物理地址...1时,使用ttbr1_el1作为起点(访问的是内核空间地址) mmu从相应的页表基地址寄存器中获得L0换表基地址。...2.找到L0级转换表,然后从虚拟地址中获得L0索引,通过L0索引找到相应的表项(arm64中称为L0表描述符,内核中叫做PGD表项),从表项中获得L1换表基地址

1.8K22
  • 深入理解Aarch64的内存管理

    软件操作系统上运行只能看到虚拟地址,而处理器负责把虚拟地址换为物理地址。这些物理地址最终都会被内存系统转换为实际的物理位置。...当操作系统不同的应用程序之间切换的时候,它会重新组织物理地址虚拟地址的映射关系。这就意味着不同的应用程序都会映射到正确的物理位置。 虚拟地址通过映射关系转换为物理地址。...如果在TLB中没有找到,Table wake unit会从内存中读取适当的table entry(一个或多个),如下所示: 进行内存访问时,虚拟地址必须被转换为物理地址。...stage1,操作系统认为 IPA 是物理地址空间。但是,hypervisor控制第二组转换,我们称之为stage2。stage2换将 IPA 转换为物理地址。...下图显示了 AArch64 中虚拟地址空间的布局: 如左图所示,EL0/EL1的虚拟地址空间有两个区域:内核空间和用户空间内核空间顶部,用户空间底部。内核空间和用户空间有各自单独的转换表。

    1.4K20

    技术|Intel 设计缺陷背后的原因是什么?

    Microsoft自11月份开始也内部测试了Windows更新,并且它预计在下周二的例行补丁中将这个改进推送到主流Windows构建版中。...虽然虚拟地址对每个软件几乎是透明的,但是,处理器最终还是需要知道虚拟地址引用的物理地址是哪个。因此,有一个虚拟地址物理地址的映射,它保存在一个被称为页面表的数据结构中。...操作系统构建页面表,使用一个由处理器决定的布局,并且处理器和操作系统虚拟地址物理地址之间进行转换时就需要用到页面表。...其中最主要的是,每个程序都有了自己独立的一组虚拟地址,有了它自己的一组虚拟地址物理地址的映射。...页面表并不仅仅有虚拟地址物理地址的映射;它也包含关于这些地址的元数据,包含哪个Ring可能访问哪个地址的信息。内核页面表条目被标记为仅有Ring0可以访问;程序的条目被标记为任何Ring都可以访问。

    50640

    MIT 6.S081 (BOOK-RISCV-REV1)教材第三章内容 -- 页表

    因为 CPU 执行转换时会在硬件中遍历三级结构,所以缺点是 CPU 必须从内存中加载三个 PTE 以将虚拟地址换为物理地址。...物理内存以一个字节为单位划为地址,称为物理地址。指令只使用虚拟地址,分页硬件将其转换为物理地址,然后将其发送到DRAM硬件来进行读写。...内核配置其地址空间的布局,以允许自己以可预测的虚拟地址访问物理内存和各种硬件资源。图3.3显示了这种布局如何将内核虚拟地址映射到物理地址。...*(注:Guard page不会浪费物理内存,它只是占据了虚拟地址空间的一段靠后的地址,但并不映射到物理地址空间。)* 虽然内核通过高地址内存映射使用内核栈,但是它们也可以通过直接映射的地址进入内核。...更严肃的内核设计利用页表将任意硬件物理内存布局转换为可预测的内核虚拟地址布局。 RISC-V支持物理地址级别的保护,但xv6没有使用这个特性。

    1.1K40

    Linux内核 MMU的工作原理

    虚拟地址空间虚拟地址相对应的则是物理地址空间物理地址, 大多数时候,我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集, 这时举一个最简单的例子直观的说明这两者,对于一台内存为256MB...MOVE REG , 20500 被转换为----> MOVE REG, 12308 因为虚拟地址20500 虚页5(虚拟地址范围是20480 到 24575)距开头20个字节处,虚页5映射到页框3...也就是说,虚拟地址空间物理地址空间是独立的,32位处理器的虚拟地址空间是4GB,而物理地址空间既可以大于也可以小于4G。...,都会引发MMU 做查表和地址主换操作。...用户空间内核空间 通常操作系统把虚拟地址划分为用户空间内核空间,例如 X86平台的Linux 系统虚拟地址空间是0x00000000 - 0xFFFFFFFF,前3GB(0x00000000 - 0xBFFFFFFF

    2K20

    谈谈物理内存与虚拟内存之间的映射(超详细~)

    前一种情况以提高存储容量为目的,后一种情况则以地址换为目的。后者通常出现在多用户或多任务系统中:实存空间较大,而单个任务并不需要很大的地址空间,较小的虚存空间则可以缩短指令中地址字段的长度。...CPU执行这行代码时,发现寄存器中的分页标志位已经被设定,就自动完成虚拟地址物理地址的转换,使用物理地址取出值,完成指令。...一个虚拟地址转换成物理地址的计算过程就是:处理器通过CR3找到当前页目录所在物理页,取虚拟地址的高10bit,然后把这10bit左移2bit(因为每个页目录项4个字节长,左移2bit相当于乘4)得到该页中的地址...内核空间内核根据独立且唯一的页表init_mm.pgd 进行映射,而用户空间的页表则每个进程一份。 8. 每个进程的内存空间完全独立,因此不同进程之间交换虚拟地址毫无意义。...虚拟地址空间物理地址空间对应:虚拟地址空间指的是进程的可用地址空间范围。而物理地址空间指的是实际可用的内存空间范围。

    2.4K20

    【操作系统】内存管理概述

    它的核心思想是建立一个 虚拟地址空间,将一个程序分成代码段,数据段,堆栈段什么的,每个段各自管理不同的数据。虚拟地址空间物理地址空间之间做映射,实现进程的隔离。...如果没有启动分页机制,系统启动后就通过直接变为了物理地址。 结构图 启动MMU后,CPU访问的是虚拟地址虚拟地址经过MMU后转换为物理地址,这种转换通过查询存储主存储器的页表完成。...假设,现在虚拟地址已经转换为物理地址。这个时候就会去找一级缓存。看一级缓存有没有需要的数据。我们这里采用的是物理索引(PI),物理标签(PT)的方式。...以上就是虚拟地址换为物理地址的过程。 MMU访问页表是硬件实现的,但页表的创建和填充需要Linux内核来填充。通常,一级页表和二级页表存放在主存储器中。...线性映射就是直接把物理地址空间映射到3G ~ 4G的地址空间,这段映射关系就变得比较简单了,内核访问时直接使用虚拟地址减去偏移量(page offset)就得到物理地址了。

    14110

    《笨开发学习操作系统》3内存

    虚拟地址物理地址如何关联 虚拟地址只是一个虚拟的东西,最终我们的数据还是存放在物理地址上。那么势必需要建立虚拟地址物理地址映射的桥梁。那么他们之间如何关联呢?...MMU 叫做内存管理单元,给他虚拟地址,他就能帮你转换为实际的物理地址。那 MMU 究竟是如何做的呢?...你是不是想的非常简单,只需要一个 map,key 是虚拟地址,value 是物理地址,这样不就好了吗?那光是存放这个 map 就花费太多存储空间了。...当 MMU 需要将一个虚拟地址换为一个物理地址的时候,就会先问 TLB,如果 TLB 知道那么就直接返回,不需要重新进行页表的查询。...内存中放了什么 首先有了虚拟地址,全部的地方也并非都是你的,你至少要留一部分给内核。所以一部分为内核空间,一部分为用户空间

    39110

    内存系列学习(一):万字长文带你搞定MMU&TLB&TWU

    虚拟地址空间虚拟地址相对应的则是物理地址空间物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集。...在这里插入图片描述 要做到这一点,虚拟内存系统中的硬件必须提供地址转换,即把处理器发出的虚拟地址换为主内存中的物理地址虚拟地址是你、编译器和链接器在内存中放置代码时使用的地址。...(1)-虚拟地址位宽 虚拟地址的最大宽度是48位 内核虚拟地址64位地址空间的顶部,高16位是全1,范围是[0xFFFF 0000 0000 0000,0xFFFF FFFF FFFF FFFF];...ARM64架构的Linux内核中,内核虚拟地址和用户虚拟地址的宽度相同。...• 所有进程共享内核虚拟地址空间, • 每个进程有独立的用户虚拟地址空间, • 同一个线程组的用户线程共享用户虚拟地址空间内核线程没有用户虚拟地址空间

    1.8K31

    xv6(3) 内存管理部分

    内存管理部分 内存管理这部分我没有集中在一起叙述,本节只是讲述物理内存如何组织管理,页表的内核部分如何创建的,与地址转换的启动理论那一块儿说了,虚拟地址空间的用户部分在进程那儿叙述,堆内存管理也进程那一块儿讲述...#define KERNLINK (KERNBASE+EXTMEM) // 内核文件的链接地址 #define V2P(a) (((uint) (a)) - KERNBASE) //内核虚拟地址物理地址...,看起来可能很麻杂,做了一张表格和图: 从这张图可以看出,内核部分的虚拟地址空间物理地址空间就是一一对应的,只是相差了 0x8000 0000,所以这就是为什么简单的宏 V2P,P2V 就可以实现虚拟地址物理地址之间的转换...这里要注意在切换内核页表之前使用的临时页表映射了虚拟地址空间的 $[0,4M)$ 映射到物理地址 $[0,4M)$,$[KERNEL, KERNEL+4M)$ 映射到 $[0,4M)$ ,开启分页机制后仍然有些机制使用的低...切换到正式页表前,因为虚拟地址空间的低地址和高地址都有内核的映射,我们可以说内核处于低地址,也可以说内核处于高地址,没得问题。现在,切换到正式页表,不映射低 4M 的虚拟地址空间,低地址是用户用的。

    30510

    如何将虚拟机的虚拟地址转化为宿主机的物理地址

    背景介绍 一般情况下,Linux系统中进程的4GB内存空间被划分为2个部分-------用户空间内核空间,大小分别为0~3G,3~4G。...用户进程通常,只能访问用户空间虚拟地址,不能访问内核空间虚拟地址。 什么是物理内存? 指通过物理内存条获得的内存空间,主要作用为计算机运行时为操作系统和程序提供临时储存。 什么是虚拟内存?...这个时候需要VMM的介入,VMM 需要 intercept (截获)虚拟机的内存访问指令,然后 virtualize(模拟)Host 上的内存,相当于 VMM 虚拟机的虚拟地址空间和 Host 机的虚拟地址空间中间增加了一层...显然 物理地址 = 基地址 + 虚拟地址 当分段时:整个程序的内存空间不再连续,每一段都有自己独特的基地址,但是虚拟地址还是相对于之前只有一个基地址时的值,那么此时虚拟地址就无法直接表示其第几个内存空间了...计算机虚拟内存的概念中,页、内存页或者虚拟页是指内存中的一段固定长度的快,这个内存块物理地址和虚拟内存地址上都是连续的。

    2.6K30

    Liunux内核内存管理之虚拟地址空间

    进程的虚拟地址空间分为用户区(03G)和内核区(34G), 其中内核区是受保护的, 用户是不能够对其进行读写操作的; 内核区对于所有进程是共享的;系统中所有进程对应的虚拟地址空间内核区都会映射到同一块物理内存上...虚拟地址空间中用户区地址范围是 0~3G,里边分为多个区块: 保留区: 位于虚拟地址空间的最底部,未赋予物理地址。任何对它的引用都是非法的,程序中的空指针(NULL)指向的就是这块内存地址。...MMU完成虚拟内存到物理内存的映射,即虚拟地址映射为物理地址; 流水线中预取指令取到的地址虚拟地址,需要MMU转换以及设置访问权限 MMU采用分页机制(即按页来划分物理内存) 用MMU的是:Windows...虚拟地址物理地址的映射关系存储页表中,而现在页表又是分级的 页表: 实现从页号到物理块号的地址映射。...代码中调用接口,实现内核空间与用户空间地址映射,实时性要求很高的项目中为首选,省去拷贝数据的时间等资源,但缺点是不好控制; 3)驱动程序。

    1.1K20

    【Linux】从零开始认识多线程 --- 线程概念与底层实现

    CPU可以通过虚拟地址换为物理地址,这是怎么进行的。接下来我们就来谈谈页表,按我们之前的理解页表是虚拟地址映射物理地址的。...虚拟地址有2^32个地址:每个地址都是这样的32位序列 0000 0101 0010 0000 0110 1001 1100 1000。那么虚拟地址是如何转换为物理地址的呢???...C部分中的12位作为页内偏移,与页框的起始地址进行加和,就能找到对应字节! 这样就将虚拟地址换为物理地址!!! 也就看出来:页表的本质就是搜索页框!通过最后12位来找到对应字节!...它存储了当前任务页目录表(Page Directory Table, PDT)的物理地址。页目录表是一个数据结构,用于启用分页时转换虚拟地址物理地址。...通过这个寄存器与MMU的硬件电路配合,就可以成功转换为物理地址! 1.3 理解代码数据划分的本质 地址空间的各个分区是通过限定一批虚拟地址空间的范围来实现分区。

    19510

    Linux内存寻址之分段机制及分页机制【

    分段机制把一个逻辑地址换为线性地址;接着,分页机制把一个线性地址换为物理地址。 ?...分段机制的实现 段是虚拟地址空间的基本单位,分段机制必须把虚拟地址空间的一个地址换为线性地址空间的一个线性地址。...段的界限(Limit):虚拟地址空间中,段内可以使用的最大偏移量。 段的保护属性(Attribute):表示段的特性。...分页机制段机制之后进行,以完成线性—物理地址的转换过程。段机制把逻辑地址换为线性地址,分页机制进一步把该线性地址再转换为物理地址。 硬件中的分页 分页机制由CR0中的PG位启用。...Linux软件层面构造的虚拟地址,最终还是要通过MMU转换为物理地址,也就是说,不管Linux的分页机制是怎样实现的,CPU只按照它的分页实现来解读线性地址,所以Linux传给CPU的线性地址必然是满足硬件实现的

    3.5K50

    别再说你不懂Linux内存管理了,10张图给你安排的明明白白!

    用户空间内核空间 物理地址 上面章节我们已经知道不管是用户空间还是内核空间,使用的地址都是虚拟地址,当需进程要实际访问内存的时候,会由内核的「请求分页机制」产生「缺页异常」调入物理内存页。...用户进程通常只能访问用户空间虚拟地址,只有执行内陷操作或系统调用时才能访问内核空间。...= PAGE_OFFSET + 物理地址」也可以用 virt_to_phys()函数将内核虚拟空间中的线性地址转化为物理地址。...下面给你解释一下: 前面已经说过,内核空间的总大小 1GB,从内核空间起始地址开始的 896MB 的线性地址可以直接映射到物理地址大小为 896MB 的地址区间。...与用户空间虚拟地址特性一样,这些虚拟地址与物理内存没有简单的映射关系,必须通过内核页表才可转换为物理地址或物理页,它们有可能尚未被映射,当发生缺页时才真正分配物理页面。 ?

    1.8K20

    Linux下内存空间分配、物理地址虚拟地址映射

    一、Linux内核动态内存分配与释放 1.1 kmalloc函数 Kmalloc分配的是连续的物理地址空间。...phys_to_virt只是计算出某个已知物理地址所对应的虚拟地址。将内核物理地址转化为虚拟地址。 virt_to_phys :将内核虚拟地址转化为物理地址。...三、​ IO地址空间映射 3.1 ioremap函数 ioremap将一个IO地址空间映射到内核虚拟地址空间上去,便于访问。...与虚拟地址空间虚拟地址相对应的则是物理地址空间物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集。...启动MMU后,CPU核心对外发出的是虚拟地址VA,VA被转换为MVA供cache、MMU使用,并再次被转换为PA,最后使用PA读取实际设备。

    3.4K31

    volatility 各个选项的详解

    Commands: amcache:查看Amcache应用程序痕迹信息 apihooks:检测内核及进程的内存空间中的API hook atoms:列出会话及窗口站atom表 atomscan...dlldump:从进程地址空间储动态链接库 dlllist:打印每个进程加载的动态链接库列表 ....格式)提取物理内存数据 hpakinfo:查看HPAK文件属性及相关信息 idt:显示中断描述符表 iehistory:重建IE缓存及访问历史记录 imagecopy:将物理地址空间导出原生...Qemu信息 raw2dmp:将物理内存原生数据转换为windbg崩溃储格式 screenshot:基于GDI Windows的虚拟屏幕截图保存 servicediff:Windows...从内存中的注册表信息获取机器关机时间 sockets:打印已打开套接字列表 sockscan:TCP套接字对象池扫描 ssdt:显示SSDT条目 strings:物理到虚拟地址的偏移匹配

    5K20

    【Binder 机制】进程通信 | 用户空间内核空间 | MMU 与虚拟内存地址

    " 用户态 " ; 三、MMU 与虚拟内存地址 ---- 每个 应用进程 的 内存空间 使用的地址都是 独立的 , 连续的 , 虚拟地址 ; 内存管理单元 ( MMU - Memory Management...Unit ) 的作用就是进行 内存映射的 ; MMU 的作用是将真实的 内存 物理地址 转为 虚拟地址 , 虚拟地址 又称为 逻辑地址 , 一般情况下虚拟地址大小远远大于物理地址 ; MMU 可以让每个进程都拥有独立的连续的内存空间...^{64} , 这个寻址空间很大 , 一般是使用前 40 位 , 大概是 18 TB ; 64 位操作系统 , 使用的是 四级分页 ; 32 位的系统中 , MMU 会让每个应用都有...1 个 4 GB 大小的空间 , Linux 系统内核空间占 1 GB , 用户空间 3 GB ; 0 ~ 3 GB 是用户空间地址 , 3 ~ 4 是内核空间地址 ;...Windows 系统内核空间占 2 GB , 用户空间 2 GB ; 虚拟地址的必要性 : 代码编译完成之后 , 地址是分配好的 , 都是从 0 地址开始计数的 , 因此如果要保证程序的运行

    1.8K10

    ARM32 内核内存布局

    Linux内核启动时会打印出内核内存空间的布局图,下面是ARM Vexpress平台打印出来的内存空间布局图: ? 这部分信息打印是mem_init()函数中实现的。...这1GB的映射空间,其中有一部分用于直接映射物理地址。这个区域称为线性映射区。ARM32平台上,物理地址[0:760MB]的这一部分内存被线性映射到[3GB:3GB+768MB]的虚拟地址上。...线性映射区的虚拟地址物理地址相差PAGE_OFFSET,即3GB。...unsigned long __phys_to_virt(phys_addr_t x) { return x - PHYS_OFFSET + PAGE_OFFSET; } 其中,__pa()把线性映射区的虚拟地址换为物理地址...内核许多驱动使用vmalloc来分配连续的虚拟地址的内存,因为有的驱动不需要连续的物理地址的内存;除此之外,vmalloc还可以用于高端内存的临时映射。

    1.6K20
    领券