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