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

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

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

我的整个系统都冻结了。我几乎无法使用Ctrl+ Alt+ F1to kill进入文本控制台dot,但花了几分钟。

为什么系统允许这样的事情发生?为什么它提供非关键程序(例如dot系统的 99%)并使用剩余的 1% 来保持响应?

答案1

这就是 GNU/Linux 和其他多任务系统的工作方式,它们在正在运行的进程之间共享处理器,dot不会在 99% 的时间里共享 99% 的处理器,而是 100% 的处理器。每个进程在一段时间内支配处理器。

这是由调度程序处理的(Linux 有几个调度程序,有些只是采用通常的策略,有些尝试给用户界面更多的时间,等等)。

现在,就您而言,问题可能是,这dot并没有占用大量处理器时间,而是占用大量内存。当程序使用过多内存时,就会出现殴打,这正是一个使系统冻结的过程,不是因为dot做了很多事情,而是因为内核必须在磁盘(交换分区)和系统内存之间来回移动内存页面。

即使dot只占用 99% 的 CPU 时间,也有可能立即切换到文本终端,发生的事情是内核必须将dot内容移出内存,以便将其放回X内存,这样它X才能看到你刚刚按下的键并移动到文本终端,然后内核必须移出仍在运行的X内存dot,然后也移出内存dot以将文本终端进程(可能只是login?)移回内存。(如果这看起来很混乱,那不仅仅是因为示例很混乱——现实是凌乱的。)

一个例子是,如果您登录文本终端,您可能只需按一下按键,按一下退格键,它就会很高兴地实时发生,但是如果您执行一些简单的操作,例如运行一个小工具,例如ps,它会“冻结” “一段时间,因为它必须释放内存来加载ps(并且它还必须在磁盘 I/O 队列中等待,该队列被大量用于将数据移入和移出内存,直到它能够ps从文件系统请求) 。

相关内容