IO모델

IO모델

  • 블로킹 : 애플리케이션 실행 시 운영체제 대기 큐에 들어가면서 요청에 대한 system call이 완료된 후에 응답을 보냄. 자신의 수행결과가 끝날 때까지 제어권을 갖고 있음
  • 논블로킹 : 애플리케이션 실행 시 운영체제 대기 큐에 들어가지 않고 실행 여부와 관계업이 바로 응답을 보냄. 바로 응답하기 힘든 경우, 에러를 반환하는데 정상데이터를 받을 때까지 계속해서 요청을 보냄. 자신이 호출되었을 때 제어권을 바로 자신을 호출한 쪽으로 넘기며, 자신을 호출한 쪽에서 다른 일을 할 수 있도록 함.

IO 이벤트 통지

  • 동기 : system call을 기다림. (notify를 사용자 프로세스가 담당) 시스템의 반환을 기다리는 동안 대기 큐에 머무는 것이 필수가 아님(블로킹은 필수로 머물러야함). 요청과 그 결과가 동시에 일어남.
  • 비동기 : system call을 기다리지 않음. ( notify를 커널이 담당) 요청에 대해 처리완료 여부에 관련없이 응답하고 다음코드 실행. 이후에 운영체제에서 처리완료여부를 알려주고 응답. 요청과 그 결과가 동시에 일어나지 않음

동기 블로킹

  • 프로그램이 블로킹을 일으키는 시스템 함수 호출
  • 한 작업당 한 번의 사용자-커널 사이의 문맥교환 발생
  • 정지된 프로그램은 CPU를 사용하지 않고 커널의 응답 대기
  • 프로그램 관점에서 보면 마치 처리로직이 오래걸리는 것 같지만, 사실은 커널의 일을 기다리느라 블록되어 있는 것

동기 논블로킹

  • 동기블로킹의 개선안이지만 비효율적. 정상데이터가 올 때까지 계속 system call을 하며 문맥교환 발생
  • IO지연 초래

비동기 블로킹

  • IO는 논블로킹이고 알림(notify)가 블로킹인 방식
  • select() 시스템함수 호출이 사용자프로세스를 블로킹함
  • 비효율적

비동기 논블로킹

  • system call이 즉식 IO개시 여부를 반환. 사용자 프로세스는 다른일을 할 수 있고 IO는 백그라운드에서 처리됨
  • IO 응답이 도착하면 신호나 콜백으로 IO전달을 완료함

Categories:

Updated:

Comments