操作系统内核是否使用虚拟内存或操作系统内核的某些部分是否可以驻留在硬盘中?
3 回答
“使用虚拟内存”是一种模糊的陈述。广义地解释,答案是肯定的。虚拟内存是操作系统的一个基本部分,用于保护一个进程免受另一个进程的影响,并让进程产生一种错觉,即它们拥有计算机的全部内存。关于虚拟内存的 Wikipedia 文章是其工作原理的一个很好的参考。(虽然公平地说,Linux 可以配置为不使用虚拟内存,并且还有其他自定义或实时系统不使用它。)
现在,如果您要问更详细的问题,即操作系统是否会分页保存内核数据结构的内存,我只能回答 Linux 内核不会。现在内存已经足够大了,通过分页内核数据结构获得的额外内存并不能证明增加的复杂性或页面错误的成本是合理的。
NT 内核和设备驱动程序使用虚拟内存来存储可以安全分页到存储的数据结构和对象。例如,驱动程序可以像用户模式程序那样请求虚拟内存。
然而,内核的数据和代码:1)出于效率原因必须始终保存在内存中 2)必须保存在内存中,因为无法处理页面错误。一个典型的例子是进入 ISRs(中断服务程序)(例如页面错误处理代码本身)。这种类型的代码和数据始终保存在物理内存中,在 NT 内核上称为非分页池。
后者并不意味着直接引用非分页内存地址。它们总是由内核内存管理器转换为物理地址(反之亦然)。
我认为(我听取更正)唯一使用的没有虚拟映射的物理地址是系统启动时的前 1MB(在 WinNT 中,NTLDR / NTDETECT.COM 阶段,直到激活保护模式)。
哪个操作系统内核?
有些操作系统内核使用虚拟内存,有些则不使用。许多现代操作系统甚至不再具有虚拟内存。(只有 C、C++ 或类似的指针不安全语言需要 VM,但当今使用的大多数语言和平台都是指针安全的(例如 JavaScript、Python、Ruby、PHP、Perl、Java、CLI 减号unsafe
),所以有真的不再需要VM了。)