社区
其它技术问题
帖子详情
关于虚拟地址和物理地址的问题
谁学逆向工程
2020-09-22 11:10:42
电脑开机我知道是从是模式地址开始启动,这时候都读写物理地址。要想开启保护模式就得填写页目录和页表,想填写就得访问,这时候都还是空项,应该是读写的物理地址来填写的吧?
上面是开机时候的疑问,还有开机以后的疑问。当启动记事本的时候,Windows也要给它分配物理页,把虚拟地址和物理地址映射起来,这个给记事本填表的过程是用虚拟还是物理地址访问的页表?
而且每个进程都有自己的页目录和页表,Windows 是怎么掌控每个进程映射表的,以防止各自映射的物理页冲突、覆盖?
...全文
225
3
打赏
收藏
关于虚拟地址和物理地址的问题
电脑开机我知道是从是模式地址开始启动,这时候都读写物理地址。要想开启保护模式就得填写页目录和页表,想填写就得访问,这时候都还是空项,应该是读写的物理地址来填写的吧? 上面是开机时候的疑问,还有开机以后的疑问。当启动记事本的时候,Windows也要给它分配物理页,把虚拟地址和物理地址映射起来,这个给记事本填表的过程是用虚拟还是物理地址访问的页表? 而且每个进程都有自己的页目录和页表,Windows 是怎么掌控每个进程映射表的,以防止各自映射的物理页冲突、覆盖?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
日立奔腾浪潮微软松下联想
2020-09-23
打赏
举报
回复
看Intel 64 and IA-32 Architectures Software Developer's Manual第一卷 基本架构 即可
谁学逆向工程
2020-09-22
打赏
举报
回复
引用 1 楼 早打大打打核战争 的回复:
你说的虚拟地址
哪本书讲这块知识点比较好,求推荐
日立奔腾浪潮微软松下联想
2020-09-22
打赏
举报
回复
你说的虚拟地址在intel的术语中叫逻辑地址,x86/x64架构中一般不使用虚拟地址这个术语(唯一用到的可能是“虚拟地址空间”,指理论最大可用空间)
1. 页目录表(首地址由CR3寄存器指向)和页表在内存中的位置都是物理地址,不需要再变换
2. 每个进程有自己的页表,由操作系统维护,进程切换的时候页表也切换了,内核只需要把自身占用的一部分页面映射为 逻辑地址=线性地址=物理地址 就可以象实模式一样简单访问,各种描述符表、页表都放在这部分内存中,windows一般称之为不分页内存,实际也是分页的,只是这部分内存永远不会被交换到磁盘页面文件中
3. 显然操作系统有一个表记录内存页面使用情况,比如1代表该页面已分配,0代表空闲,需要给某个进程分配页面时,优先从空闲的页面分配,如果不够则把部分已分配页面交换出去(注意被交换的页面不一定完全是其他进程占用的页面,也可能是同一进程的其他部分,也就是拆东墙补西墙),空闲出一部分页面再分配
虚拟地址
和
物理地址
之间的区别
虚拟地址
和
物理地址
在概念上是抽象的,它们本身没有具体的形态,而是在计算机系统中的一种逻辑概念。
虚拟地址
:你可以将
虚拟地址
类比为信件上的收信地址,它是程序员或进程看到的地址,用于访问内存中的数据或指令。在计算机系统中,
虚拟地址
是由操作系统分配给进程的,每个进程都有自己的
虚拟地址
空间。
虚拟地址
可以被映射到
物理地址
,但它们本身并没有直接对应到实际的硬件上。
物理地址
:
物理地址
可以类比为信件实际所在的位置,它是内存中的实际地址,对应于内存芯片上的存储单元。
物理地址
是硬件直接访问的地址,用于实际读取或写入内存中的数据。
虚拟地址
和
物理地址
1、地址概念
物理地址
:物理内存就是真实的内存,CPU的地址线可以直接进行寻址的内存空间大小。比如在32位平台下,寻址的范围是2^32也就是4G,并且这是固定的。 在实际的应用中,很多的应用程序都比较大,计算机实际所配置的内存空间无法满足。所以出现了虚拟内存技术。经过不断有目的的换入和换出,处理器似乎是拥有了一个大于实际物理内存的内存空间。于是,这个存储空间叫做虚拟内存空间,而把真正的内存叫做实际物理内存,或简称为物理内存。 对32位处理器,虚拟内存空间为4G,每个进程都认为自己拥有4G的空间;实际上,
虚拟地址
和
物理地址
的含义
虚拟地址
和
物理地址
的概念 CPU通过地址来访问内存中的单元,地址有
虚拟地址
和
物理地址
之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为
物理地址
(Physical Address,以下
[嵌入式系统-8]:逻辑地址、
虚拟地址
、
物理地址
以及地址映射
在计算机系统中,无论是程序,还是数据,都是按照地址存放的,然而,
物理地址
空间是有限的,应用程序是无限的,如何使用有限的
物理地址
空间,容纳无限的应用程序呢?本文探讨常见的三种类型的地址,看看他们是如何复用有限的
物理地址
空间?逻辑地址、
虚拟地址
、
物理地址
。在计算机系统中,逻辑地址是指程序中使用的地址,它是相对于程序自身的地址空间而言的。逻辑地址是由程序生成和使用的,它不直接映射到物理硬件上的存储单元,而是需要经过地址转换才能最终映射到
物理地址
上。在运行时,当程序访问内存中的数据或指令时,使用的是逻辑地址。
虚拟地址
与
物理地址
我们可以看到子进程会对num的值进行修改,父进程和子进程中num使用的地址空间是相同的,但是如果二者的地址相同,任意一个进程对该地址内存储的数据进行修改后,另一个进程再访问时,访问的应该就是被修改的值,不过此时我们看到的却是二者虽然共用一个地址空间,但是其中一个修改并不会影响到另一个进程访问的结果。的,每个页表映射的是物理空间不同的区域,所以只要页表不同,就算进程的
虚拟地址
相同,进程间也不会相互干扰,保证了进程的独立性。CPU访问的也是
虚拟地址
,它需要通过页表找到对应的
物理地址
,再访问
物理地址
。
其它技术问题
3,882
社区成员
9,046
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章