相关疑难解决方法(0)

父进程死亡时的新父进程

在 UNIX 中,当父进程消失时,我认为所有子进程都将 init 重置为其父进程。这不是一直正确吗?有任何例外吗?

process exit init

27
推荐指数
3
解决办法
2万
查看次数

内核线程是进程还是守护进程?

来自 Mauerer 的 Linux 内核架构,

内核线程是由内核本身直接启动的进程。它们将内核函数委托给一个单独的进程,并在那里与系统中的其他进程“并行”执行(实际上,与内核本身的执行并行)。内核线程通常被称为(内核)守护进程。例如,它们用于执行以下任务:

  • 定期将修改的内存页面与页面来源的块设备同步(例如,使用 mmap 映射的文件)。
  • 将很少使用的内存页写入交换区。
  • 管理延迟的操作。
  • 为文件系统实现事务日志。

基本上,有两种类型的内核线程:

  • 类型 1 — 线程启动并等待,直到内核请求执行特定操作。
  • 类型 2 — 一旦启动,线程就会定期运行,检查特定资源的利用率,并在利用率超过或低于设定的限制值时采取行动。内核使用这种类型的线程进行持续监控任务。
  1. 由于 Mauerer 的书说内核线程是进程,我认为它们必须在用户模式下运行,而不是在内核模式下运行。(或者我错了?进程可以在不同时间以用户模式或内核模式运行,还是仅在一种模式下运行?)

    但是 Bovet 的《Understanding Linux Kernel》说内核线程只在内核模式下运行(见下面的引述)。两本书中“内核线程”的概念是同一个概念吗?

    传统的 Unix 系统将一些关键任务委托给间歇运行的进程,包括刷新磁盘缓存、换出未使用的页面、服务网络连接等。事实上,以严格的线性方式执行这些任务是没有效率的。如果在后台调度它们的功能和最终用户进程,它们都会得到更好的响应。因为一些系统进程只在内核模式下运行,现代操作系统将它们的功能委托给内核线程内核线程不会受到不必要的用户模式上下文的影响。在 Linux 中,内核线程在以下方面与常规进程不同:

    • 内核线程仅在内核模式下运行,而常规进程在内核模式和用户模式下交替运行。
    • 因为内核线程只在内核模式下运行,所以它们只使用大于 PAGE_OFFSET 的线性地址。另一方面,常规进程在用户模式或内核模式下使用所有 4 GB 的线性地址。
  2. Mauerer 的书说内核线程是由内核直接启动的,而且似乎还说守护进程是内核线程的同义词。所以我认为守护进程必须由内核直接启动。

    但是https://unix.stackexchange.com/a/193918/674说那个screen守护进程是由screen用户界面启动的(见下面的引用)。我认为screen用户界面是一个进程,而不是内核。是的概念daemon在Mauerer的书,并在链接的答复同一个概念?

    当您第一次启动时screen,您实际上是在启动一个用户界面 (ui),它默认会创建一个守护进程(会话管理器)。

  3. 总的来说,您如何理解“内核线程”、“进程”和“守护进程”的概念,它们的关系和区别?

linux process linux-kernel daemon

12
推荐指数
1
解决办法
7385
查看次数

标签 统计

process ×2

daemon ×1

exit ×1

init ×1

linux ×1

linux-kernel ×1