I/O의 중요성 ------------------------------------------------------------------------------------------------------
파일 입출력의 중요성에 대해서 설명하자면 끝이 없다.
프로세스서나 쓰레드가 동작함에 있어서 I/O시에는 블록되고 모든 I/O 작업이 끝나면 다시 시작된다.
즉 I/O작업을 하는 동안은 CPU는 멈춰서서 다른 쓰레드를 실행시키거나 러닝중인 프로세스목록에서 I/O중인 프로세스를 빼버리는 것이다.
그렇다면 이런 I/O작업중 프로세서는 항상 멈춰 있어야 하는걸까?
그건 아니다.
비동기 I/O방식이란 입출력은 그대로 작업하면서 먼저 로드된 데이터를 기반으로 플레이를 병행하는 방식을 의미한다. 즉
I/O 실행 I/O 실행 I/O 실행 I/O 실행 I/O 실행 I/O 실행
식의 작업이
I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O
실행실행실행실행실행실행실행실행실행실행실행실행실행
식으로 이루어 지게 할 수 있다. 그림으로 본다면 다음과 같다.
I/O 모드에서 왜 프로세서가 정지할까? --------------------------------------------------------------------------------
간단하다. 파일입출력을 하는 함수들은 대부분 데이터 수신이 완료될 때까지 Blocking되기 때문이다.
즉 fread같은 c 함수는 파일을 읽어들이는 도중까지 blocking상태가 된다.
중첩 I/O ------------------------------------------------------------------------------------------------------
비동기 I/O방식 중에서 가장 대표적인 것이 중첩 I/O이다.
그림으로 보면 이해가 빠를 것이다.
파일은 파일대로 로딩하면서 사운드를 플레이하게 되는 방식을 의미한다.
즉 파일 입출력을 하면서도 음악을 재생시키는 기능을 동시에 실행하는 것을 의미한다.
완료루틴 기반 확장 I/O ---------------------------------------------------------------------------------------------
완료루틴 기반 확장 I/O방식은 다음을 의미한다.
하나의 I/O작업이 완료되면 곧바로 다음 I/O작업으로 자동으로 넘어가면 안될까?
이를 위한 매커니즘이 존재하는데 이를 APC라고 한다. 윈도우 내부적으로 가지고 있는 I/O작업 매커니즘을 의미한다.
Asynchronous Procedure Call의 약자로 APC는 크게 두가지 종류로 나뉜다.
1. User-mode APC
2. Kernel-mode APC
2-1. Normal Kernel-mode APC
2-2. Special Kernel-mode APC
파일 입출력의 함수를 호출하면 이 함수는 WriteFileEX 같은 입출력 함수 호출이 완료되었을시 그곳에 인자로 전달된 완료루틴 함수의 포인터와 매개변수 정보가 쓰레드의 APC Queue에 저장되고 다음 I/O함수를 호출하는 과정을 거치게 된다.
'게임개발공부 > 서적공부' 카테고리의 다른 글
알기쉽게 해설한 데이터 베이스론 1장 2) (2) | 2014.07.30 |
---|---|
알기쉽게 해설한 데이터 베이스론 1장 1) (0) | 2014.07.30 |
윈도우 시스템 프로그래밍 17장 <구조적 예외처리 SEH> (0) | 2013.11.25 |
윈도우 시스템 프로그래밍 16장 <컴퓨터 구조4> (0) | 2013.11.24 |
윈도우 시스템 프로그래밍 <쓰레드 풀> (0) | 2013.11.23 |