使用分页实现虚拟内存是什么意思?
What does it mean to implement the Virtual Memory Using Paging?
我知道虚拟内存这个术语的含义以及分页系统是如何工作的,但我想了解虚拟内存是如何通过分页实现的?
所以让我举下面的例子,如果程序想要运行它是否先被带到虚拟内存,然后它的页面被带到主内存帧?那是虚拟内存和分页系统之间的关系吗?
亲切的问候
当您 运行 一个 C 程序或其他 "down to the metal" 语言的程序时,它解引用了一个野指针(指向某个不存在的内存位置的指针),您会收到一条错误消息Segmentation Fault、Page Fault 或类似问题。 (但术语页面错误有时被保留为表示操作系统可以解决的分段错误,请继续阅读。)
在您看到该消息之前发生了很多事情。每当一个程序试图使用一个不存在的内存地址时,它的主机就会报错。它看起来像是来自设备的中断。 OS 然后查看描述进程虚拟内存的内部数据结构,以确定所讨论的地址是否是程序虚拟内存地址范围的一部分。如果是,OS 要么从磁盘检索页面——保存相关地址的内存块,或者如果它是对新数据内存请求的响应,则提供一个新的满页(通常)的零。然后它更新计算机的虚拟到物理地址转换寄存器并重新启动产生故障的指令。啪!大量内存的错觉--虚拟内存。
仅当地址不是程序声明的内存的一部分时 space 错误才会使其成为程序员或用户可见的错误消息。
这过于简单化了:半个多世纪以来,成千上万的硬件和软件开发人员一直在研究这个问题space,并且它有许多变化和改进。
启动新进程的事件顺序从 OS 到 OS 不等。它们都涉及加载至少一页并跳转到它:设置计算机的程序计数器寄存器指向它。
我知道虚拟内存这个术语的含义以及分页系统是如何工作的,但我想了解虚拟内存是如何通过分页实现的?
所以让我举下面的例子,如果程序想要运行它是否先被带到虚拟内存,然后它的页面被带到主内存帧?那是虚拟内存和分页系统之间的关系吗?
亲切的问候
当您 运行 一个 C 程序或其他 "down to the metal" 语言的程序时,它解引用了一个野指针(指向某个不存在的内存位置的指针),您会收到一条错误消息Segmentation Fault、Page Fault 或类似问题。 (但术语页面错误有时被保留为表示操作系统可以解决的分段错误,请继续阅读。)
在您看到该消息之前发生了很多事情。每当一个程序试图使用一个不存在的内存地址时,它的主机就会报错。它看起来像是来自设备的中断。 OS 然后查看描述进程虚拟内存的内部数据结构,以确定所讨论的地址是否是程序虚拟内存地址范围的一部分。如果是,OS 要么从磁盘检索页面——保存相关地址的内存块,或者如果它是对新数据内存请求的响应,则提供一个新的满页(通常)的零。然后它更新计算机的虚拟到物理地址转换寄存器并重新启动产生故障的指令。啪!大量内存的错觉--虚拟内存。
仅当地址不是程序声明的内存的一部分时 space 错误才会使其成为程序员或用户可见的错误消息。
这过于简单化了:半个多世纪以来,成千上万的硬件和软件开发人员一直在研究这个问题space,并且它有许多变化和改进。
启动新进程的事件顺序从 OS 到 OS 不等。它们都涉及加载至少一页并跳转到它:设置计算机的程序计数器寄存器指向它。