내부가 기계적인 장치로 구성

platters: 데이터가 저장되는 영역
spindle: 회전 장치



Suppose a computer disk with the following characteristics is given
#bytes per sector = 512
#sectors per track = 63
#tracks per cylinder = 16
#cylinders = 4,092
What is storage capacity of the disk?
512 * 63 * 16 * 4,092 = 2,111,864,832 bytes
We want to store a file with 50,000 fixed-length data records. How many cylinders does the file require if each data record requires 256 bytes?
(50,000 * 256) / (512 * 63 * 16) = 24.8 cylinders
정해진 크기를 가지며, 디스크에서 주소 지정이 가능한 가장 작은 단위
여러 섹터들이 모여 트랙을 형성
섹터 내 데이터 저장 방법 두 가지
연속된 특정 개수의 섹터로 구성된 단위
파일 시스템에서 파일 할당의 최소 단위
파일을 구성하는 가장 작은 단위
OS가 파일을 다루는 단위(os안의 파일 시스템마다 단위가 다름)
클러스터가 클수록 더 많은 섹터를 연속적으로 읽을 수 있으므로 읽기 속도가 향상
클러스터가 클 경우 내부 조각화 (Internal Fragmentation) 발생
*내부 조각화: 파일의 실제 데이터 크기보다 할당된 클러스터 크기가 더 커서 남는 공간이 낭비되는 현상
파일을 저장할 때 연속된 하나 이상의 클러스터를 사용하는 방법
파일을 저장할 만큼 연속된 공간이 없으면 여러 개의 비연속적인 부분 (extent) 으로 나누어 저장
즉, 파일 전체를 한꺼번에 저장하지 않고 쪼개서 저장하는 방식
문제:
해결: '인터리빙(Interleaving)' 방식을 적용
디스크 상에서 이웃하는 섹터들이 물리적으로 연속적이지 않게 배치하는 기법


File allocation table(FAT): 클러스터의 위치 결정(몇번째 실린더의 몇번째 트랙 몇번 섹터인지)
연속된 여러 클러스터를 하나의 단위로 묶은 개념

a는 extent 가 1개
b는 extent 가 3개
같은 용량이면 a와 b 중 a와 같은 형태가 더 좋음
파일 조각화: 파일이 하드디스크 상에서 연속적으로 저장되지 않고 흩어져서 저장되는 현상

파일 조각화의 영향:
→평균값 사용
access arm을 해당 실린더로 이동하는데 걸리는 시간(헤더가 해당 트랙을 가리키도록)
시간비용: 평균적으로 실린더 개수의 1/3
가장 오래 걸리는 단계
→ 평균값 사용
디스크가 회전하여 해당 섹터가 read/write head 아래에 위치하기까지 걸리는 시간
하드 디스크는 보통 분당 약 5,000회전(RPM)으로 회전
한 번 회전하는 데 12msec
평균적으로 회전 지연 시간은 반 회전(약 6msec)
💡 data의 첫번째 byte를 head에 접촉하는 순간 비트 단위로 전송→ 그 다음 byte를 읽기 위해 접촉한 상태에서 회전 (맨 마지막 data가 head를 통과할 때까지)
→마지막 byte를 읽으면 platter에서 head를 떼어냄
→ 정확히 구할 수 있음
number of bytes transferred*rotation time/number of bytes on a track




먼저 파일이 몇개의 트랙에 나눠서 저장될 지 계산
순차적으로 읽을 때도 클러스터 단위로 읽음(1클러스터=8섹터=16레코드)
random access할 때도 클러스터 단위로 읽음

프로그램이 OS한테 변수 c의 내용을 TEXT 파일의 다음 사용 가능한 위치에 쓰도록 요청
→ os는 file manager한테 작업 전달
<file manager 4단계>
1. 파일 상태 및 접근 권한 확인
2. 파일 저장 위치 탐색
3. 버퍼 관리 및 데이터 준비
(맨 마지막 클러스터를 버퍼로 가져와서 마지막 다음자리에 write *deposit)
4. I/O processor작업 지시
(버퍼 안의 클러스터를 다시 disk의 같은 위치에 write하도록)
I/O processor 따로 두는 이유:
일 시켜놓고 파일 매니저는 다른 일 할 수 있음(I/O 작업은 매우 오래 걸림)