SCSI 포트 I/O 모델
SCSI 포트 드라이버는 디스패치 테이블 및 드라이버 개체에서 드라이버 콜백 루틴을 최소화하기 위한 일련의 포인터를 통해 미니포트 드라이버와 통신합니다. 미니포트 드라이버는 이러한 콜백 포인터를 사용하여 SCSI 포트의 디스패치 테이블 및 드라이버 개체를 초기화하기 위해 DriverEntry 루틴에서 ScsiPortInitialize를 호출합니다. 이러한 콜백 포인터 중 하나는 I/O 요청을 처리하는 데 사용되는 미니포트 드라이버의 시작 I/O 루틴에 대한 진입점입니다. 포트 드라이버는 드라이버 개체의 DriverStartIo 멤버에 이 포인터를 할당합니다.
SCSI 포트는 상위 수준 드라이버에서 I/O 요청을 받을 때마다 내부 큐에서 요청을 큐에 대기합니다. SCSI 포트의 내부 큐에 대한 자세한 내용은 SCSI 포트 드라이버의 큐 관리를 참조하세요.
대상 디바이스가 다음 I/O 요청을 받을 준비가 되면 SCSI 포트는 IoStartPacket을 호출합니다. 그러면 DriverObject-DriverStartIo>에 저장된 미니포트 드라이버 시작 I/O 콜백 루틴을 호출합니다. 미니포트 드라이버의 시작 I/O 루틴의 작업 및 필수 특성에 대한 자세한 내용은 SCSI Miniport Driver의 HwScsiStartIo 루틴을 참조하세요.
SCSI 포트는 인터럽트 차단 및 시작 I/O 루틴이 중요한 운영 체제 및 드라이버 구조에 대한 액세스를 동기화하도록 보장하기 위해 미니포트 드라이버의 시작 I/O 루틴을 호출하기 전에 프로세서의 IRQL을 발생합니다.
스토리지 클래스 드라이버와 SCSI 포트 드라이버 간의 I/O 요청 패킷 흐름은 비동기이지만 SCSI 포트 드라이버와 대상 디바이스 간의 I/O 요청 패킷 흐름은 동기적입니다. SCSI 포트는 클래스 드라이버가 이전 I/O 요청이 완료되기 전에 SCSI 포트에 새 I/O 요청을 보낼 수 있도록 하는 내부 큐 시스템을 사용합니다. 그러나 SCSI 포트는 미니포트 드라이버에서 다음 I/O 요청을 받을 준비가 되었다는 알림을 받을 때까지 대상 디바이스에 다음 I/O 요청을 보내지 않습니다. 미니포트 드라이버는 ScsiPortNotification 라이브러리 루틴을 호출하여 SCSI 포트에 알 수 있습니다.
Storport 드라이버는 특히 인터럽트 마스킹과 관련하여 보다 유연한 I/O 모델을 제공합니다. Storport I/O 모델과 SCSI 포트 I/O 모델 간의 차이점에 대한 자세한 내용은 Storport I/O 모델을 참조하세요.