실행 중인 프로세스가 자발적으로 또는 비자발적으로 CPU를 포기하게 만드는 이유는 무엇입니까? CPU/코어에서는 언제든지 하나의 프로세스만 실행될 수 있기 때문입니다.
답변1
대부분의 시스템 호출(기본적으로 프로세스를 서비스 대기열에 넣는 호출)은 커널 스케줄러가 다음으로 가장 긴급한 프로세스를 잡아 실행하도록 합니다. 멀티 코어의 경우 좀 더 복잡하며 프로세스를 특정 코어나 CPU에 할당할 수 있습니다.
프로세서 시간도 최대 시간 슬롯에 할당되며, 각 클록 주기마다 스케줄러는 현재 프로세스가 전체 시간 조각을 사용했는지 여부를 확인합니다. 그렇다면 일시 중단되고(즉, 틱 인터럽트에서 반환되지 않음) 임시 nice 값이 증가되어 디스패치 큐의 헤드에서 더 멀어집니다. 이렇게 하면 I/O를 많이 수행하는 프로그램이 짧은 시간 슬롯을 많이 얻고, CPU 집약적인 프로그램이 긴 시간 슬롯을 몇 개 갖게 됩니다.
이 모든 것은 상당히 초기의 Unix 시스템을 설명하지만(최근에 그 수준에서 작업한 적이 없기 때문에) 아마도 많이 변하지 않았을 것입니다. 원래 디자인에서는 크게 개선할 수 없습니다.