windows内核:为什么操作系统可以有多个进程,且每个进程都拥有整个用户模式地址空间

996.icu LICENSE

  • 问题背景
  • 解决方法
  • 总结

阅读之前注意:

本文阅读建议用时:10min
本文阅读结构如下表:

项目下属项目测试用例数量
问题背景0
解决方法0
总结0

问题背景

问题背景来自《Practical Reverse Engineering》书中这一段:

When a thread in a process is scheduled for execution, the OS changes a processor-specific register to point to the page directory for that particular process. This is so that all virtual-to-physical address translations are specific to the process and not others. This is how the OS can have multiple processes and each one has the illusion that it owns the entire user-mode address space. On x86 and x64 architectures, the page directory base register is CR3; on ARM it is the translation table base register (TTBR).
——《Practical Reverse Engineering》.Bruce Dang Alexandre Gazet Elias Bachaalany
with contributions from Sébastien Josse

阅读这一段时,由于对windows系统不甚了解,初看也是一脸懵。

解决方法

后来参考这篇文章,结合自己理解,终于弄明白了。
我之前之所以看不懂,是不清楚什么是page directory(页目录),直白说,这就是物理地址。而所谓的用户模式地址空间,就是虚拟地址。
为什么每个进程都拥有整个用户模式地址空间?换句话说,为什么不同的进程可以有相同的虚拟地址呢?
因为虚拟地址那是虚拟的,当不同进程进行切换时,会有一个特定的寄存器载入不同的物理地址(page directory /页目录),之后内存的访问都是基于这个物理地址做偏移(可以把虚拟地址理解为做的偏移),这样虚拟地址看上去相同,但实际的物理地址已经不同了。
对于x86和x64架构,上面说的特定寄存器就是CR3,对于ARM架构,这个特定寄存器则是TTBR。

总结

虚拟地址是虚拟的!操作系统做进程切换时,物理地址会做切换,但进程还是可以拥有整个虚拟地址,因为所谓的虚拟地址其实就是基于物理地址的偏移,对于一个进程的物理地址来说,这个偏移量自然是可以访问的整个虚拟地址空间中的用户模式地址空间。

如果本文对你有帮助,不如请我一罐可乐吧 🎃
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值