디스크에 파일을 사용하거나, 파일을 저장해달라거나 하는 요청은 디스크 큐라는 곳에 쌓이게 된다. 도착 순서에 따라 큐에 쌓이게 된다.
위의 이미지에서 트랙의 가장 안쪽이 100번 트랙, 바깥쪽이 1번 트랙이 된다.
디스크 큐에 대기중인 트랙들이 1, 100, 3, 99, 2 순서라면, 맨처음 1번트랙에 있는 데이터를 읽어야 하므로 헤드가 1번트랙으로 가서 데이터를 읽는다.
그다음 헤드가 100번 트랙으로 이동해서 데이터를 읽는 방식이다. 밑줄친 순서 대로라면 헤드는 계속 트랙을 들락 날락 하게된다. 그래서 헤드는 트랙이 큐에 들어온 순서대로 처리하지 않는다.
위의 이미지에서 디스크 접근시간은 세 가지로 분류되는데, 그 중 제일 큰 시간을 차지하는게 탐색시간(Seek time
) 이다. 그 다음은 회전지연(Rotational latency) 인데, 중앙의 회전축이 돌면서 해당 섹터가 헤드에 도착 했을 때 데이터를 읽을 수 있다. 그래서 디스크에서는 접근 시간에 가장 큰 비중을 차지하는 Seek time을 줄이는 것이 가장 중요하다. 그래서 디스크 스케쥴링 이라는 것이 필요한 것이다.
FCFS (First-Come, First-Served)
위의 사진은 트랙을 위에서 봐라봤을 때의 단면도를 직사각형화 해서 나타낸 것이다. 현재 헤드는 53번에 위치해 있고, 이미지에 적힌 경로대로 움직인다. 큐에 먼저 들어온 순서대로 트랙에 접근하는 것이다. 헤드의 움직임을 보면 양 끝을 길게 오가는게 보이는데, 굉장히 비효율 적이다. 움직임을 최대로 하고 있는 것이다. 그래서 이 방법은 잘 쓰지 않는다.
SSTF (Shortest Seek Time First)
FCFS의 단점을 보완하여 효율적인 헤드의 움직임을 고안한 방법이다. 시크타임이 가장 짧은 트랙부터 접근하는 방법이다. 현재 위치 53번을 기준으로 하여 큐에 들어와있는 요청들 중에 누가 현재 위치에서 시크타임이 가장 짧은지를 판단하여 헤드가 움직인다. 위의 순서대로라면 그 다음 위치는 65번이다. 그 다음 65번 위치 기준으로 다시 가까운 시크타임 트랙을 찾아서 이동한다. 현재 이동한 트랙을 기준으로 헤드의 움직임을 최소한으로 하는 효율적인 방식이다.
물론 STARVATION 문제가 발생한다. 누군가는 일찍 큐에 도착해도 계속 기다려야 하는 것이다.
SCAN
현재 디스크 스케쥴링에서 가장 많이쓰는 방법이다. 이 방법은 헤드가 큐에 몇번 트랙이 들어와있는지 전혀 신경을 쓰지 않는다. 일정하게 양 끝으로 지그재그로 움직이는데, 지나가는 길목에 있는 모든 요청을 처리한다. 다른 한쪽 끝에 도달하면 역방향으로 이동하며 오는 길목에 있는 요청을 처리하며 다시 반대쪽 끝으로 이동한다. 엘리베이터와 비슷하다.
저장장치 계층구조와 캐싱(caching)
CPU와 I/O 사이의 압도적인 속도차이 완충관련
위 그림에는 나와있지 않지만 Registers 위에는 CPU가 존재한다. 위 그림상의 계층구조는 위로 올라갈수록 속도가 빨라지는 구조이다. CPU 안에는 Registers라는 것들이 존재하는데, CPU가 기계어를 실행할 때 레지스터에 있는 값을 가지고 실행을 하게 된다. CPU 내부에 아주 작은 요소로 존재하는 것들이다. 그다음 CPU와 메인메모리 사이에는, DISK와 CPU의 속도차이를 완충하기 위한 캐시 메모리(Cache Memory)가 존재한다. Volatility는 휘발성을 의미하는데, Disk 계층은 컴퓨터의 전원을 꺼도 그 안의 데이터가 날아가지 않는 비휘발성 특징을 가진다. 반면 메인메모리(D램)와 캐시메모리, 레지스터는 휘발성 특징을 가진다. Primary 계층은 cpu가 직접 실행할 수 있다는 의미이다. Secondary 계층은 cpu에 직접 접근을 못하고 Primary 메인메모리에 올려 놓아야 접근이 가능하다. 이런식으로 계층구조를 구성하는 이유는 속도차이를 개선하기 위한것이다.
Caching (copying information into faster storage system)
캐싱의 원리는 Primary 계층으로 복사를 해놓고, CPU가 다시 재요청을 하는 경우가 생기면 Secondary 계층으로 다시 내려올 필요가 없이 복사해놓은 데이터를 다시 가져다 쓸 수 있도록 하는것이다. 그러므로 Secondary 계층까지 내려와야 하는 시간을 단축 시켜준다. 하지만 메모리의 공간은 한정되어 있기 때문에 새로운 메모리가 올라가면 기존에 저장되어 있던 메모리중 하나는 빠져나와야 한다.