실행 중인 프로세스가 자발적으로 또는 비자발적으로 CPU를 포기하게 만드는 원인은 무엇입니까?

실행 중인 프로세스가 자발적으로 또는 비자발적으로 CPU를 포기하게 만드는 원인은 무엇입니까?

실행 중인 프로세스가 자발적으로 또는 비자발적으로 CPU를 포기하게 만드는 이유는 무엇입니까? CPU/코어에서는 언제든지 하나의 프로세스만 실행될 수 있기 때문입니다.

답변1

대부분의 시스템 호출(기본적으로 프로세스를 서비스 대기열에 넣는 호출)은 커널 스케줄러가 다음으로 가장 긴급한 프로세스를 잡아 실행하도록 합니다. 멀티 코어의 경우 좀 더 복잡하며 프로세스를 특정 코어나 CPU에 할당할 수 있습니다.

프로세서 시간도 최대 시간 슬롯에 할당되며, 각 클록 주기마다 스케줄러는 현재 프로세스가 전체 시간 조각을 사용했는지 여부를 확인합니다. 그렇다면 일시 중단되고(즉, 틱 인터럽트에서 반환되지 않음) 임시 nice 값이 증가되어 디스패치 큐의 헤드에서 더 멀어집니다. 이렇게 하면 I/O를 많이 수행하는 프로그램이 짧은 시간 슬롯을 많이 얻고, CPU 집약적인 프로그램이 긴 시간 슬롯을 몇 개 갖게 됩니다.

이 모든 것은 상당히 초기의 Unix 시스템을 설명하지만(최근에 그 수준에서 작업한 적이 없기 때문에) 아마도 많이 변하지 않았을 것입니다. 원래 디자인에서는 크게 개선할 수 없습니다.

관련 정보