하드 디스크(이미지 출처, 소니블로그)


하드 디스크는 고속으로 회전하는 디스크의 표면에 데이터를 저장한다. 데이터는 동심원으로 된 트랙에 저장되는데, 하드 디스크는 트랙을 여러 개의 섹터로 미리 구획하고, 트랙을 오가는 헤드를 통해 섹터 단위로 읽기와 쓰기를 수행한다. 하드 디스크에서 데이터 입출력 요청을 완료하는 데 걸리는 시간을 접근 시간이라고 하며, 이는 하드 디스크의 성능을 결정하는 기준 중 하나가 된다. 접근 시간은 원하는 트랙까지 헤드가 이동하는 데 소요되는 탐색 시간과, 트랙 위에서 해당 섹터가 헤드의 위치까지 회전해 오는데 걸리는 대기 시간의 합이다. 하드 디스크의 제어기는 ‘디스크 스케줄링’을 통해 접근 시간이 최소가 되도록 한다.


 

㉠ 200개의 트랙이 있고 가장 안쪽의 트랙이 0번인 하드 디스크를 생각해 보자. 현재 헤드가 54번 트랙에 있고 대기 큐*에는 ‘99, 35, 123, 15, 66’ 트랙에 대한 처리 요청이 들어와 있다고 가정하자. 요청 순서대로 데이터를 처리하는 방법을 FCFS 스케줄링이라 하며, 이때 헤드는 ‘54 → 99 → 35 → 123 → 15 → 66’과 같은 순서로 이동하여 데이터를 처리하므로 헤드의 총 이동 거리는 356이 된다.


만일 헤드가 현재 위치로부터 이동 거리가 가장 가까운 트랙 순서로 이동하면 ‘54 → 66 → 35 → 15 → 99 → 123’의 순서가 되므로, 이때 헤드의 총 이동 거리는 171로 줄어든다. 이러한 방식을 SSTF 스케줄링이라 한다. 이 방법을 사용하면 FCFS 스케줄링에 비해 헤드의 이동 거리가 짧아 탐색 시간이 줄어든다. 하지만 현재 헤드 위치로부터 가까운 트랙에 대한 데이터 처리 요청이 계속 들어오면 먼 트랙에 대한 요청들의 처리가 계속 미뤄지는 문제가 발생할 수 있다.


이러한 SSTF 스케줄링의 단점을 개선한 방식이 SCAN 스케줄링이다. SCAN 스케줄링은 헤드가 디스크의 양 끝을 오가면서 이동 경로 위에 포함된 모든 대기 큐에 있는 트랙에 대한 요청을 처리하는 방식이다. 위의 예에서 헤드가 현재 위치에서 트랙 0번 방향으로 이동한다면 ‘54→ 35 → 15 → 0 → 66 → 99 → 123’의 순서로 처리되며, 이때 헤드의 총 이동 거리는 177이 된다. 이 방법을 쓰면 현재 헤드 위치에서 멀리 떨어진 트랙이라도 최소한 다음 이동 경로에는 포함되므로 처리가 지나치게 늦어지는 것을 막을 수 있다. SCAN 스케줄링을 개선한 LOOK 스케줄링은 현재 위치로부터 이동 방향에 따라 대기 큐에 있는 트랙의 최솟값과 최댓값 사이에서만 헤드가 이동함으로써 SCAN 스케줄링에서 불필요하게 양 끝까지 헤드가 이동하는 데 걸리는 시간을 없애 탐색 시간을 더욱 줄인다.


* 대기 큐 : 하드 디스크에 대한 데이터 입출력 처리 요청을 임시로 저장하는 곳.