操作系统内核是否使用虚拟内存,或者操作系统内核的某些部分是否可以驻留在硬盘中?
发布于 2010-04-30 03:26:21
“使用虚拟内存”是一种模糊的说法。从广义上讲,答案是肯定的。虚拟内存是操作系统的基本部分,用于保护一个进程不受另一个进程的影响,并使进程产生一种错觉,即它们拥有计算机的全部内存。维基百科上关于virtual memory的文章是一个很好的参考,说明了它是如何工作的。(尽管公平起见,Linux可以在没有虚拟内存的情况下进行配置,而且还有其他自定义或实时系统不使用虚拟内存。)
现在,如果你问一个更详细的问题,一个操作系统是否会将保存内核数据结构的内存换出,我只能回答Linux内核不会。内存现在足够大了,通过换出内核数据结构获得的额外内存并不能证明增加的复杂性或页面错误的成本是合理的。
发布于 2010-05-22 16:30:43
NT内核和设备驱动程序将虚拟内存用于数据结构和对象,这些数据结构和对象可以安全地调出到存储中。例如,驱动程序可以像用户模式程序那样请求虚拟内存。
然而,内核具有以下数据和代码: 1)出于效率原因,必须始终保存在内存中;2)必须保存在内存中,因为无法处理页面错误。一个典型的例子是进入is (中断服务例程)(例如页面故障处理代码本身)。这种类型的代码和数据总是保存在物理内存中,它被称为NT内核上的非分页池。
后者并不意味着直接引用非分页内存地址。它们总是由内核内存管理器转换为物理地址(反之亦然)。
我认为(我在听更正)唯一没有使用虚拟映射的物理地址是系统启动时的第一个1MB (在WinNT中,NTLDR / NTDETECT.COM阶段,直到激活保护模式)。
发布于 2010-04-29 21:20:14
哪种操作系统内核?
有些操作系统内核使用虚拟内存,有些则不使用,许多现代操作系统甚至不再使用虚拟内存。(只有C、C++或类似的指针不安全语言才需要VM,但当今使用的大多数语言和平台都是指针安全的(例如JavaScript、Python、Ruby、PHP、Perl、Java、CLI和unsafe),因此实际上不再需要VM。)
https://stackoverflow.com/questions/2736544
复制相似问题