이번 포스팅에서는 디스크 관리에 대해 알아보겠습니다.

위 사진은 디스크가 데이터를 저장하는 물리 구조를 보여줍니다. 각 구성 요소는 다음과 같습니다.
- 트랙(
track): 같은 반지름에 있는 원형 데이터 경로 - 섹터(
sector): 트랙을 부채꼴로 나눈 조각 → 디스크 관리의 최소 단위 - 플래터(
platter): 디스크 내부에서 실제 데이터가 기록되는 원반 형태의 저장 매체 - 실린더(
cylinder): 여러 플래터에서 같은 반지름 트랙들을 수직으로 묶은 단위
또한, Sector 0은 가장 바깥에 있는 실린더의 첫 트랙에 있는 첫 번째 섹터로, 부팅 정보가 저장되어 있습니다.
Disk Management
디스크는 처음부터 파일을 저장할 수 있는 형태로 제공되지 않으며, 운영체제가 사용할 수 있는 ‘파일 저장공간’이 되기 위해 단계별 준비가 필요합니다. 먼저 Physical formatting을 통해 디스크가 안정적으로 읽고/쓸 수 있는 물리 단위(섹터)와 결함 관리 체계가 준비됩니다. 이후 Partitioning으로 디스크 공간을 용도별로 분할하고, OS가 각 영역의 범위를 식별할 수 있도록 파티션 정보를 기록합니다. 다음으로 Logical formatting을 수행해 파티션에 파일 시스템을 생성하고, 파일/디렉터리 관리에 필요한 메타데이터를 초기화합니다. 마지막으로 Booting단계에서는 펌웨어가 디스크의 부팅 정보를 읽고, 부트로더가 OS를 적재해 실행을 시작합니다.
따라서 디스크 관리는 다음 흐름으로 이해할 수 있습니다. Physical formatting → Partitioning → Logical formatting → Booting
Disk Scheduling
디스크 접근 시간(Access time)은 다음 3가지 요소로 결정됩니다.
Seek time: 헤드가 현재 위치에서 목표 트랙(실린더)로 이동하는 데 걸리는 시간Rotational latency: 목표 섹터가 헤드 아래로 도달할 때까지 플래터가 회전하며 대기하는 시간Transfer time: 목표 섹터의 데이터를 실제로 읽거나 쓰는 데 걸리는 시간
이 중 Seek time은 요청 순서에 따라 변동 폭이 크고 전체 지연에 큰 영향을 주므로, 디스크 스케줄링은 요청 순서를 조정해 Seek time을 최소화하는 것을 목표로 합니다.
Disk Scheduling Algorithm
디스크 스케줄링은 다양한 알고리즘이 있습니다. 다음과 같은 문제가 있다고 가정하겠습니다.
Exercise (Disk Scheduling Algorithm Problem)
큐에 다음과 같은 실린더 위치의 요청이 존재하는 경우 디스크 헤드 53번에서 시작한 각 알고리즘의 수행 결과는? (실린더 위치는 0-199)
98, 183, 37, 122, 14, 124, 65, 67
FCFS(First Come First Service)
FCFS 알고리즘은 큐에 먼저 들어온 순서대로 디스크 요청을 처리합니다.

SSTF(Shortest Seek Time First)
SSTF 알고리즘은 현재 헤드 위치에서 가장 가까운(탐색 시간이 짧은) 요청을 먼저 처리합니다.

특정 구간의 요청이 계속 가까이 들어오면, 먼 위치의 요청은 오래 기다리는 Starvation이 발생할 수 있습니다.
SCAN

SCAN은 디스크 헤드가 한 방향으로 이동하면서 그 경로에 있는 요청들을 순서대로 처리하고, 끝에 도달하면 방향을 반대로 바꿔 다시 처리하는 방식입니다.

끝까지 갔다가 방향 전환하므로 일부 요청은 대기 시간이 늘어나는 문제점이 있습니다. → C-SCAN
C-SCAN
C-SCAN은 SCAN의 방향 전환으로 인해 대기 시간이 편차가 커질 수 있는 점을 보완한 알고리즘입니다.

헤드는 한 방향으로만 이동하면서 그 경로에 있는 요청을 처리합니다. 끝에 도달하면 반대 방향으로 처리하지 않고, 시작 지점으로 이동만 한 뒤 다시 같은 방향으로 처리합니다.

C-LOOK
C-LOOK 알고리즘은 C-SCAN의 변형으로, 헤드가 한 방향으로 이동하며 요청을 처리하되 디스크의 끝까지 가지 않습니다. 그 방향에서 가장 마지막 요청까지 처리한 뒤, 큐에 남은 가장 작은 요청 위치로 이동만 하고 다시 같은 방향으로 처리합니다.

Disk-Scheduling Algorithm의 결정
디스크 스케줄링은 파일 할당 방식에 따라 생성되는 디스크 요청 패턴의 영향을 받습니다.
Contiguous allocation(연속 할당)의 경우 데이터가 연속된 실린더 구간에 배치되어, 요청이 인접하게 발생하는 경향이 있어 Seek time이 감소할 수 있습니다.
Linked allocation(연결 할당)의 경우 데이터 위치가 분산되기 쉬워 헤드 이동이 증가하고 Seek time이 커질 수 있습니다.
따라서 요청이 인접한 경우에는 여러 요청을 묶어 처리해 디스크 I/O 효율을 높일 수 있습니다. 또한 시스템 환경에 따라 적합한 알고리즘이 달라질 수 있으므로, 디스크 스케줄링 알고리즘은 필요 시 다른 알고리즘으로 교체할 수 있도록 OS와 분리된 모듈 형태로 설계하는 것이 바람직합니다.
Swap-Space Management
Swap Space는 물리 메모리가 부족할 때, 일부 메모리 내용을 디스크에 임시로 저장하기 위한 공간입니다. 운영체제는 스왑을 통해 사용 가능한 메모리를 확보하고 프로세스 실행을 유지합니다.
스왑은 페이지 단위로 자주 읽고/쓰는 I/O가 발생할 수 있으므로, 공간 효율성보다 접근 속도와 처리량이 더 중요합니다. 따라서 가능한 한 연속된 블록에 배치하거나, 전용 영역을 사용해 접근 오버헤드를 줄입니다.

위 사진은 1개의 physical disk를 논리적으로 분할하여,
Logical disk 1을 File system 용도로,Logical disk 2를 Swap area 용도로 사용하는 구성을 보여줍니다. 또한 파일 시스템은 일반적으로 작은 블록(512B) 단위로 데이터를 관리하는 반면, 스왑 영역은 성능을 위해 **더 큰 단위(수십 KB~수백 KB)**로 연속적으로 할당해 I/O 효율을 높일 수 있음을 나타냅니다.
RAID

RAID(Redundant Array of Independent Disks)는 여러 개의 물리 디스크를 하나의 논리 디스크처럼 구성하는 기술입니다. RAID의 목적은 크게 두 가지입니다.
-
디스크 처리 속도(성능) 향상: 여러 디스크에서 병렬로 읽고/쓰기가 가능해 처리량이 증가
-
신뢰성(Reliability) 향상
- 동일한 데이터를 여러 디스크에 중복 저장하여 디스크 장애에 대비
- 한 디스크가 고장 나도 다른 디스크에서 데이터를 읽어 서비스가 지속
Conclusion
이번 포스팅에서는 디스크를 바탕으로 디스크 관리, 디스크 스케줄링, RAID를 정리했습니다. 소프트웨어 관점뿐 아니라 하드웨어 동작(헤드 이동, 회전 지연 등)이 디스크 관리 성능에 직접 영향을 준다는 점을 함께 확인했습니다.
이후에는 nand2tetris를 공부하며 소프트웨어와 하드웨어를 함께 이해해보겠습니다.
References
[2] Operating System Concepts(Silberschatz, Galvin and Gagne)