为什么系统会变得无响应?

Chr*_*urm 12 scheduling

我刚刚dot用一个输入文件执行(一个绘制有向图的程序),该文件太大以至于无法在合理的时间内呈现。

我的整个系统都僵住了。我几乎不能使它与文本控制台Ctrl+ Alt+F1dot,但花了几分钟的时间。

为什么系统允许这样的事情?为什么它提供一个非关键程序,例如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从文件系统请求) .