浏览代码

:sparkles: 不可中断状态与僵尸进程

nick 6 年之前
父节点
当前提交
20d3582222
共有 1 个文件被更改,包括 17 次插入2 次删除
  1. 17 2
      zombie-process.md

+ 17 - 2
zombie-process.md

@@ -2,7 +2,22 @@
 
 当 iowait 升高时,进程很可能因为得不到硬件的响应,而长时间处于不可中断状态。从 ps 或者 top 命令的输出中,可以发现它们都处于 D 状态,也就是不可中断状态 (Uninterruptible Sleep)。
 
-不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不 允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。
+不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。
+
+中断其实是一种异步的事件处理机制,可以提高系统的并发处理 能力。
+
+由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。如果中断本身要做的事情不多,那么处理起来也不 会有太大问题;但如果中断要处理的事情很多,中断服务程序就有可能要运行很长时间。
+
+特别是,中断处理程序在响应中断时,还会临时关闭中断。这就会导致上一次中断处理完成之前,其他中断都不能响应,也就是说中断有可能会丢失。
+
+Linux 将中断处理过程分成了两个阶段,也就是上半部和下半部:
+
+- 上半部直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行;
+
+- 而下半部则是由内核触发,也就是我们常说的软中断,特点是延迟执行。
+
+Linux 中的软中断包括网络收发、定时、调度、RCU 锁等各种类型,可以通过查看 /proc/softirqs 来观察软中断的运行情况。
+
 
 ## 什么是僵死(僵尸)进程
 
@@ -61,4 +76,4 @@ root     12913  0.0  0.0  12944   928 pts/1    S+   21:55   0:00 grep --color=au
 
 进程组和会话。它们用来管理一组相互关联的进程,进程组表示一组相互关联的进程,比如每个子进程都是父进程所在组的成员;而会话是指共享同一个控制终端的一个或多个进程组。
 
-比如,我们通过 SSH 登录服务器,就会打开一个控制终端(TTY),这个控制终端就对应 一个会话。而我们在终端中运行的命令以及它们的子进程,就构成了一个个的进程组,其 中,在后台运行的命令,构成后台进程组;在前台运行的命令,构成前台进程组。
+比如,我们通过 SSH 登录服务器,就会打开一个控制终端(TTY),这个控制终端就对应 一个会话。而我们在终端中运行的命令以及它们的子进程,就构成了一个个的进程组,其中,在后台运行的命令,构成后台进程组;在前台运行的命令,构成前台进程组。