실행중인 프로세스가 I / O에서 차단되는 경우
IO 차단은 프로세스를 중단하는 것과 거의 같습니다. 리눅스 커널의 문맥, 일부 IO 시스템 호출을 실행에 같은 read()
원인이됩니다 sysenter
호출, 그 IO 돌봐 트리거 또는 인터럽트 핸들러를 do_sys_read()
궁극적으로. 여기서 현재 요청을 즉시 만족시킬 수 없으면 함수가 호출 sched()
되어 다른 프로세스를 실행할 수 있습니다.
협력 시스템의 맥락에서, 당신이 IO를 이유로 시스템 호출을 할 때, 요청을 충족시킬 수 없다면 커널은 다른 작업을 선택하고 실행합니다. 이 문서 는 몇 가지 배경 지식을 제공합니다. 기본적으로 IO를 기다렸다면 해당 IO를 영원히 기다리게됩니다. 협동 스케줄링의 아이디어는 sched()
CPU를 많이 사용하는 작업을 수행하는 경우 자주 호출 하거나 동등한 CPU 양도 방법입니다.
커널 모드 고려 사항이 더 흥미로워집니다. 특정 임베디드 플랫폼 과 같이 사용 가능한 아키텍처에서 인터럽트 핸들러는 하드웨어 또는 소프트웨어 인터럽트에 대한 응답으로 여전히 호출됩니다. 일반적으로 구현 측면에서 인터럽트 처리 를 비활성화하는 것이 가능 하지만 단점도 있습니다.