일반적인 운영체제 이론 질문인데, 유닉스 계열 시스템을 통해 운영체제 이론을 배우고 있기 때문에 여기에 물어보고 싶었습니다.
오늘은 운영체제 강의가 끝난 후 강사님께 이렇게 물었습니다. "스케줄러는 프로세스 관리자 프로세스 내부에 있는 스레드입니다. PM도 프로세스이므로 A라는 프로세스가 실행 중일 때 PM이 프로세서를 어떻게 인수할 수 있나요? 스케줄러는 프로세스에서 프로세서를 분리하여 다른 프로세스에 할당해야 합니다. 그러나 프로세스 관리자가 실행되고 있지 않을 때 이런 일이 어떻게 발생해야 합니까?
그는 "프로세스 관리자는 '항상' CPU0에서 실행됩니다"라고 말했습니다. 나는 'CPU와 코어가 하나만 있다면 PM이 어떻게 항상 실행될 수 있습니까? '그는 그렇다고 말했다.
내가 이 혼란에서 벗어나도록 도와줄 수 있는 사람이 있나요?
답변1
실행 중인 스레드가 시스템 호출을 하거나 클록 인터럽트가 발생하거나 다른 인터럽트가 발생할 때마다 운영 체제는 일반적으로 제어 스레드에서 "프로세서와 씨름"합니다.
즉, 실행 중인 스레드는 시스템 호출 read()
을 통해 커널을 호출합니다 . 시스템 호출 핸들러는 읽기, 쓰기 등의 작업을 수행할 뿐만 아니라 이를 호출한 스레드가 반환되어야 하는지, 아니면 다른 작업이 실행되어야 하는지 궁극적으로 결정합니다. "파악"을 담당하는 사람은 프로세스 관리자입니다.write()
gettimeofday()
CPU 바인딩된 프로그램(읽기/쓰기/열기/닫기 시스템 호출을 수행하지 않음)은 여전히 타이머 인터럽트로 인해 CPU를 잃는 경우가 많습니다. 특수 시계는 초당 10번, 60번, 1000번 CPU를 중단시킵니다. 인터럽트 핸들러는 무엇보다도 다음 타임 슬라이스에서 CPU가 어떤 스레드에 할당되는지 결정합니다.
다른 인터럽트는 마우스, 키보드, 네트워크 카드 또는 디스크 드라이브에서 발생할 수 있습니다.
인터럽트 핸들러와 시스템 호출 핸들러의 코드가 항상 이를 호출하기 때문에 "프로세스 관리자"는 항상 실행 가능하다고 말할 수 있습니다.