예제 I/O 요청 - 개요

다음 그림에서는 하위 시스템이 애플리케이션을 대신하여 데이터 파일을 나타내는 파일 개체를 열 때 발생하는 일에 대한 개요를 보여 줍니다.

파일 개체 열기를 보여 주는 다이어그램

  1. 하위 시스템은 I/O 시스템 서비스를 호출하여 명명된 파일을 엽니다.

  2. I/O 관리자는 개체 관리자를 호출하여 명명된 파일을 조회하고 파일 개체에 대한 기호 링크를 resolve 수 있도록 합니다. 또한 보안 참조 모니터를 호출하여 하위 시스템에 해당 파일 개체를 열 수 있는 올바른 액세스 권한이 있는지 검사.

  3. 볼륨이 아직 탑재되지 않은 경우 I/O 관리자는 열린 요청을 일시적으로 일시 중단하고 파일 시스템이 사용하는 대용량 스토리지 디바이스 중 하나에 저장된 파일 개체를 인식할 때까지 하나 이상의 파일 시스템을 호출합니다. 파일 시스템이 볼륨을 탑재하면 I/O 관리자가 요청을 다시 시작합니다.

  4. I/O 관리자는 열린 요청에 대한 메모리를 할당하고 IRP를 초기화합니다. 드라이버에 대해 열기는 "만들기" 요청과 동일합니다.

  5. I/O 관리자는 파일 시스템 드라이버를 호출하여 IRP를 전달합니다. 파일 시스템 드라이버는 IRP의 I/O 스택 위치에 액세스하여 수행해야 하는 작업을 결정하고, 매개 변수를 확인하고, 요청된 파일이 캐시에 있는지 확인하고, 그렇지 않은 경우 IRP에서 다음 낮은 드라이버의 I/O 스택 위치를 설정합니다.

  6. 두 드라이버 모두 IRP를 처리하고 요청된 I/O 작업을 완료하여 I/O 관리자 및 다른 시스템 구성 요소에서 제공하는 커널 모드 지원 루틴을 호출합니다(이전 그림에 표시되지 않음).

  7. 드라이버는 IRP에서 I/O 상태 블록이 설정된 I/O 관리자에게 IRP를 반환하여 요청된 작업이 성공했는지 또는 실패한 이유를 나타냅니다.

  8. I/O 관리자는 IRP에서 I/O 상태 가져오므로 보호된 하위 시스템을 통해 원래 호출자에게 상태 정보를 반환할 수 있습니다.

  9. I/O 관리자는 완료된 IRP를 해제합니다.

  10. I/O 관리자는 열린 작업이 성공한 경우 파일 개체에 대한 핸들을 하위 시스템에 반환합니다. 오류가 발생하면 하위 시스템에 적절한 상태 반환합니다.

하위 시스템이 데이터 파일, 디바이스 또는 볼륨을 나타내는 파일 개체를 성공적으로 연 후 하위 시스템은 반환된 핸들을 사용하여 디바이스 I/O 작업에 대한 후속 요청(일반적으로 읽기, 쓰기 또는 디바이스 I/O 제어 요청)에서 파일 개체를 식별합니다. 이러한 요청을 수행하려면 하위 시스템에서 I/O 시스템 서비스를 호출합니다. I/O 관리자는 이러한 요청을 적절한 드라이버에 전송된 IRP로 라우팅합니다.