프로세스 스케줄링의 맥락에서 운영 체제는 각 타임 슬라이스/양자 종료 후에 개입합니까? 예를 들어 컴퓨터가 유휴 상태이고 4개의 작업(t1, t2, t3 및 t4)이 도착했고 선착순을 사용하여 예약된 경우 일반적으로 t1, t2, t3, t4는 CPU에 있는 것으로 간주하지만 이것은 단순화된 것이 아닌가? 왜냐하면 우리는 t1, OS, t2, OS, t3 OS t4가 실제로 무슨 일이 일어날까요? 그것이 사실이라면 OS가 각 시간 조각(양자라고도 함) 후에 개입하는 것은 매우 비효율적이지 않습니까?
답변1
반드시 그런 것은 아닙니다. 일반적으로 스케줄러는 퀀텀이 만료된 후 작업의 동적 우선 순위를 낮추지만, 여전히 우선 순위가 가장 높은 작업인 경우 다른 작업을 가져옵니다. 하지만 일반적으로 그렇습니다. 작업이 충분히 오래 실행되면 OS가 인계받아 다른 OS로 전환합니다. 왜 그것이 비효율적이어야 합니까?
답변2
나는 현대 운영 체제에서 시간 조각의 길이가 가변적이라고 믿습니다. 스케줄러는 타이머 인터럽트뿐만 아니라 모든 인터럽트(키보드, 마우스, 터치스크린, 네트워크, 디스크 전송 완료 등)를 처리한 후에 호출됩니다.
대략적으로 말하면 스케줄러는 프로세스의 차단 시스템 호출 사이의 이동 평균 시간을 추정하도록 설계되었습니다. 스케줄러는 프로세스 X에 대한 제어권을 부여하기 전에 프로세스 X의 이동 평균보다 약간 긴 시간에 중단되는 타이머를 설정합니다. 스케줄러가 다음 차단 시스템 호출까지의 시간을 잘 추측하는 경우 프로세스의 상당 부분이 실제로 차단 시스템 호출을 수행하여 CPU를 자발적으로 해제합니다.
목표는 약간의 계산을 수행하는 대화형 프로세스를 확보하고, 느린 장치에서 일부 데이터를 요청하는 차단 시스템 호출을 만든 다음, 데이터가 반환되는 즉시 일정을 다시 잡는 것입니다. 스케줄러가 두 프로세스 간의 스케줄링을 결정해야 하고 다른 모든 사항이 동일하다면 차단 시스템 호출을 더 자주 만드는 프로세스를 선호하게 됩니다. 이는 동시 차단 I/O 요청 수를 최대화하여 전체 시스템 처리량을 향상시키는 경향이 있습니다.