다수의 sector
0 ~ n-1까지
연속된 섹터를 접근하는 것이 접근 속도가 빠름
한번에 512B 보장
-> 4KB면 8번 읽기 수행됨
회전수(RPM)
rotation per minute
10000 RMP이면 한번 도는데 얼마나 걸리나..?
1분에 10000회
1회 도는 데 1/10000분
6/1000 초
-> 6ms 걸린다
sector 11 읽기 요청이 있다면...
track skew
한 트랙에서 다른 트랙 넘어갈 때 헤드 위치 재배치 필요
디스크에서 섹터 읽을 때
해당 트랙의 모든 섹터를 읽어서 메모리에 캐쉬한다 -> 동일 트랙 후속 요청을 위해
디스크에 쓸 때
I/O Time
= seek time + rotation delay + transfer delay
I/O rate = R I/O = Size(transfer) / T I/O
ex)
탐색시간 평균 4ms, 회전 속도 7500 rpm, 512 바이트 섹터를 트랙당 500개 가진 디스크
2500 섹터로 구성된 1.28MB 읽을 때 전송하는데 걸리는 전체 시간
순차적 구성 읽기 전체 시간
트랙 수 : 2500 / 500 = 5
첫 트랙 읽을 때
seek time (4ms) + rotation delay(4ms) + transfer(한바퀴 도는데 걸리는 시간)
1/7500 분
= 60 / 7500 sec
= 1 / 125
= 0.008sec
= 8msec
=> 16msec
나머지는 탐색시간 없이 읽을 수 있다면
4 * (4 + 8) = 128 msec
무작위 접근 방식
한 섹터 읽는 데 걸리는 시간
4 + 4 + 8/500 msec
이것을 총 2500회 읽게 된다
(4 + 4+ 8/500) * 2500
= 20.04초
다른 문제
탐색 시간 4ms
10000RPM
600개의 섹터
각 섹터는 512B의 데이터
파일에는 2000개의 섹터
평균 회전 대기 시간 == 완전한 회전 시간의 절반
전체 파일 읽는 데 필요한 시간..?
한바퀴 도는데 1/10000min=60/10000 sec = 6/1000 sec = 6msec
rotation time = 3msec
seek time = 4sec
한 섹터 transfer time = 6msec / 600 = 0.01msec
파일 읽는 데 걸리는 시간 = (3 + 4 + 0.01)* 2000 =
14000 + 20 = 14020msec
seek + rotation + transfer
=
disk schedule
트랙을 여러개 읽어야 할 때 순서 정하기!
FIFO
들어온 순서대로
SSTF( shortest seek time first)
현재 헤드에서 가까이 있는거부터
안쪽, 바깥쪽 기아현상 발생가능
SCAN (엘리베이터 알고리즘)
한방향 이동하다가 다시 돌아가 반대 처리
바깥쪽 기아현상 발생 가능
(중간은 서비스를 두번 받음)
요청이 없어도 마지막까지 감
scan-look : 제일 밑바닥 요청만 찍고 올라옴
C-SCAN
항상 한쪽 방향에서 반대쪽으로 진행하며 요청 처리
균등하게 배분
c-look : 요청한 곳까지만 찍고 올라옴
위의 모든 알고리즘 다 arm이 고정됨...
(암 고정 현상)
-> 디스크 요청 큐를 세그먼트로 분할!
N-step-SCAN
길이가 N인 하위 큐로 분할
N이 커지면 SCAN 알고리즘에 성능 근접
N이 1이면 FIFO 정책
FSCAN
두개의 하위큐
스캔이 이뤄지는 동안 다른 큐에 채워지고
다른 쪽 큐 비우고 번갈아감