리눅스 AIO 핵심 아키텍처
Linux 2.6 커널부터 내장된 비동기 입출력 지원은 애플리케이션 스레드가 I/O 대기 중에도 다른 처리를 계속할 수 있도록 합니다. 이는 io_submit() 시스템 콜로 하나 이상의 I/O 요청을 제출하고, io_getevents()로 완료된 작업을 수집하는 분리된 인터페이스를 통해 구현됩니다.
컨텍스트 기반 완료 큐 관리
모든 I/O 요청은 생성 시점에 특정 완료 큐(ioctx)와 연결됩니다. 각 요청은 읽기/쓰기 같은 작업 유형, 파일 디스크립터, 파일 오프셋 및 버퍼 정보를 지정하며, 작업 완료 후 결과는 연결된 완료 큐의 이벤트로 보고됩니다.
재시도 기반 비동기 설계
버퍼링된 파일시스템 AIO는 페이지 읽기 대기 시점에서 콜백을 큐에 등록하고 제어를 반환하는 재시도 모델을 사용합니다. 페이지가 준비되면 콜백이 호출되어 호출자의 주소공간 컨텍스트에서 재시도를 진행하며, 각 반복은 남은 I/O 부분을 처리합니다.