关于虚拟地址和物理地址的问题

谁学逆向工程 2020-09-22 11:10:42
电脑开机我知道是从是模式地址开始启动,这时候都读写物理地址。要想开启保护模式就得填写页目录和页表,想填写就得访问,这时候都还是空项,应该是读写的物理地址来填写的吧?

上面是开机时候的疑问,还有开机以后的疑问。当启动记事本的时候,Windows也要给它分配物理页,把虚拟地址和物理地址映射起来,这个给记事本填表的过程是用虚拟还是物理地址访问的页表?

而且每个进程都有自己的页目录和页表,Windows 是怎么掌控每个进程映射表的,以防止各自映射的物理页冲突、覆盖?
...全文
225 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看Intel 64 and IA-32 Architectures Software Developer's Manual第一卷 基本架构 即可
谁学逆向工程 2020-09-22
  • 打赏
  • 举报
回复
引用 1 楼 早打大打打核战争 的回复:
你说的虚拟地址

哪本书讲这块知识点比较好,求推荐
  • 打赏
  • 举报
回复
你说的虚拟地址在intel的术语中叫逻辑地址,x86/x64架构中一般不使用虚拟地址这个术语(唯一用到的可能是“虚拟地址空间”,指理论最大可用空间)
1. 页目录表(首地址由CR3寄存器指向)和页表在内存中的位置都是物理地址,不需要再变换
2. 每个进程有自己的页表,由操作系统维护,进程切换的时候页表也切换了,内核只需要把自身占用的一部分页面映射为 逻辑地址=线性地址=物理地址 就可以象实模式一样简单访问,各种描述符表、页表都放在这部分内存中,windows一般称之为不分页内存,实际也是分页的,只是这部分内存永远不会被交换到磁盘页面文件中
3. 显然操作系统有一个表记录内存页面使用情况,比如1代表该页面已分配,0代表空闲,需要给某个进程分配页面时,优先从空闲的页面分配,如果不够则把部分已分配页面交换出去(注意被交换的页面不一定完全是其他进程占用的页面,也可能是同一进程的其他部分,也就是拆东墙补西墙),空闲出一部分页面再分配

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧