시스템이 응답하지 않는 이유는 무엇입니까?

시스템이 응답하지 않는 이유는 무엇입니까?

dot방금 (유향 그래프를 그리는 프로그램) 실행했는데 입력 파일이 너무 커서 적당한 시간에 렌더링할 수 없었습니다.

전체 시스템이 정지됩니다. ++를 사용하여 kill Ctrl텍스트 콘솔에 간신히 들어갈 수 있었지만 몇 분이 걸렸습니다.AltF1dot

시스템이 이런 일을 허용하는 이유는 무엇입니까? 중요하지 않은 프로그램(예: dot시스템의 99%)을 제공하고 응답 상태를 유지하기 위해 나머지 1%를 사용하는 이유는 무엇입니까?

답변1

이것이 GNU/Linux 및 기타 멀티태스킹 시스템이 작동하는 방식입니다. 이들은 실행 중인 프로세스 간에 프로세서를 공유하며, dot프로세서의 99%가 아니라 프로세서의 100%를 공유합니다. 각 프로세스는 일정 기간 동안 프로세서를 지배합니다.

이는 스케줄러에 의해 처리됩니다(Linux에는 여러 스케줄러가 있으며 일부는 일반적인 전략을 적용하고 일부는 사용자 인터페이스에 더 많은 시간을 제공하려고 시도하는 등).

이제 귀하의 경우 문제는 이것이 dot프로세서 시간을 많이 차지하지 않지만 많은 메모리를 차지한다는 것일 수 있습니다. 프로그램이 너무 많은 메모리를 사용하는 경우 발생이기다, 이것은 정확히 시스템을 정지시키는 프로세스입니다. dot많은 작업이 수행되고 있기 때문이 아니라 커널이 디스크(스왑 파티션)와 시스템 메모리 사이에서 메모리 페이지를 앞뒤로 이동해야 하기 때문입니다.

CPU 시간의 99%만 차지 하더라도 dot즉시 텍스트 터미널로 전환할 수 있습니다. 무슨 일이 일어나고 있는지 커널은 방금 키를 볼 수 있도록 메모리에 dot다시 넣기 위해 메모리에서 항목을 이동 해야 합니다. 키를 누르고 텍스트 터미널로 이동하면 커널은 아직 실행 중인 메모리 , 텍스트 터미널 프로세스(어쩌면 단지 ?)를 다시 메모리로 이동하기 위해 메모리 밖으로 이동해야 합니다 . (이것이 혼란스러워 보인다면 단지 예시가 혼란스럽기 때문만은 아닙니다. 현실은XXXdotdotlogin이것지저분한. )

예를 들어 텍스트 터미널에 로그인한 경우 키를 누르고 백스페이스를 누르면 실시간으로 문제가 발생하지만, 예를 들어 가젯을 실행하는 것과 같은 간단한 작업을 수행하면 ps잠시 동안 "멈춥니다". 로드하려면 메모리를 확보해야 하기 때문입니다 . 또한 파일 시스템에서 데이터를 요청할 ps수 있을 때까지 메모리 안팎으로 데이터를 이동하는 데 많이 사용되는 디스크 I/O 대기열에서 기다려야 하기 때문입니다 .ps

관련 정보