I/O모델: 동기, 비동기, Blocking, Non-Blocking

이상우·2022년 1월 12일
0

동기식 입출력(syncronous I/O)

프로그램이 I/O요청을 했을 때 해당 I/O작업이 완료되어야 다음 작업을 할 수 있는 방식이다.
->I/O가 진행되는 동안 다음 명령을 수행하지 않고 기다린다.
->I/O상태의 프로세스는 blocked state로 전환된다.
->I/O가 완료되면 인터럽트를 통해 완료를 알린다. 이후 CPU의 제어권이 기존 프로그램에게 넘어간다.
->blocked state의 프로세스는 wait상태로 돌아간다.

  • 명령 수행 속도는 빠르지만 입출력 연산은 상대적으로 느리다. 기다리는 과정에서 자원 낭비를 초래한다.
  • 보통 I/O가 진행되면 CPU는 다른 프로그램의 작업을 수행하게 된다.
  • 입출력 요청의 동기화
    :여러 프로세스가 동시에 I/O요청을 할 경우 각 요청을 큐에 넣어 순서대로 처리한다.

*인터럽트(interrupt)란 마이크로프로세서(CPU)가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말한다.

비동기식 입출력(non-syncronous I/O)

  • CPU의 제어권을 입출력 연산을 호출한 프로그램에게 곧바로 다시 부여한다.
  • I/O결과와 관련 없는 연산이 있을 경우 주로 사용된다.
  • CPU는 I/O결과와 상관 없이 처리 가능한 작업부터 처리한다.
  • I/O연산이 완료되면 인터럽트를 통해 알린다.

Blocking I/O

  • 직접 제어할수 없는 대상의 작업(I/O)이 완료될 때까지 기다린다.
    ->I/O가 완료되어야 제어권이 프로세스로 넘어간다.

  • 동기와 마찬가지로 자원이 낭비된다.

Non-Blocking I/O

  • I/O작업이 진행되는 동안에도 유저 프로세스의 작업을 중단시키지 않는다.
    ->제어권을 바로 반납한다.

  • I/O완료와 상관없이 작업 결과가 반환된다.
    ->이를 입력 데이터가 있을 때까지 반복하고, 입력 데이터가 있으면 결과가 전달된다.

  • 대기하지 않아도 되지만 I/O완료를 확인해야하기 때문에 시스템 호출이 반복된다.

  • 동기, 비동기는 개선된 I/O이벤트 통지 모델이다.

참고 사이트

profile
구상한것을 구현할 수 있는 개발자가 되고 싶습니다.

0개의 댓글