single-user 환경은 다양하게 정의할 수 있다. user application이 하나라고 한다면, CPU scheduling은 non-preemptive하게 이루어지며 마치 batch processing처럼 유일한 프로세스가 끝날 때까지 실행된다. 이러한 환경에서는 다른 FCFS 외에 다른 disk scheduling 알고리즘을 사용해도 FCFS와 같은 결과를 낸다. 따라서 가장 구현이 쉬운 FCFS를 쓰는 게 유리하다. 한편, single-user여도 다중 프로그래밍 환경이라면 I/O 큐에 요청이 쌓일 수 있다. 이때는 이동량과 방향 전환이 적은 다른 알고리즘으로 성능을 높이는 게 유리하다.
SSTF 알고리즘은 greedy하게 어떤 시점에 가장 가까운 블록의 요청을 먼저 처리한다. head가 a에 있을 때, 임의의 요청에 대해 head가 이동하는 거리의 기댓값은 아래와 같다.
$$ ∫_0^M|x-a|f(x)dx $$
M은 sector 번호의 최댓값이고, uniform 분포를 가정할 때 f(x) = 1/M이다. 이 값은 a = 0.5M일 때 최소가 된다. 그러므로 SSTF에서는 head가 가운데 있을 때 다음 이동거리가 최소가 된다. 또한, head가 가운데에서 멀어질수록 최대 이동거리가 길어지므로 멀리 떨어진 요청이 starvation에 빠질 가능성이 높아진다.
우선 rotational latency를 제약에 추가하는 순간 문제의 차원이 하나 증가한다. 이는 스케줄러의 최적해 계산에 필요한 시간을 상당히 지체시킨다. 또한, seek time은 (head 이동거리 / head 이동속력) + 방향 전환 시간으로 계산된다. 이때 알고리즘 성능은 head 이동거리로 따지는데, head 이동속력과 방향 전환 시간은 장치마다 천차만별이다. rotational latency = (회전 각도 / 회전 각속도)일때, 장치마다 회전 각속도가 다르므로 rotational latency를 고려하면 단순히 head 이동거리만으로 알고리즘 성능을 비교할 수 없다는 문제가 생긴다.
그래도 구현한다면, 우선 I/O 요청 시 head의 track 번호와 더불어 sector 위치를 전달해줘야 한다. 또한, 앞서 언급한 seek time과 rotational latency 계산 식을 토대로 최적화시킨다.
그렇다. 읽기 연산은 data의 consistency를 해치지 않으므로 복사본에서 병렬적으로 수행될 수 있다. 따라서 만약 소규모 디스크마다 controller가 각자 존재하는 경우 copy가 하나 있는 RAID 1의 읽기 속도가 RAID 0보다 2배 빠르다. 소규모 디스크 전체에 controller가 하나 존재하더라도, 원본과 copy 중 스케줄링에 유리한 위치에 존재하는 데이터만 선택하여 방문함으로써 2배보다 낮지만, RAID 0보다 나은 성능을 낼 수 있다.