BBS水木清华站∶精华区
发信人: thhsieh.bbs@bbs.phys.ntu.edu.tw (居士), 看板: Linux
标 题: zombie 又来了
发信站: 台大物理 冷月流苏BBS驿站 (Tue Dec 3 14:17:42 1996)
转信站: sobee!netnews.ntu!news.phys.ntu!chdrv2
唉! 刚刚才弄完 et2bdf 的程式, zombie process 居然又来了,我把我
的情况描述如下,请大家帮忙看一看:
之前我一直在测试 et2bdf 的程式,不断地产生与搬移那些大字型档,
所以 I/O 量应该满大的吧? 但实际上我却感觉不出硬碟有明显的动作,可
能是读写动作大部分在 buffer 中进行。
程式完程後,我想要把它放到 1.44 MB 的软碟中带回家,那软碟原本
已 mount 在 /mnt 下,当我将档案 cp 到软碟去,然後要 umount 软碟,
由於那时我不是 root ,但却可以执行 sudo ,於是我就下
sudo umount /mnt
结果这个 process 居然当住不动了! 当时我是在 X-win (XFree86 3.1.2),
crxvt 底下,於是我开了另一个视窗用 ps -aux 来看,发现那个 umount
process 的 stat 是 D (uninterrupted process) ,我心□想,大概完了,
现在系统虽然看起来还满正常的,但也许 kernel 内部的 catch buffer 已
经乱掉了 (只是猜想)。於是我用 ctrl+alt+F2 切到文字模式下用 root login
( 我不敢直接离开 X-win ,因为照以往的经验,这麽一来所有 X-win 底下
的 process 全部都会变成 zombie! ) ,当然,以 root 的身分也无法用
kill -9 将那 umount process 杀掉,然後我试著 logout ,果然,这个
console 当了,我再开别的 console (alt+F3) 进去,ps 来看,适才那个
console 的 bash 已成了 zombie。
现在我已确定已到了非用 reset 键重开机不可的地步了。根据我最近看
书得来的知识,我推测很可能是当时 kernel 正在进行关键的 buffer link-list
调整的动作,理论上在进行此动作时,是不可以经由一般中断或 swap 等加以干扰,
而该 buffer head 是被锁住的,要一直等到整个动作完成後,该 buffer head
才会解锁,然後 kernel 才会去做别的事。但很不幸的是,万一在那过程中发生
了严重错误,像是硬体错误中断,则正在进行 buffer I/O 的 process 被强迫
停了下来,则该 buffer head 便永远无法解锁,而其他正等待使用那 buffer
的 process 便进入了永久睡眠状态,上述问题就产生了。
我的猜想是,当那 umount 动作正在进行时,很可能是发生了硬体的错误,
导至整个动作被迫中断。硬体错误的来源可能有两个,一个就是这几天大家正在
讨论的 Intel Pentium CPU 的 Bug ,我的 CPU 是 Pentium 120 , /proc/cpuinfo
的资料如下 (按: 这是开机时加了 mem=nopentium 参数之後的资料):
processor : 0
cpu : 586
model : Pentium 75+
vendor_id : GenuineIntel
stepping : 5 <====== 可能有问题
fdiv_bug : no
hlt_bug : no
fpu : yes
fpu_exception : yes
cpuid : yes
wp : yes
flags : fpu vme de pse tsc msr mce cx8
bogomips : 47.82
但我之前一直认为我的机器没有当 server ,平常只有我一个人在用,最近也很
少跑大型的程式,因此不必要加 mem=nopentium 的参数。我不知道是否因为这
个原因造成了硬体的错误。另一个硬体错误来源很可能是在那当儿我的磁片突然
坏掉了 (我得承认我的磁片品质不太好) ,结果 umount 无法正确读写而至。因
为 mount / umount 所用到的 buffer 是牵扯到整个系统的 filesystem ,一旦
那些 buffer 无法解锁,那诸如 shutdown, sync 等命令一执行便会进入无限
期的睡眠状态 (至於为什麽 logout 会有问题? 我还不知道)
最後没办法,我试著执行 shutdown -nh now ,结果系统不经由 init 的程
序直接 shutdown 。结果,出现了以下讯息
Killing all process . (原文记不太清楚,但大概是这个意思)
就停住不动了,整个系统好像锁死了一样,大概是 umount, sync 等 process
kill 不掉吧? 於是,我只好按下 reset 键,祈求上天保佑 ....
系统重开之後 (幸好没什麽损失,好在,好在 ....) ,我回去检查那片软碟,
在 fdformat 它之後,在进行 check 时,出现了一长串的错误讯息,内容大概
是 SuperBlock 读写错误,但速度太快了,实在是看不清楚,直到我按下了
ctrl+c 後才停下来。看来这片软碟是不能用了。
由此我学到一个教训, linux 必须在品质确保的硬体下 run 才能快速稳
定。尤其是常用软碟的使用者要注意,除了不能用品质不良的磁片以外,千万
不能一直将软碟一直 mount 在档案系统上,因为有可能你在 mount 它时它好
好的,等到你要 unmount 它时它却坏掉了,结果你的系统可能就要按 reset
重开了。但也有可能在你 mount / umount 快完成时才坏掉,那 .... 我就不
知道要怎麽办了。
另外,我想知道的是,这个 Pentium CPU Buge 会造成什麽样情况的系
统当掉? 当不下 mem=nopentium 参数时 kernel 会用到 Pentium CPU 那些
资源? 怎麽去用? 用了结果又如何? 不知道有没有人有这样的经验,或者是
那位了解 kernel 运作的高手可以说明一下? 或是高诉我去看那些文件?
不知道我以上的讨论有没有人感兴趣,或是有其他意见的,或是我有些
地方说得不正确的,或是需要补充的,请大家尽量提出来。我是诚肯地希望
这个版能多一些技术性的讨论,这样大家才能学得更多。
--
———— 居 士 ————
台大物理系
Email: thhsieh@twclx.phys.ntu.edu.tw
※ 来源:.冷月流苏BBS驿站 bbs.phys.ntu.edu.tw.[FROM: twclx.phys.ntu.]
BBS水木清华站∶精华区