虚拟地址到物理地址的映射

我有一个疑问,当每个进程有它自己的单独的页面表,那么为什么有系统宽的页表需要? 另外,如果页表是将虚拟地址映射到物理地址,那么我认为两个进程可以映射到相同的物理地址,因为所有进程具有相同的虚拟地址空间。 系统宽页面表上的任何良好的链接也将解决我的问题?

Solutions Collecting From Web of "虚拟地址到物理地址的映射"

每个进程都有自己独立的虚拟地址空间 – 两个进程可以把virtpage 1映射到不同的物理页面。 进程可以参与共享内存,在这种情况下,每个进程都有一些virtpage映射到同一个页面。

一个进程的虚拟地址空间可以用来映射virtpages到物理页面,内存映射文件,设备等。虚拟页面不必连接到RAM。 一个进程可以对整个1GB文件进行内存映射 – 在这种情况下,其物理内存使用量可能只有几兆,但其虚拟地址空间使用量将为1GB或更多。 许多进程可以这样做,在这种情况下,所有进程的虚拟地址空间使用总和可能是40 GB,而总的物理内存使用率可能只有100 megs; 这在32位系统上很容易实现。

由于许多进程加载相同的库,操作系统通常将库放在一组只读的可执行页面中,然后在每个进程的virtpage空间中加载映射以指向一组页面,以节省物理内存。

进程可能有没有指向任何内容的virtpage映射,例如,如果部分进程的内存被写入页面文件 – 进程将尝试访问该页面,CPU将触发页面错误,操作系统将看到页面错误,并通过暂停进程来处理它,从页面文件中将页面读回到内存中,然后重新开始进程。

通常有3种类型的页面错误。 第一种类型是当CPU在TLB中没有虚拟物理映射时 – 处理器调用OS中的页面错误软件中断,操作系统将映射放入该进程的处理器中,然后进程重新运行违规说明。 这些发生在每秒数千次。

第二种类型是操作系统没有映射,因为如上所述,进程的内存已经交换到磁盘。 这种情况在轻载机器上很少发生,但是随着内存压力的增加,每秒钟可以达到100秒到1000秒,甚至更多。

第三种类型是操作系统没有映射,因为映射不存在 – 进程试图访问不属于它的内存。 这会产生一个段错误,通常这个过程被终止。 这些不应该经常发生,而仅仅取决于软件在机器上的写入程度,而与计划或机器负载无关。

即使你已经知道,我想我把它扔进社区。