Overlapped 모델
완료 루틴을 통해 비동기 입출력 결과를 처리한다.
완료루틴 - 애플리케이션이 정의한 일종의 콜백함수로 운영체제가 적절한 시점에 자동으로 호출하도록 되어 있다.
동작 원리
- 비동기 입출력 함수를 호출함으로써 운영체제에 입출력 작업을 요청한다.
- 해당 스레드는 곧바로 alertable wait 상태로 진입한다
- 비동기 입출력 작업이 완료되면, 운영체제는 스레드의 APC 큐에 결과를 저장한다
- 비동기 입출력 함수를 호출한 스레드가 alertable wait 상태에 있으면, 운영체제가 APC 큐에 저장된 정보를 참조하여 완료 루틴을 호출한다
- APC 큐에 저장된 정보를 토대로 모든 완료 루틴 호출이 끝나면, 스레드는 alertable wait 상태에서 빠져나온다
APC Queue (Asynchronous Procedure Call Queue)
- 비동기 입출력 결과 저장을 위해 운영체제가 각 스레드마다 할당하는 메모리 영역이다
- 비동기 함수 호출 메커니즘을 의미한다
- 모든 스레드는 자신만의 APC queue라는 것을 가지고 있다. 스레드별로 독립적이다
- 비동기적으로 호출되어야 할 함수들과 매개변수 정보가 저장된다, 그러나 저장되었다고 해서 함수가 바로 호출되는 것은 아니다. 스레드가 알림가능 상태에 놓이게 될 때에 비로소 호출되는 것이다.
Alertable wait
Alertable wait 상태 - 비동기 입출력을 위한 특별한 대기 상태로, 비동기 입출력 함수를 호출한 스레드가 이 상태에 있어야만 완료 루틴이 호출 될 수 있다.
Alertable wait는 스레드의 대기 상태 (wait state) 중 하나이다.
Sleep()을 이용한 대기상태
Wait가 시작되는 시점부터 Wait가 끝나는 시점까지 CPU 시간을 사용하지 않는다. (그냥 멈춰있다고 보면 된다)
Alertable wait 대기 상태
Alertable wait 상태가 끝나기 전에 CPU 시간을 할당받아 완료 루틴을 호출하고, 더 처리할 내용이 없으면 대기 상태가 끝난다.
입출력 절차
1. 비동기 입출력을 지원하는 소켓을 생성한다.
2. 비동기 입출력 함수를 호출한다.
3. 비동기 입출력 함수를 호출한 스레드를 alertable wait 상태로 만든다.
4. 비동기 입출력 작업이 완료되면, 운영체제가 완료루틴을 호출한다.
완료 루틴에서는 비동기 입출력 결과를 확인하고 데이터를 처리한다.
5. 완료 루틴 호출이 모두 끝나면, 스레드는 alertable wait 상태에서 빠져 나온다.
[출처] 소켓 입출력 모델 - Overlapped 모델(Ⅱ) |작성자 찜배
'CS > 네트워크' 카테고리의 다른 글
DoS 및 DDoS 정리 (0) | 2024.10.22 |
---|---|
서브넷, 서브넷마스크, 서브넷팅 (0) | 2024.10.20 |
OSI 7계층 개념 정리 (0) | 2024.10.18 |
IaaS, PaaS, SaaS 차이 (1) | 2024.10.17 |
SRT, SJF 스케줄링 알고리즘 문제 (0) | 2024.10.14 |