百科问答小站 logo
百科问答小站 font logo



操作系统虚拟地址转换为物理地址是如何避免冲突的? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

A1: 不会出现你描述的这种情况。多数情况下,A和B占用的地址可能是一样的,一个简单的Windows程序,大部分起始地址都是0x40000这类低地址,虚地址跟物理地址不是一一对应的关系,所以即使A/B进程的代码段的虚地址相同,物理地址也是不同的,不存在冲突的问题。

并且实际上一个进程占用的内存空间远远没有你说的那么大,Windows在32位环境下用户进程可用的地址空间只有2~3GB,都集中在低地址范围,并且在用户地址空间范围内,大部分都被共享库(DLL)占用了。

以上是用户地址空间,对于内核地址空间来说,其范围、内容、页表都是固定的,所以内核能看到所有进程的页表,自然也就能管理所有进程的内存映射,可以保证不冲突。

另外,不同进程的虚地址可能对应着同一块物理地址,映射是可以重复存在的,典型的例子就是我说的共享库,操作系统为了节约物理内存使用,对于同一个DLL,在不同的进程中,其虚地址可能是不同的,但其对应的物理内存可能是同一块。

Q2: 一般情况下,页表项的数量是一样的,32位情况下页表不会有多大,只不过不是所有项目都是有效的,一次性申请好页表项的内存可以降低管理的复杂度。实际情况要看操作系统的行为,不同操作系统的行为是不同的。

对于多级页表,操作系统有可能只申请某些有效的页表项,在顶级(PDE)页目录表上把不需要映射的部分置成无效的状态。根据A1回答里我提到的:内核地址空间的内容是一样的,所以页表项里有一半到四分之一的内容是固定的,不同进程不需要重复申请页表内存。

Q3: 不是删除页表项,而是把页表项设置成无效的状态,页表项(32位的4字节或者8字节PTE)只要把P位(最低位)清零就可以了




  

相关话题

  为什么 Windows 没有形成成熟的软件包和升级体系? 
  Windows 10 64位的为什么安装的软件基本都是32位的? 
  华为的鸿蒙系统能成功吗? 
  鸿蒙的前景如何?有可能成为第三大移动操作系统吗? 
  德国又一州将尝试完全使用 Linux 和 LibreOffice,对此你有哪些看法? 
  计算机执行一条指令要多长时间? 
  为什么atomic比mutex性能更高? 
  在可见的将来,我们能看到国产操作系统崛起吗? 
  操作系统能否知道自己处于虚拟机中? 
  除了 Windows,macOS,类 Unix 之外还有别的选择么? 

前一个讨论
内存(DRAM)的连续读写速度和随机读写速度是一样的吗?
下一个讨论
能否将数个usb4接口并联在一起,达到pci3.0 x8甚至x16的带宽,减少外接显卡无损耗?





© 2024-11-29 - tinynew.org. All Rights Reserved.
© 2024-11-29 - tinynew.org. 保留所有权利