TL;DR
- WinSpd는 커널 모드 코드를 작성하지 않고 사용자 모드에서 SCSI 디스크를 만들고 제공해, Windows 저장소 스택에 실제 디스크처럼 추가하는 도구임.
- 저장 장치는 연속된 64비트 논리 블록 주소(LBA) 공간에서 데이터를 읽고 쓰며, 캐시 비우기와 블록 해제 작업도 지원함.
- 핵심 구성 요소는 StorPort 가상 미니포트 커널 드라이버와 사용자 모드 저장 장치가 드라이버와 통신하는 DLL임.
- 실행기 서비스는 사용자 모드 저장 장치를 실행하고 제어하며, 셸 확장은 Windows 탐색기와 셸의 마운트·꺼내기 기능을 구현함.
- 프로젝트에는 드라이버·DLL·실행기·도구·예제의 소스 코드가 포함되며, GPLv3 및 오픈 소스 소프트웨어 대상 특별 예외와 상용 라이선스를 제공함.
WinSpd 소개
- WinSpd는 커널 모드 코드를 작성하지 않고 사용자 모드에서 저장 장치(“SCSI 디스크”)를 만들 수 있게 함.
- 사용자 모드 프로세스인 저장 장치가 저장 장치를 생성하고 제공하며, 해당 장치는 Windows 운영 체제의 저장소 스택에 추가됨.
- Windows에서는 실제 디스크처럼 표시되며, NTFS와 같은 파일 시스템으로 포맷하고 접근할 수 있음.
사용자 모드 저장 장치
- 사용자 모드 저장 장치는 저장 장치를 생성하고 제공하는 사용자 모드 프로세스임.
- 저장 장치는 SCSI SBC 표준에서 정의하는 SCSI “직접 접근 블록 장치”이며, 일반적으로 “SCSI 디스크”라고 부름.
- 데이터는 논리 블록에 저장되며 각 블록은 같은 크기인 블록 길이(Block Length)를 가짐.
- 각 블록에는 하나의 연속된 주소 공간에서 사용하는 64비트 논리 블록 주소(LBA)가 있음.
- WinSpd와 SCSI 표준은 블록 배치에 기존의 실린더·헤드·섹터(CHS) 구조를 전제하지 않음.
- 저장 장치의 기본 작업은 다음과 같음.
- 읽기(Read): 지정된 LBA의 블록 읽기.
- 쓰기(Write): 지정된 LBA에 블록 쓰기.
- 보조 작업은 다음과 같음.
- 플러시(Flush): 지정된 LBA의 캐시된 블록 데이터 비우기.
- 매핑 해제(Unmap): 지정된 LBA의 블록 매핑 해제 및 할당 해제. 널리 알려진 TRIM 명령과 유사함.
- 사용자 모드 저장 장치 생성에 관한 전체 안내서는 튜토리얼에서 제공함.
설계
- WinSpd는 각기 다른 책임을 지닌 여러 소프트웨어 구성 요소로 이루어짐.
- 핵심 구성 요소는 StorPort 가상 미니포트로 구현된 커널 드라이버와 사용자 모드 DLL임.
- 사용자 모드 저장 장치는 특수 IOCTL을 통해 DLL과 드라이버 사이에서 통신함.
- 실행기 서비스는 사용자 모드 저장 장치를 실행하고 제어함.
- 셸 확장은 Windows 탐색기와 셸에서 사용할 수 있는 마운트 및 꺼내기 기능을 구현함.
- WinSpd 가상 미니포트가 구현하는 SCSI 명령은 다음과 같음.
REPORT LUNSTEST UNIT READYINQUIRY: 표준, 지원 페이지 VPD, 일련 번호 VPD, 장치 식별자 VPD, 블록 제한 VPD, 논리 블록 프로비저닝 VPDMODE SENSE(6),MODE SENSE(10): 모든 페이지, 모드 캐싱 페이지READ CAPACITY(10),READ CAPACITY(16)READ(6),READ(10),READ(12),READ(16)WRITE(6),WRITE(10),WRITE(12),WRITE(16)SYNCHRONIZE CACHE(10),SYNCHRONIZE CACHE(16)UNMAP
프로젝트 구성
build/VStudio: WinSpd 솔루션 및 프로젝트 파일.ext: 외부 의존성.ext/tlib:secfs(Secure Cloud File System) 프로젝트에서 가져온 소형 테스트 라이브러리.inc: 공개 헤더.inc/winspd: WinSpd API 공개 헤더.src: WinSpd 소스 코드.src/devsetup: 시스템에서 WinSpd 장치 드라이버를 추가하거나 제거하는devsetup유틸리티의 소스 코드.src/dll: 사용자 모드 저장 장치가 WinSpd 장치 드라이버와 통신하는 데 사용하는 WinSpd DLL의 소스 코드.src/dotnet: .NET 계층의 소스 코드.src/launcher: 실행기 서비스와launchctl유틸리티의 소스 코드. 실행기 서비스는 사용자 모드 저장 장치를 실행하고 제어함.src/scsitool:scsitool명령줄 유틸리티의 소스 코드.src/shellex: WinSpd 셸 확장의 소스 코드. Windows 탐색기와 셸에서 마운트 및 꺼내기 기능을 구현함.src/stgtest: 저장소 테스트 도구stgtest의 소스 코드.src/sys: WinSpd 커널 드라이버의 소스 코드.tst: 사용자 모드 저장 장치 예제와 테스트 도구의 소스 코드.tools: WinSpd 빌드 및 테스트를 위한 여러 도구.
라이선스
- WinSpd는 자유·오픈 소스 소프트웨어를 위한 특별 예외가 적용되는 GPLv3 라이선스로 제공됨.
- 상용 라이선스도 제공함. 자세한 내용은 Bill Zissimopoulos(billziss at navimatics.com)에게 문의하면 됨.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요