차단 시스템 호출을 실행하는 스레드가 인터럽트에 의해 깨어납니까?

차단 시스템 호출을 실행하는 스레드가 인터럽트에 의해 깨어납니까?

스레드와 인터럽트에 대해 조금 읽었습니다. 병렬 프로그래밍에 스레드를 사용하면 중단을 걱정할 필요가 없기 때문에 더 쉽다는 섹션이 있습니다.

그러나 인터럽트가 아닌 경우 릴리스 차단 시스템 호출을 알리는 메커니즘은 무엇입니까?

디스크에서 파일을 읽기 위해 차단 시스템 호출을 사용하는 스레드에서 파일을 읽고 있습니다.

이 시간 동안 다른 스레드가 실행 중입니다.

어느 시점이 되면 하드 드라이브에서 파일을 읽을 준비가 됩니다.

파일을 요청하는 스레드에서 컨텍스트 전환을 수행할 수 있도록 하드웨어 인터럽트를 통해 이를 프로세서에 알리나요?

답변1

인터럽트는 운영 체제에 의해 처리되며 스레드(또는 프로세스)는 이에 대해 알지도 못합니다.

당신이 그린 장면에서 :

  • 스레드가 read()시스템 호출을 수행하면 커널이 요청을 수신하고 데이터가 도착할 때까지 스레드가 아무 작업도 수행하지 않음(차단 호출)을 인식하므로 스레드가 차단됩니다.
  • 커널은 (필요한 경우) 버퍼에 공간을 할당하고 "읽을 블록을 찾아 해당 블록을 버퍼로 읽어오도록 요청" 댄스를 시작합니다.
  • 스케줄러는 방금 해제된 CPU를 사용하기 위해 다른 스레드를 선택합니다.
  • 그 전까지는 모든 일이 잘 진행되고 있었는데...
  • ...디스크에서 인터럽트가 도착했습니다. 커널이 인계받아 이전에 실행된 읽기가 완료되었음을 표시하고 스레드를 준비된 것으로 표시합니다. 제어는 사용자 공간으로 돌아갑니다.
  • 그 전까지는 모든 일이 잘 진행되고 있었는데...
  • ...누군가가 수천 가지 이유 중 하나 때문에 CPU를 포기했는데, 우연히 방금 해제된 CPU가 데이터를 기다리고 있던 스레드에 할당되었습니다.

어쨌든 그런 것입니다. 아니요, 전송 완료를 나타내기 위해 인터럽트가 발생하면 CPU는 대기 스레드에 할당되지 않습니다. 이는 다른 스레드를 중단할 수 있으며 실행은 해당 스레드를 재개할 수 있습니다(또는 다른 스레드가 선택될 수 있음).

관련 정보