블로킹 : 애플리케이션 실행 시 운영체제 대기 큐에 들어가면서 요청에 대한 system call이 완료된 후에 응답을 보냄. 자신의 수행결과가 끝날 때까지 제어권을 갖고 있음
논블로킹 : 애플리케이션 실행 시 운영체제 대기 큐에 들어가지 않고 실행 여부와 관계업이 바로 응답을 보냄. 바로 응답하기 힘든 경우, 에러를 반환하는데 정상데이터를 받을 때까지 계속해서 요청을 보냄. 자신이 호출되었을 때 제어권을 바로 자신을 호출한 쪽으로 넘기며, 자신을 호출한 쪽에서 다른 일을 할 수 있도록 함.
IO 이벤트 통지
동기 : system call을 기다림. (notify를 사용자 프로세스가 담당) 시스템의 반환을 기다리는 동안 대기 큐에 머무는 것이 필수가 아님(블로킹은 필수로 머물러야함). 요청과 그 결과가 동시에 일어남.
비동기 : system call을 기다리지 않음. ( notify를 커널이 담당) 요청에 대해 처리완료 여부에 관련없이 응답하고 다음코드 실행. 이후에 운영체제에서 처리완료여부를 알려주고 응답. 요청과 그 결과가 동시에 일어나지 않음
동기 블로킹
프로그램이 블로킹을 일으키는 시스템 함수 호출
한 작업당 한 번의 사용자-커널 사이의 문맥교환 발생
정지된 프로그램은 CPU를 사용하지 않고 커널의 응답 대기
프로그램 관점에서 보면 마치 처리로직이 오래걸리는 것 같지만, 사실은 커널의 일을 기다리느라 블록되어 있는 것
동기 논블로킹
동기블로킹의 개선안이지만 비효율적. 정상데이터가 올 때까지 계속 system call을 하며 문맥교환 발생
IO지연 초래
비동기 블로킹
IO는 논블로킹이고 알림(notify)가 블로킹인 방식
select() 시스템함수 호출이 사용자프로세스를 블로킹함
비효율적
비동기 논블로킹
system call이 즉식 IO개시 여부를 반환. 사용자 프로세스는 다른일을 할 수 있고 IO는 백그라운드에서 처리됨
Comments