如果没有分页概念,虚拟内存可以存在吗?
Can virtual memory exists without Paging concept?
我们通常在操作系统中同时学习虚拟内存和分页,它们似乎相互依赖。但是,我想知道它们是否相互独立存在?
您问题的答案取决于您如何定义 "Virtual Memory"。如果你把它定义成"the addresses that the application sees",那么是的,虚拟内存可以不分页地存在。
在分页之前,系统使用分段来隔离用户进程。简而言之,每个进程都有自己的部分。它"sees"的所有地址都只是段内的偏移量。硬件隐式地将段基添加到应用程序请求的地址以获得物理地址。就像页面 table 一样,段基数只能由内核修改,它可以有效地为进程隔离内存,同时允许进程之间共享部分内存的范围。
段也有限制,每次访问前都会检查这些限制,以确保用户不会使用非常大的偏移量并溢出到其他进程。
分段支持已从 Intel X86_64 体系结构中删除,其中段寄存器确实存在但始终设置为 0。只有两个段寄存器 %fs
和 %gs
继续存在.但是对它们的限制检查不是由硬件执行的。这些段现在被 OS 用于线程本地存储。
我们通常在操作系统中同时学习虚拟内存和分页,它们似乎相互依赖。但是,我想知道它们是否相互独立存在?
您问题的答案取决于您如何定义 "Virtual Memory"。如果你把它定义成"the addresses that the application sees",那么是的,虚拟内存可以不分页地存在。
在分页之前,系统使用分段来隔离用户进程。简而言之,每个进程都有自己的部分。它"sees"的所有地址都只是段内的偏移量。硬件隐式地将段基添加到应用程序请求的地址以获得物理地址。就像页面 table 一样,段基数只能由内核修改,它可以有效地为进程隔离内存,同时允许进程之间共享部分内存的范围。
段也有限制,每次访问前都会检查这些限制,以确保用户不会使用非常大的偏移量并溢出到其他进程。
分段支持已从 Intel X86_64 体系结构中删除,其中段寄存器确实存在但始终设置为 0。只有两个段寄存器 %fs
和 %gs
继续存在.但是对它们的限制检查不是由硬件执行的。这些段现在被 OS 用于线程本地存储。