Operating system 使用分页实现虚拟内存意味着什么?

Operating system 使用分页实现虚拟内存意味着什么?,operating-system,paging,Operating System,Paging,我知道术语虚拟内存的含义,以及分页系统是如何工作的,但我想了解虚拟内存是如何通过分页实现的 所以让我举一个例子,如果程序想要运行,它是不是先把页面放到虚拟内存中,然后再放到主内存帧中?这就是虚拟内存和分页系统之间的关系吗 当你运行一个C程序,或者一个使用其他“最基本”语言的程序,并且它取消了对一个野生指针(指向某个不存在的内存位置的指针)的引用时,你会收到一条错误消息,上面写着分段错误,页面错误,或者类似的东西。(但有时保留“页面错误”一词是指操作系统可以解决的分段错误,请继续阅读。) 在你看到

我知道术语虚拟内存的含义,以及分页系统是如何工作的,但我想了解虚拟内存是如何通过分页实现的

所以让我举一个例子,如果程序想要运行,它是不是先把页面放到虚拟内存中,然后再放到主内存帧中?这就是虚拟内存和分页系统之间的关系吗


当你运行一个C程序,或者一个使用其他“最基本”语言的程序,并且它取消了对一个野生指针(指向某个不存在的内存位置的指针)的引用时,你会收到一条错误消息,上面写着分段错误页面错误,或者类似的东西。(但有时保留“页面错误”一词是指操作系统可以解决的分段错误,请继续阅读。)

在你看到这条信息之前,会发生很多事情。每当一个程序试图使用一个不存在的内存地址时,它的主机就会出现一个错误。它看起来有点像来自设备的中断。然后,操作系统查看描述进程虚拟内存的内部数据结构,以确定所讨论的地址是否是程序虚拟内存地址范围的一部分。如果是,操作系统要么从磁盘检索页面(保存有问题的地址的内存块),要么是对新数据内存请求的响应,提供一个满(通常)零的新页面。然后,它更新计算机的虚拟到物理地址转换寄存器,并重新启动产生故障的指令。砰!大量内存的幻觉——虚拟内存

只有当地址不是程序声明的内存空间的一部分时,故障才会使其成为程序员或用户可见的错误消息

这是非常简单的:数千名硬件和软件开发人员在这个问题空间连续工作了半个多世纪,并且它有许多变化和改进


启动新进程的事件顺序因操作系统而异。它们都涉及到至少加载一个页面并跳转到该页面:设置计算机的程序计数器寄存器以指向该页面。

,非常感谢,您上面解释的过程就是页面错误的情况,所以,当我们执行一个进程时,进程被带到辅助内存的虚拟内存部分,或者它的页面可以存储在辅助内存的任何部分?还有一件事,在上面提到的c编程示例中,这是否意味着像windows这样的操作系统使用分段而不是分页,或者使用两者的组合?分页和分段在我的高级视图中是相同的。当您深入了解硬件和操作系统的细节时,术语会更加精确和具体。请阅读这篇文章作为背景。你在第一段中把你的术语倒过来了。segfault是在HW引发页面错误异常(该页面没有HW页面表映射)后POSIX操作系统发送的信号,该异常被操作系统的页面错误处理程序确定为“无效”。有效的页面错误包括从内存读取移动到页面文件的操作系统(硬页面错误),或写时复制/延迟分配(软页面错误)。TL:DR:硬件机制是分页,而不是分段,即使在硬件支持分段的32位x86上也是如此(操作系统使用平面内存模型;仅依赖分页)。因此,相关的硬件异常总是页面错误。如果你能以某种方式让硬件引发一个分段异常,那么它永远都是无效的。