内核进程简介
内核进程 (kproc) 仅存在于内核保护域中,并且在本节中列出的方式上与用户进程不同。
- 它是使用 克里特普 和 初始化 内核服务创建的。
- 它仅在内核保护域内执行,并且具有所有安全特权。
- 它可以调用一组受限制的系统调用和所有适用的内核服务。 有关更多信息,请参阅 可用于内核扩展的系统调用。
- 它可以访问全局内核地址空间 (包括内核置顶和可分页的堆) ,内核代码以及静态数据区。
- 它必须轮询信号,并且可以选择忽略传递的任何信号,包括 杀 信号。
- 它的文本和数据区来自全局内核堆。
- 它无法使用应用程序库。
- 它具有仅包含 u 块 (用户块) 结构的进程专用区域,并且可能包含内核堆栈。
- 它的 父流程 是发出 克里特普 内核服务来创建进程的进程。
- 它可以将其父进程更改为 初始化 进程,并且可以使用中断禁用函数进行序列化。
- 它可以使用锁定来对关键数据结构的进程时间访问进行序列化。
- 它只能是 64–bit 内核中的一个 64–bit 进程。
内核进程将直接控制内核线程。 因为内核进程始终在内核保护域中,所以内核进程中的线程是仅内核线程。 有关内核线程的更多信息,请参阅 了解内核线程。
内核进程继承其父进程 (调用 克里特普 内核服务以创建它的进程) 的环境,但有一些例外情况。 内核进程在初始化时不具有根目录或当前目录。 所有文件系统函数的使用都必须指定绝对路径名。
在系统 1 的 2 1 阶段期间创建的内核进程不能对文件保持任何长期打开,直到达到系统引导的第 2 阶段或运行时为止。 这是因为基本操作系统在系统引导的第 1 阶段和第 2 阶段之间更改根文件系统。 因此,如果任何文件在根文件系统转换时打开,那么系统将崩溃。