상세 컨텐츠

본문 제목

디스크 저장장치

코딩일기장/Computer Science

by Grip! 2022. 1. 28. 18:14

본문

1. 디스크 구조

Platter - Surface - Tracks - Sector

2. 디스크 용량 Capcity

 

기록밀도 : 1인치 트랙의 bit 수

트랙밀도 : 원판 중심에서 반지름의 1인치 길이에 넣을 수 있는 트랙의 수

면적밀도 : 기록밀도* 트랙밀도

실린더 : 한개의 surface에서 총 트랙의 갯수

Capcity = (sector당 byte) * (track의 평균 sector수) * (surface의 평균 트랙 수) * (platter갯수 * 2) *disk

 

example)

platter 3개,15000 실린더, 트랙당 평균 500섹터, 섹터당 1024byte를 가지는 디스크의 용량

= 1024 * 500 * 15000* 3 * 2=46,080,000,000bit=46.08GB

 

3. 디스크 동작

1)탐색시간 $$T_{seek}$$

헤드가 타깃 섹터가 위치한 트랙으로 위치시키기까지의 소요시간, 평균적으로 3~9ms

 

2)회전 지연시간 $$T_{rotation}$$

탐색 시간 이후에, 트랙에서 타깃 섹터의 첫번째 비트가 헤드 아래로 지나갈때까지의 시간.

$$T_{max rotation}={1\over{RPM}} \times {60secs\over{1min}}$$

평균 회전 지연시간(avg)는 최대 회전 지연시간(max)의 절반

 

3)전송시간 $$T_{transfer}$$

$$T_{transfer}={1\over{RPM}}\times{1\over{average sector of track}}\times {60secs\over{1min}} $$

 

4)평균접근시간$$T_{access}$$

=(평균)탐색시간+평균회전지연시간+평균전송시간

 

example1)

7200RPM, 평균 탐색시간 9ms, 트랙당 평균 400섹터

 

-평균회전지연시간 = 1/2 * (60secs/7200RPM) * 1000ms/sec = 4.114ms =4ms

RPM은 분당회전비율이므로, 60초로 나눠주면 초당회전비율이 된다.

1/RPM은 한바퀴를 도는데 몇 분이 걸리냐는 의미이고,

60sec/RPM은, 한바퀴를 도는데 몇초가 걸리냐는 의미다.

 

-평균전송시간 = (60secs/7200RPM) * (1/400)* 1000ms/sec = 0.02ms

 

-평균탐색시간 = 9ms

$$T_{access}$$ 9+4+0.02=13.02ms

->접근시간에 큰 영향을 주는것은 탐색시간과 회전지연시간이고, 전송시간의 영향은 미미하다

 

 

 

+디스크는 사용되기전에 포멧되어야하는데, 포멧은 결함이 있는 실린더를 찾아내어 이들의 동작을 제외한다. 따라서 포멧한 용량은 최대 용량보다 적다.

 

4. 디스크 접근

SCSI(스커지)는 호스트 버스 인터페이스에 의해 정의된 프로토콜 중 하나로, SATA 보다 빠르고 비싸다. 그리고 여러 디스크 드라이브를 지원한다( (SATA는 단 하나의 드라이브만을 지원한다)

호스트 버스 어댑터는 이러한 호스트 버스 인터페이스에 의한 프로토콜로 I/O버스로 연결한다.

 

Direct Memory Access (DMA)전송

디스크 읽기 개시 -> DMA 전송 -> 인터럽트

어떠한 프로세스 A가 디스크의 메모리를 읽는 인스트럭션을 실행할때, CPU는 context switch을 발생시켜 다른 프로세스B를 실행하여 보다 효율적인 프로세스 관리를 하고싶을것이다 데이터 전송이 CPU를 사용하는 작업이라면 context switching을 할수 없을것이다.

만약 총 접근시간이 16ms일때, 1ns 클럭 사이클을 가지는 1GHz 프로세스가 context switch을 하지 않고 아무것도 하지 않는다면 큰 낭비일 것이다. 이때 DMA란 CPU를 사용하지 않고, CPU의 개입 없이 메인메모리에 직접 데이터를 전송한다. 데이터 전송 이후 Disk Controller는 Interrupt 신호를 보내 다시 context switch을 실행할 수 있다. 

 

5.Disk Scheduling

디스크 스케쥴링은 대략적으로 모든 작업들의 실행 시간을 알고 있기 때문에(CPU의 프로세스 실행과의 다르게)

SJF, Shortest Job First의 원리로 진행된다.

1)SSTF : Shortest Seek Time First

SSTF는 현재 헤드에서 가장 가까운 트랙을 우선적으로 방문한다.(탐색 시간)

그러나 OS는 디스크의 구조인 원판이 아니라 block들의 배열로 인식한다. 따라서 NBF, Nearest Block First 을 실행할 수 있다.

starvation 문제도 발생할 수 있다. 반대쪽에 있는 track 읽기 요청이 두번째로 들어왔는데, 첫번째 track 근처로만 읽기 요청이 들어온다면 두번째 요청은 starvation 될 것이다.

2)SCAN

SCAN은 한 방향으로, 앞으로 갔다가 뒤로 sweep 하는 스케쥴링이다. 다양한 varation이 있는데

- F-SCAN : F-SCAN은 sweep 하는 도중에 request를 담는 queue를 freeze 하고 다른 queue에 담는다.

- C-SCAN : C-SCAN은 한 방향으로만 오직 sweep을 한다. 만약 오른쪽으로 sweep한다고 하면, 오른쪽 end에 도달한 뒤에 다시 request queue에 담긴 것들 중 가장 왼쪽 end로 이동해서 오른쪽으로 sweep한다.

3)SPTF : Shortest Positioning Time First

- Seek Time, Rotation Time 둘다 고려하여 스케쥴링하는 방법이다. 그러나 이 방법은 OS가 현재 head가 어디에 있는지 모르기 때문에 굉장히 어렵다. SSTF는 탐색 시간만을 고려하였는데, Rotation Time 또한 고려하기에 차이가 있다.

예를 들어 위 그림에서 16,8의 요청이 들어왔을때 Seek Time 만을 고려한다면 16->8의 순서로 처리해야하지만 Rotation Time 또한 고려하기 때문에 8->16의 순서로 처리한다.

 

6.기타 이슈

merge : 만약 섹터 33와 34에 대해 두개의 request가 들어오면, OS 수준에서 이를 merge 해줘야 더 좋은 성능을 발휘 할 수 있다.

'코딩일기장 > Computer Science' 카테고리의 다른 글

Memory Allocation  (0) 2022.03.05
Memory Virtualization  (0) 2022.02.12
Exceptional Control Flow  (0) 2022.02.09
Structure of Cache Memory  (0) 2022.02.07
FLOAT와 DOUBLE  (0) 2021.07.04

관련글 더보기

댓글 영역