代码之家  ›  专栏  ›  技术社区  ›  Mengfan Ma

是否有任何机制可以交换内存中操作系统的内核部分?

  •  2
  • Mengfan Ma  · 技术社区  · 7 年前

    我最近在学习 输入/输出缓冲 根据我使用的书,

    当用户进程发出I/O请求时,操作系统会在主存的系统部分为操作分配一个缓冲区。

    我理解这种方法如何能够避免非缓冲情况下的交换问题。但是,是否假定为进程创建的操作系统缓冲永远不会被交换掉?

    为了扩展我的问题,我想知道是否有任何机制可以在内存中交换操作系统的内核部分?

    2 回复  |  直到 7 年前
        1
  •  3
  •   user3344003    7 年前

    操作系统通常会分页出部分内核。内核必须定义哪些部分可以调出,哪些部分不能调出。例如,通常,分页池和非分页池将有单独的内存分配器。

    请注意,在大多数处理器上,系统页面的页表格式与用户页面的页表格式相同,因此支持内核分页。

    确定内核的哪些部分可以调出是系统设计的一部分,并且是预先完成的。无法翻出系统中断表。大部分情况下,您可以分页出系统服务代码。在大多数情况下,您无法分页出中断处理代码。

        2
  •  2
  •   Basile Starynkevitch    7 年前

    我想知道是否有任何机制可以将操作系统的内核部分存储在内存中

    IIRC一些旧版本的AIX可能已经能够交换(即分页)一些内核代码。也可能是较旧的操作系统(甚至可能是Multics)。

    然而,它在今天实际上是无用的,因为内核内存只是当前(桌面和服务器)计算机上RAM的一小部分。总的内核内存只有几十兆字节,而大多数计算机有几十千兆字节的RAM。

    顺便提一下 microkernel 系统(如GNU Hurd)可以在分页过程中使用服务器程序。

    看见 Operating Systems: Three Easy Pieces