I/O 모델 설명에 앞서 input operation은 다음 두 단계를 거친다는 것을 알 필요가 있다.
- data가 준비될 때(패킷이 도착할 때)까지 대기
- 커널 버퍼에서 프로세스로 data 복사
Blocking I/O 모델
- 가장 기본적인 I/O 모델
- 시스템 콜 이후, data가 반환되기 전까지 process가 블록됨
Nonblocking I/O 모델
- 시스템 콜 시점에서 data가 준비되지 않으면 즉시 에러를 반환
- data가 준비된 이후, 다시 시스템 콜이 일어나면 해당 시점에서 data 복사
- 위의 그림에서처럼 지속적으로 시스템 콜을 시도하는 방식을 poll이라 함
I/O multiplexing 모델
- 위의 두 방식(select or poll)을 골라씀
Signal-Driven I/O 모델
- Nonblocking I/O Model의 busy wait을 막기위해 커널에서 프로세스로 signal로 통지
Asynchronous I/O 모델
- Signal-Driven I/O Model과 달리 data가 준비된 시점을 알리는 것이 아니라 copy가 완료된 시점을 알림
- I/O를 기다리는 동안 process가 블록되지 않음
Synchronous I/O vs. Asynchronous I/O
POSIX에서는 Synchronous I/O와 Asynchronous I/O를 process 블록을 유발하는가 아닌가로 구분 짓는다.
따라서 위에서 설명한 I/O 모델 중Asynchronous I/O 모델을 제외한 모든 I/O 모델들은 Synchronous I/O로 정의된다.
참조: http://www.masterraghu.com/subjects/np/introduction/unix_network_programming_v1.3/ch06lev1sec2.html