이전에 I/O 장치에 대한 전반적인 개념과 운영체제가 I/O 장치와 어떻게 상호작용하는지 살펴보았습니다. 이번에는 영속성을 유지하는 장치 중 하나인 하드 디스크 드라이브에 대해 알아보겠습니다.
HDDs
HDD는 byte의 배열을 단위로 하는 주요 메모리가 아니고 machine의 load/read 명령어를 통하여 직접적으로 명령어를 실행하거나 데이터를 가져올 수 없다. sector들의 배열로 추상화 되어있고, 각 sector는 전형적으로 512byte or 4096byte이다.
HDD은 컴퓨터 시스템에서 수십년동안 영구적인 저장소 였고 뒤에서 살펴볼 파일 시스템도 대부분 하드 디스크 드라이브의 동작에 기반을 두고 개발되었다. HDD는 크고 싸며 영구적이지만 느리다.
1. HDD 구조 
플래터라는 판이 있고 이 플래터에는 각각 2개의 surface를 가진다. 플래터들은 spindle(회전축)을 중심으로 일정한 속도로 회전한다. surface의 동심원 하나를 track이라고 하고 track은 여러 sector들로 이루어져 있다. disk arm에 연결된 disk head를 통해 디스크 표면 위를 읽거나 쓴다.
HDD는 Seek, Rotation, Transfer을 거쳐 데이터를 읽거나 쓴다.
- Seek: 읽거나 쓰기 원하는 트랙으로 disk arm을 이동시킨다.
- Rotation: head에 원하는 섹터를 위치시키는 것.
- Transfer: surface에서 데이터를 읽거나 데이터를 쓴다.
2. HDD 성능
- Seek Time
- disk arm을 원하는 트랙으로 이동하는데 걸리는 시간
- 가장 비용이 많이 드는 디스크 연산중 하나
- Rotational delay
- sector가 회전하여 head아래로 올때까지 기다리는 시간
- rotations per minute(RPM)에 의존
- 5400, 7200 RPM이 일반적
- Transfer time
- surface에서 디스크 컨트롤러로 데이터를 전송하고, 호스트로 다시 전송하는데 걸리는 시간
I/O시간 계산 방법 
3. HDD 스케줄링
- 여러 I/O 요청이 올 때 어떤 순서로 스케줄링 되야 할까?
- CPU 스케줄링과는 크게 다름
- Seeks이 매우 비싼 연산
- 요청 위치에 따른 상대적인 disk head의 위치가 job의 길이보다 중요하다.
- Work Conserving Schedulers
- Non-work-conserving Schedulers
- 때때로, 만약 시스템이 다른 요청이 도착할것을 예상한다면 잠시 기다리는 것이 더 좋을 수 있음
1. FCFS
First-come First-Served(아무것도 하지 않음)
- 로드가 몇개 없을때는 합리적임
- 요청 큐가 길어질 경우 오랫동안 기다려야 함
- starvation 없음

2. SSTF
- Shortest Seek Time First
- arm의 이동을 최소화 시킨다(seek time)
- 가운데 블럭이 상대적으로 유리하다.
- starvation을 유발할 수 있다. (계속 가까운 트랙의 요청이 들어오면 먼 트랙은 starvation)

- Nearest-Block-First(NBF)
- 드라이브의 구조는 호스트 운영체제에게 공개되어 있지 않을때 운영체제는 단순히 블럭들의 배열로 인식한다. 즉, 해당 block이 어느 트랙에 위치해있는지 알지 못한다. 이 경우 NBF를 사용한다.
3. SCAN
SSTF의 Starvation 문제를 해결하기 위한 방식으로 SCAN 방식이 있다.
- Scan
- 한 방향의 끝까지 요청을 처리한 후, 반대로 진행한다.
- 대기 시간을 균일하지 않다.
- 가운데 블럭이 유리하다.
위 scan도 starvation 문제가 발생할 수 있다. sweep 과정에서 계속 요청이 들어오면 멀리 있는 block에서 starvation이 발생할 수 있다. 
- F-SCAN
- sweep하는 동안 queue를 freeze시켜 요청이 들어오는 것을 막는다.
- 멀리 있는 요청들의 starvation을 막는다.
4. C-SCAN
- Circular SCAN
- SCAN처럼 동작하지만, 한 방향으로만 진행한다. (reverse X)
- 대기 시간이 균등하다.
- SCAN과 C-SCAN은 elevator 알고리즘이라고 불린다.
- 둘 모두 rotation을 고려하지 않는다.

5. Modern-Disk Scheduling
-
I/O Scheduler in host OS
- 전반적인 disk의 throughput을 증가시킨다.
- 요청의 수를 줄이기 위해 요청들을 합친다.
- seek time을 줄이기 위해 요청들을 정렬한다.
- starvation을 막는다.
- 다른 프로세스들간에 fairness를 제공한다.
-
Disk drive
- Disk는 다수의 outstanding 요청을 가진다.
- e.g. STA NCQ(Native Command Queueing): 최대 32개의 요청까지 성능을 최적화 하는 순서로 구성
- Disk는 head의 위치와 track의 layout 정보를 고려하여 요청들을 스케줄한다.
- e.g. SPTF(Shortest Positioning Time First): rotation 시간까지 고려한다.
여기까지 하드 디스크 드라이브에 대해 알아보았습니다. 다음에는 다른 영속성 장치인 SSD에 대해 알아보겠습니다.