일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Process Synchronization
- Resource-Allocation Graph
- Mutex
- Process
- FCFS
- process scheduling
- Operating System
- Paging
- SystemProgramming
- Disk Scheduling
- Segmentation
- Process Management
- SCAN
- Monitor
- SSTF
- semaphore
- resource
- Disk
- Thread
- deadlock
- Look
- Scheduling Algorithm
- IPC
- Fragmentation
- memory Allocation
- Memory Management
- Linux
- Context Switching
- Banker's Algorithm
- Today
- Total
CS Notepad
Sync/Async, Block/Non-Block 본문
Synchronous Blocking model
가장 기본적인 I/O 방식으로 read()시스템 콜을 호출하면 제어권이 커널로 넘어가고(context switching), 읽을 데이터가 존재할 때까지 기다린다. 만약 읽어들일 데이터가 존재하면 해당 데이터를 커널 공간에서 유저 공간으로 복사하며 이때까지 Block 상태에 놓인다. 이 작업이 모두 끝나면 함수가 반환된다.
Synchronous Non-Blocking model
read()함수 호출 시 읽어들일 데이터가 없으면 함수를 반환하며 errno를 EAGAIN/EWOULDBLOCK으로 설정하고, 읽을 데이터가 존재하면 데이터를 커널 공간에서 유저 공간으로 복사한다. 이를 Polling방식이라고도 하며, 주기적으로 이벤트를 감시하는 경우에 사용된다.
Asynchronous Blocking model
select(), poll(), epoll() 시스템 콜을 사용하여 특정 파일 디스크립터의 이벤트를 감시하는 I/O 방식이다. 해당 함수가 호출되면 대상 파일 디스크립터들을 감시하고, 읽을 수 있는 데이터가 들어오거나 일정 시간이 지나면 함수가 반환된다. 함수 반환 후 각 시스템 콜들이 관리하는 배열이나 구조체의 상태를 확인하여 파일 디스크립터의 이벤트 발생 여부를 확인할 수 있고, 이를 통해 데이터를 읽을 수 있는지를 결정할 수 있다.
Asynchronous Non-Blocking model
aio_read()와 같은 시스템 콜을 이용하여 데이터 응답이 올 때까지 백그라운드에서 대기하다가, 읽어들일 데이터가 존재하면 스레드 기반 콜백이나 signal을 사용함으로써 I/O를 처리하는 방식이다. 따라서 읽을 데이터가 올 때까지 기다리면서 다른 작업을 수행할 수있다. 스레드를 사용할건지, signal을 사용할건지는 aiocb 구조체의 aio_sigevent.sigvev_notify 멤버 변수의 값(SIGEV_SIGNAL, SIGEV_THREAD)으로 설정할 수 있다.
'OS' 카테고리의 다른 글
Deadlock (0) | 2022.11.09 |
---|---|
Process Synchronization (0) | 2022.11.05 |
Process Scheduling (0) | 2022.10.30 |
Process Management (0) | 2022.10.19 |
Process (0) | 2022.10.02 |