티스토리 뷰
동기식과 비동기식이라는 용어는 꼭 OS가 아니더라도 많이 사용되는 용어이다. 하지만 OS를 공부하면서 정리하는 것이므로 입출력을 기반으로 정리해보려고 한다.
동기식 입출력(syncronous I/O)
어떤 프로그램이 입출력을 요청했을 때 입출력 작업이 완료된 후에 그 프로그램이 후속 작업을 수행할 수 있는 방식이다. 주로 읽기 작업에 사용된다. 일반적으로 디스크, 키보드와 같은 I/O 하드웨어들이 속도가 느리므로 CPU는 입출력 작업을 기다려야 한다. I/O요청을 수행하는 동안 CPU는 별다른 일을 하지 않는 것이다. 따라서 일반적으로 입출력 수행 중에 CPU를 다른 프로그램에 할당해 CPU가 계속 쉬지 않고 일을 할 수 있도록 관리한다. 이 관리를 위해 운영체제는 프로그램을 몇 가지 상태로 나누어 관리한다. 입출력이 완료될 때 까지 CPU가 명령을 수행하지 못하는 프로그램을 봉쇄상태(blocked state)로 전환하고, 봉쇄상태의 프로그램에는 CPU를 할당하지 않는다.
이렇게 CPU를 다른 프로그램에 할당하여 CPU를 쉬지 않게 할 때 동기성(synchronization)에 문제가 생길 수 있다. 예를 들어, 프로그램 A가 원래 1이었던 파일의 내용을 3으로 수정하는 I/O요청을 하고 이를 수행하는 동안 프로그램 B에게 CPU를 할당했다고 하자. 이때 공교롭게도 프로그램 B도 A가 접근한 파일과 똑같은 곳에 접근하여 파일의 내용을 +1 하는 요청을 했다. 그러면 입출력 컨트롤러는 A와 B의 요청을 순서를 바꾸어 처리할 수도 있다. 이렇게 되면 1→3→4로 변해야하는 출력이 1→2→3으로 바뀌는 문제가 생긴다. 이런 경우를 막기 위해 하드웨어에서는 요청들을 큐(queue)에 넣어 관리한다. 디스크 차원에서는 큐에 있는 요청을 순서대로 처리함으로써 동기화 문제를 해결할 수 있다.
비동기식 입출력(asyncronous I/O)
입출력 연산을 요청한 후에 CPU 제어권을 입출력 연산을 호출한 해당 프로그램에 곧바로 부여하는 것은 비동기식 입출력이라고 한다. 읽기 요청이라면 비동기식 입출력이라고 하더라도 모든 데이터를 다 받아야 프로세스가 진행될 수 있을 것이므로, 읽어오는 데이터가 필요하지 않은 작업을 먼저 수행하고 입출력이 완료된 후 입력이 필요한 작업을 수행한다. 쓰기 요청이라면 데이터를 쓰는 동안 곧바로 다음 작업을 진행해도 될 것이므로 주로 쓰기 작업에 사용된다.
(입력의 경우 동기식과 다를 것이 없는 것 같은데.. 다르게 분류하여 사용하는 것인지 의문이다.)
'OS' 카테고리의 다른 글
5장. 프로세스 관리 (0) | 2023.02.18 |
---|---|
4장. 프로그램 구조와 실행 (0) | 2023.01.27 |
3장. 컴퓨터 시스템의 동작 원리 (1) | 2023.01.15 |
2장. 운영체제 개요 (0) | 2023.01.05 |
- conditional GAN
- TRACKING
- Depth estimation
- pcb
- depthmap
- image
- AI
- Generative Model
- Deep learning
- machine learning
- design pattern
- mode collapse
- ML
- feature
- 3d object detection
- 운영체제
- 딥러닝
- controllable GAN
- Building Basic GAN
- MLOps
- deeplearning
- Operating System
- 디지털신호처리
- Raspberry Pi
- Gan
- DSP
- depth
- OS
- 신호처리
- ML Pipeline
- Total
- Today
- Yesterday
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |