[운영체제] 동기식 입출력 vs 비동기식 입출력

부나·2023년 12월 21일
0

운영체제

목록 보기
3/4

프로세스의 입출력 (I/O)

프로세스는 CPU를 할당받아 작업을 실행하다가 키보드, 프린터기, 마우스 등의 I/O 장치로부터 데이터를 입출력해야 하는 경우가 생깁니다.
그러면 Software Interrupt인 System Call 을 호출하여 커널에게 대신 부탁합니다.

입출력을 하는 동안에 프로세스가 다음 작업을 수행한다 vs 수행하지 않는다 에 따라 각각 비동기식, 동기식 입출력 으로 분류됩니다.

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

동기(Synchronous)란 여러 작업을 순차적으로 실행하는 것을 의미합니다.

동기식 입출력 (Synchronous I/O) 은 프로세스의 입출력이 이루어지는 동안, 다음 코드를 실행하지 않고 대기하는 방식입니다.

number = input()
print(number + 5)

예를 들어, 어떠한 값을 입력받아야 다음 코드를 수행할 수 있는 경우에는 동기식 입출력이 요구됩니다.

만약 위 코드에서 number + 5 를 실행하려면, 먼저 입력을 다 받을 때까지 기다려야 합니다.

그림의 화살표 흐름을 살펴보겠습니다.

  1. requesting process 단계에서 입출력을 요구하고 대기(waiting) 상태가 됩니다.
  2. 커널의 device driver 를 통해 입출력을 수행하도록 명령합니다.
  3. 입출력을 마치면 CPU에게 Interrupt를 발생시켜 입출력 종료를 알립니다.
  4. 대기하고 있던 프로세스가 CPU를 할당받고 그 다음 작업을 이어 나갑니다.

비동기식 입출력 (Asynchronous I/O)

비동기(Asynchronous)란 한 작업이 끝날 때까지 기다리지 않고, 번갈아가면서 실행되는 것입니다.

비동기식 입출력 (Asynchronous I/O) 은 프로세스의 입출력이 이루어지는 동안, 대기하지 않고 다음 코드를 실행하는 방식입니다.

number = input()
print(10 + 5)

위 코드는 실제론 동기적으로 수행되지만 설명을 위해 가정한 코드임을 알립니다.

예를 들어, 어떤 값을 입력받는 것과 상관없이 다음 코드를 실행해도 된다면, 굳이 사용자 입력을 기다릴 필요가 없습니다.

이 때에는 단순히 다음 코드를 실행해도 될 것입니다.

코드에서 10 + 5 를 출력하는 것은 number라는 변수와는 아무런 관계가 없습니다.

따라서 입력을 마칠 때까지 기다리지 않고, 다음 코드를 실행해도 문제가 되지 않습니다.

이처럼 입출력과 프로세스의 코드가 비동기적으로 실행되는 것을 비동기식 입출력이라고 부릅니다.

그림의 화살표 흐름을 살펴보겠습니다.

  1. requesting process 단계에서 입출력을 요구하고, 대기(waiting) 상태가 되지 않습니다. = 프로세스의 다음 코드를 계속 실행합니다.
  2. 커널의 device driver 를 통해 입출력을 수행하도록 명령합니다.
  3. 입출력을 마치면 CPU에게 Interrupt를 발생시켜 입출력 종료를 알립니다.
  4. 메모리에 입력값이 전달되고, 그 동안에도 프로세스는 계속해서 다음 작업을 이어 나갑니다. (CPU를 빼앗기지 않았다고 가정)
profile
망각을 두려워하는 안드로이드 개발자입니다 🧤

0개의 댓글

관련 채용 정보