종류별, 특성별로 어떻게 연결?
어떻게 동일한(비슷한) 인터페이스 보여줄 수 있을까?
입출력 장치 구분:

- 데이터 세분성(granularity) : 바이트/블록
- 사용하는 디바이스 기본 단위가 바이트인지 블록인지?
- 접근 방식(Access Pattern)
- 순차 접근(Sequential), 임의 접근(Random)
- 전송 방식(Transfer Mechanism)
- Programmed IO, DMA(직접 메모리 접근)

프로세서와 디바이스 간 소통방식?
- CPU는 HW 컨트롤러와 소통
- HW도 읽고 쓰기 위한 레지스터, 메모리 가지고 있음

Programmed IO vs. DMA
Programmed IO: 각 바이트가 in/out 또는 load/store를 통해 전송
Direct Memory Access(DMA): HW 컨트롤러에게 메모리 직접 접근하게 함
OS는 언제 I/O 동작이 끝났는지, 에러 발생했는지 알아야:
I/O 인터럽트, 폴링(Polling)
- 인터럽트: I/O 디바이스가 서비스 필요할 때 인터럽트 발생

- 폴링: OS가 주기적으로 디바이스 상태 레지스터 확인

디바이스 드라이버
- 디바이스 HW와 직접 통신하는 커널의 디바이스 특화(device specific) 코드
하드웨어 버퍼링

- 속도 다른 디바이스 간의 데이터 전송에 사용
- 데이터 크기가 다를 때(ex. 큰 데이터를 작게 분할 -> 버퍼에서 다시 합쳐서 전송)
- 시스템 콜 호출 당시의 데이터 저장
(하드)디스크 탐색 시간 최적화
용어 정리
- Transfer Time: 디스크 표면에서 메모리로 비트를 복사하는데 드는 시간
- Disk Latency Time: R/W 헤드가 적절한 섹터에 도착할 때까지 걸리는 시간
- Disk Seek Time: 목표 트랙/실린더 도착할 때까지 R/W 헤드가 움직이는 시간
- Access Time = Seek + Latency + Transfer
- FCFS: 요청 발생 순서대로 처리
- 52+64+51+57+27=251
- SSTF: 현재 헤드 위치에서 가장 가까운 요청부터 처리
- 11+21+6+57+13=107
- Scan: 밖(or 안) 한 방향으로 계속 탐색 -> 이후 반대 방향으로 탐색
- 12+6+6+33+30+13=100
- Look: 가장 바깥의 요청까지 탐색 -> 가장 안쪽 요청까지 탐색
- 12+6+27+30+13=87
- Circular Scan: Scan인데 한 방향 탐색 후 home(여기서는 0번)으로 돌아옴
- 12+6+6+home(99)+23+13+30=189
- Circular Look: Scan인데 한 방향 탐색 후 home으로 돌아옴
- 12+6+home(93)+23+13+30=177

References:
1. 강순주 교수님 OS PPT 13
2. Operating System Concepts_10ed. Abraham-Silberschatz
3. https://stackoverflow.com/questions/3215878/what-are-in-out-instructions-in-x86-used-for: IN/OUT 명령
4. https://www.javatpoint.com/buffering-in-operating-system : 하드웨어 버퍼
5. https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/13_IOSystems.html: PC 버스 구조