百科问答小站 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位(最低位)清零就可以了




  

相关话题

  进程被操作系统加载之后,磁盘上的二进制文件可以删掉吗?如果删掉对正在运行的进程有什么影响吗? 
  为什么Linux不适合电脑初学者使用?Linux真的只适合小众么? 
  当初Linux的作者想写一个操作系统,结果全世界外国人帮他写完;如今我也想写一个,为啥国内没人帮我? 
  安卓1.0明显是基于linux内核开发的,安卓1.0是不是linux套壳? 
  家用电脑装 Linux 系统能否在防止孩子玩游戏的同时满足他们 「查资料」的需求? 
  Linux和Windows可以安装在任何个人电脑上,而安卓却需要为每台设备定制一个版本的原因是什么? 
  计算机行业领先的公司大多在美国,Linux为什么却是芬兰人发明的? 
  Linux 为什么没发展成 macOS 或者 Windows 那样的大众图形化操作系统? 
  在 linux 中,用 c 语言如何判断 yum 源是否配置好? 
  如果美帝软件上制裁,禁止使用一切 MADE in USA 的代码、软件(包括开源软件)会怎样? 

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





© 2025-04-19 - tinynew.org. All Rights Reserved.
© 2025-04-19 - tinynew.org. 保留所有权利