假设x86,我开始知道地址0x0到0x7FFFFFFF是用于进程的;而更高的东西是为内核保留的。
我有三个好奇心:
1)进程EVER是否调用高于0x7FFFFFFF的地址?我认为它总会导致某种访问被拒绝?如何拒绝执行该访问?
2)“共享内存”IPC是否通过将两个进程虚拟地址映射到相同的物理地址范围来工作?
3)您机器中的RAM数量可能会有所不同。你可能有2GB,或更像16GB。这对RAM的寻址有何影响?内核是否会留下一堆未使用的RAM,因为它是为自己保留的,但不需要它?我怎么能看到这个?
答案 0 :(得分:1)
我不太确定,但您会在MSDN doc中找到有关其工作原理的最大值: -
进程可用的虚拟地址范围 称为进程的虚拟地址空间。每个用户模式 进程有自己的私有虚拟地址空间。对于32位 进程中,虚拟地址空间通常为2千兆字节 0x00000000到0x7FFFFFFF。对于64位进程,虚拟 地址空间是8TB的范围0x000'00000000到 0x7FF'FFFFFFFF。一系列虚拟地址有时称为a 虚拟内存范围。
该图显示了两个64位进程的虚拟地址空间: Notepad.exe和MyApp.exe。每个进程都有自己的虚拟地址 空间从0x000'0000000到0x7FF'FFFFFFFF。每个阴影 block表示虚拟或物理的一页(大小为4千字节) 记忆。请注意,记事本进程使用三个连续页面 虚拟地址,从0x7F7'93950000开始。但那三个 连续的虚拟地址页面映射到非连续的 物理内存中的页面。另请注意,两个进程都使用页面 虚拟内存从0x7F7'93950000开始,但那些虚拟页面 被映射到物理内存的不同页面。