Disk Scheduling
일반적인 입출력 장치 스케쥴링 알고리즘은 '선입선출'이나, 디스크 스케쥴링은 이를 따르지 않음
디스크 구조
디스크는 크기가 큰 순으로 표면(Surface) - 트랙(Track) - 섹터(Sector)로 구성되어 있음. 표면 하나당 20 ~ 1,500개의 트랙이 존재하며, 양면을 모두 사용함. 트랙의 가장 바깥쪽이 0번으로 넘버링되며, 안쪽으로 들어갈 때마다 증가. y축을 기준으로 봤을 때 다른 표면에서 동일한 트랙 넘버를 갖고 쌓이는 집합을 실린더(Cylinder)라고 함. 실린더의 수는 트랙의 갯수와 동일.
한 섹터 영역이 저장될 때마다 섹터의 끝에서 저장된 데이터들에 대한 CheckSum - Parity 연산이 이루어짐. 이는 디스크를 접근하며 주기적으로 오류를 검사할 때 이용. 이전의 내역과 비교하여 데이터들의 삭제/변경 여부를 판별. 섹터는 디스크에 물리적으로 데이터를 저장하는 최소의 정보 단위이며, 운영체제에서 사용하는 블록 단위를 섹터로 맵핑해주어야 함.
디스크를 읽어들이는 데에 걸리는 시간 (Seek time)
원하는 섹터를 읽기 위해서는 Disk Arm에 달린 Head가 해당 섹터로 이동해야 함. 섹터에서 헤드까지 도달하는 시간을 Rotational Delay라 함. 평균적으로 소요되는 RD는 0.5 바퀴라고 볼 수 있음. 섹터가 헤드에 도달했다면 데이터를 센싱하여 본체로 전송 (Data transfer time)
따라서 데이터를 읽어들이는 시간을 절약하기 위해선 Seek time을 줄여야 하고, 하드웨어적인 개선점보다는 디스크 스케쥴링을 통한 소프트웨어 측면에서의 개선을 제안
스케쥴링 방식
- First in first out : 선입선출. 이동동선이 길어져 비효율적
- Short seek time first : Seek time이 짧은 것들을 우선적으로 처리 - 헤드 기준 가까운 섹터부터 처리하는 방식으로, 처리 시간은 획기적으로 줄었으나 결국 우선순위 알고리즘의 맹점인 Starvation 문제가 발생
- SCAN Algorithm : 스캐너처럼 일관된 방향으로 훑으며 섹터들을 처리, 끝단에서 방향을 바꾸어 이를 반복