为什么系统无法响应?


12

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

我的整个系统冻结了。我几乎无法使用Ctrl+ Alt+ F1杀死它到文本控制台dot,但是花了几分钟。

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


Answers:


15

这就是GNU / Linux和其他多任务系统的工作方式,它们在运行的进程中共享处理器,dot不会有99%,但在99%的时间内是100%。每个进程在一段时间内都控制着处理器。

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

现在,就您的情况而言,问题可能是- dot并没有花费很多处理器时间,而是大量内存。当程序使用过多的内存时,就会发生抖动,这确实是使系统死机的过程,这并不是因为dot执行了很多操作,而是因为内核必须在磁盘(交换分区)之间来回移动内存页面。和系统内存。

即使dot仅占用了99%的CPU时间,也有可能立即更改为文本终端,结果是内核必须将dot内容移出内存,以便可以将其X放回内存中以便X可以看到键您只需单击并移动到文本终端,然后内核必须移出仍在运行X的内存dot,然后再dot移出以将文本终端进程(也许只是login?)移回内存。(如果这看起来杂乱无章,这不仅仅是因为例子是凌乱-现实就是这样。凌乱)

一个示例是,如果您登录文本终端,则可以按击键,按退格键,并且它很乐意实时发生,但是如果您像运行一个小工具那样简单ps,就会“冻结”。 ”,因为它必须释放内存以进行加载ps(并且还必须在磁盘I / O队列中等待,磁盘I / O队列被大量用于在内存之间来回移动数据,直到能够ps从文件系统中进行请求为止) 。


嗯,因此,要获得更好的用户体验,必须将某些程序指定为“ 粘性 ” 程序,从而防止这些程序被换出。
Christoph Wurm

自70年代以来,粘性一直没有像现在这样起作用,“粘性”位的原始语义也是如此。但是,您可以将程序的(部分)锁定在内存中,这样就不会被换出。不过,主存储器是一种昂贵的奢侈品,因此无法做到所有事情。
Alexios 2012年

@njsg,感谢您的出色解释。后续问题:有没有办法防止颠簸?我知道交换可以使内存使用总体上更有效,但是应该有限制。恕我直言,与X一样重要的进程永远都不应移出内存。有没有一种方法可以配置类似Unix的系统,从而保护重要进程免遭移出?在服务器上,这是另一回事,但是在台式机上,我宁愿有一个需要大量内存的进程崩溃,也不希望让台式机停止与我交谈。
A. Donda
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.