概述虚拟地址到物理地址的映射
我有一个疑问,当每个进程有它自己的单独的页面表,那么为什么有系统宽的页表需要? 另外,如果页表是将虚拟地址映射到物理地址,那么我认为两个进程可以映射到相同的物理地址,因为所有进程具有相同的虚拟地址空间。 系统宽页面表上的任何良好的链接也将解决我的问题?
一次可以打开多less个TCP套接字?
哪些字符可以安全地命名文件和目录?
如何从C ++的windows中检索总系统cpu使用率?
高精度的事件计时器
为什么mmap()(内存映射文件)比read()快
每个进程都有自己独立的虚拟地址空间 – 两个进程可以把virtpage 1映射到不同的物理页面。 进程可以参与共享内存,在这种情况下,每个进程都有一些virtpage映射到同一个页面。
一个进程的虚拟地址空间可以用来映射virtpages到物理页面,内存映射文件,设备等。虚拟页面不必连接到RAM。 一个进程可以对整个1GB文件进行内存映射 – 在这种情况下,其物理内存使用量可能只有几兆,但其虚拟地址空间使用量将为1GB或更多。 许多进程可以这样做,在这种情况下,所有进程的虚拟地址空间使用总和可能是40 GB,而总的物理内存使用率可能只有100 megs; 这在32位系统上很容易实现。
由于许多进程加载相同的库, *** 作系统通常将库放在一组只读的可执行页面中,然后在每个进程的virtpage空间中加载映射以指向一组页面,以节省物理内存。
进程可能有没有指向任何内容的virtpage映射,例如,如果部分进程的内存被写入页面文件 – 进程将尝试访问该页面,cpu将触发页面错误, *** 作系统将看到页面错误,并通过暂停进程来处理它,从页面文件中将页面读回到内存中,然后重新开始进程。
通常有3种类型的页面错误。 第一种类型是当cpu在TLB中没有虚拟物理映射时 – 处理器调用OS中的页面错误软件中断, *** 作系统将映射放入该进程的处理器中,然后进程重新运行违规说明。 这些发生在每秒数千次。
第二种类型是 *** 作系统没有映射,因为如上所述,进程的内存已经交换到磁盘。 这种情况在轻载机器上很少发生,但是随着内存压力的增加,每秒钟可以达到100秒到1000秒,甚至更多。
第三种类型是 *** 作系统没有映射,因为映射不存在 – 进程试图访问不属于它的内存。 这会产生一个段错误,通常这个过程被终止。 这些不应该经常发生,而仅仅取决于软件在机器上的写入程度,而与计划或机器负载无关。
即使你已经知道,我想我把它扔进社区。
总结
以上是内存溢出为你收集整理的虚拟地址到物理地址的映射全部内容,希望文章能够帮你解决虚拟地址到物理地址的映射所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容