我刚刚dot
用一个输入文件执行(一个绘制有向图的程序),该文件太大以至于无法在合理的时间内呈现。
我的整个系统都僵住了。我几乎不能使它与文本控制台Ctrl+ Alt+F1杀dot
,但花了几分钟的时间。
为什么系统允许这样的事情?为什么它提供一个非关键程序,例如dot
系统的 99%,而使用剩余的 1% 来保持响应?
njs*_*jsg 15
这就是 GNU/Linux 和其他多任务系统的工作方式,它们在运行的进程之间共享处理器,dot
在 99% 的时间内不会有 99%,而是 100%。每个进程在一段时间内支配处理器。
这是由调度程序处理的(Linux 有多个调度程序,有些只是采用通常的策略,有些则尝试为用户界面提供更多时间,等等)。
现在,在您的情况下,问题是——可能是——这dot
不是占用大量处理器时间,而是大量内存。而当一个程序使用太多内存时,就会出现抖动,这正是一个让系统死机的过程,不是因为dot
做了很多,而是因为内核不得不在磁盘(交换分区)之间来回移动内存页和系统内存。
即使dot
只占用了 99% 的 CPU 时间,也有可能几乎立即切换到文本终端,发生的情况是内核必须将dot
内容移出内存,以便它可以X
放回内存中以便X
可以看到键您只需点击并移至文本终端,然后内核必须移出仍在运行X
的内存dot
,然后dot
移出以将文本终端进程(也许只是login
?)移回内存中。(如果这看起来很乱,那不仅仅是因为这个例子很乱——现实就是这么乱。)
一个例子是,如果您登录文本终端,您可能只需按一下键,按一下退格键,它就会很高兴地实时发生,但是如果您执行一些像运行像这样的小工具这样简单的操作ps
,它就会“冻结” " 一段时间,因为它必须释放内存才能加载ps
(并且它还必须在磁盘 I/O 队列中等待,该队列被大量用于将数据移入和移出内存,直到它能够ps
从文件系统请求) .