Secondary Storage Structure

Kamator0·2026년 4월 15일

Disk Structure


물리적 구성 요소

하드 디스크 드라이브(HDD)는 여러 개의 물리적 부품으로 구성되어 있습니다.

Platter (플래터)

데이터가 저장되는 원형의 금속 또는 유리 디스크입니다. 양면에 자성 물질이 코팅되어 있어 자기적으로 데이터를 기록합니다. 하나의 하드 디스크에는 보통 여러 장의 플래터가 겹쳐서 들어 있습니다. 플래터는 고속으로 회전하며, 일반적인 회전 속도는 5,400 RPM, 7,200 RPM, 10,000 RPM, 15,000 RPM 등이 있습니다.

Spindle (스핀들)

플래터의 중심을 관통하는 축(shaft)입니다. 모터에 연결되어 있어 플래터를 일정한 속도로 회전시킵니다. 회전 속도가 빠를수록 데이터 접근 속도가 빨라지지만, 발열과 소음이 증가합니다.

Track (트랙)

플래터 표면 위의 동심원 모양의 경로입니다. 데이터는 트랙을 따라 기록됩니다. 하나의 플래터 표면에는 수만 개의 트랙이 있습니다. 바깥쪽 트랙이 안쪽 트랙보다 둘레가 크므로 더 많은 데이터를 저장할 수 있습니다.

Sector (섹터)

트랙을 일정 크기로 나눈 조각으로, 디스크의 최소 전송 단위입니다. 전통적으로 하나의 섹터는 512바이트이며, 최근의 Advanced Format 디스크에서는 4,096바이트(4KB)를 사용합니다. 운영체제가 데이터를 읽거나 쓸 때 최소한 하나의 섹터 단위로 작업합니다.

Cylinder (실린더)

여러 플래터에서 같은 반지름 위치에 있는 트랙들의 집합입니다. 예를 들어 플래터가 3장이고 양면을 사용하면 6개의 표면이 있는데, 이 6개 표면에서 같은 위치의 트랙 6개를 묶어 하나의 실린더라고 합니다. 실린더 개념이 중요한 이유는, 디스크 헤드를 이동하지 않고(seek 없이) 같은 실린더 내의 모든 트랙에 접근할 수 있기 때문입니다.

Read-Write Head (읽기-쓰기 헤드)

플래터 표면 바로 위를 떠다니면서 자기적으로 데이터를 읽고 쓰는 장치입니다. 각 플래터의 표면마다 하나의 헤드가 있으므로, 플래터가 3장이면 헤드는 최대 6개입니다. 헤드와 플래터 표면 사이의 간격은 약 수 나노미터 수준으로 매우 좁습니다.

Arm / Arm Assembly (암 / 암 어셈블리)

헤드를 지탱하고 있는 팔 모양의 구조물입니다. 모든 헤드는 하나의 암 어셈블리에 연결되어 있어 함께 움직입니다. 즉 하나의 헤드가 실린더 100번으로 이동하면, 다른 모든 헤드도 실린더 100번 위치로 이동합니다. 이것이 "실린더" 개념이 의미있는 이유입니다.

Landing Zone(랜딩 존) - Loading Zone (로딩 존) (둘이 같은데 주로 Landing Zone)

디스크가 회전을 멈출 때 헤드가 안전하게 착지하는 영역입니다. 현대 HDD 플래터의 안쪽 가장자리에 위치하며 (과거에는 HDD 플레터의 바깥쪽 가장자리에 위치하기도 했다) , 데이터가 기록되지 않는 영역입니다. 디스크가 켜지면 헤드가 로딩 존에서 떠올라 플래터 위를 이동하고, 꺼지면 다시 로딩 존으로 돌아옵니다.

디스크 접근 시간 (Disk Access Time)

  • 디스크에서 데이터를 읽어 메모리로 가져오는 데 걸리는 총 시간입니다.

공식

Disk Access Time = Positioning Time + Transfer Time
                 = (Seek Time + Rotational Time) + Transfer Time

Posigioning time

Seek Time (탐색 시간)

디스크 암(arm)을 현재 위치에서 원하는 실린더(트랙)로 이동시키는 데 걸리는 시간입니다. 디스크 접근 시간에서 가장 큰 비중을 차지하며, 일반적으로 3~15ms 정도입니다. 디스크 스케줄링 알고리즘의 주된 목적이 바로 이 seek time을 최소화하는 것입니다.

  • ex : 헤드가 현재 실린더 50에 있고 실린더 150의 데이터를 읽어야 하면, 헤드가 실린더 100개만큼 물리적으로 이동해야 합니다. 이동 거리가 길수록 seek time이 길어집니다.

Rotational Time / Rotational Latency (회전 지연 시간)

헤드가 원하는 트랙에 도착한 후, 플래터가 회전하여 원하는 섹터가 헤드 아래로 올 때까지 기다리는 시간입니다. 평균적으로 디스크가 반 바퀴 회전하는 시간과 같습니다.

7,200 RPM 디스크의 경우:

  • 1회전 = 60초 / 7,200 = 8.33ms
  • 평균 회전 지연 = 8.33 / 2 = 약 4.17ms

Transfer Time (전송 시간)

원하는 섹터가 헤드 아래를 지나가면서 실제로 데이터가 읽히는 시간입니다. 섹터 크기와 디스크 회전 속도에 따라 결정되며, 보통 매우 짧습니다(수십 마이크로초 수준).

실제 예시

7,200 RPM 디스크에서 seek time 9ms, 1섹터를 읽는 경우:

Total = 9ms (seek) + 4.17ms (rotation) + 0.01ms (transfer) ≈ 13.18ms

이 중 seek time이 약 68%를 차지합니다. 그래서 디스크 스케줄링의 핵심은 seek time을 줄이는 것입니다.

Head Crash (헤드 충돌)

디스크 플래터 표면에는 얇은 보호막이 코팅되어 있습니다. 정상적으로는 헤드가 표면 위를 떠다니지만, 외부 충격이나 결함으로 인해 헤드가 플래터 표면에 직접 접촉하면 자성 표면이 손상됩니다. 이를 head crash라고 하며, 해당 영역의 데이터가 영구적으로 파괴될 수 있습니다. 이것이 HDD를 사용할 때 물리적 충격에 주의해야 하는 이유입니다.


디스크 섹터와 컨트롤러

디스크 섹터/블록의 논리적 구조

현대의 디스크 드라이브는 물리적인 구조(실린더, 트랙, 섹터)를 추상화하여 1차원 배열(one-dimensional array)로 표현합니다. 운영체제는 논리적인 섹터 번호만 사용하고, 디스크 컨트롤러가 이를 실제 물리적 위치(실린더 번호 → 트랙 번호 → 섹터 번호)로 변환합니다.

논리적 관점: [ 0 | 1 | 2 | 3 | 4 | 5 | 6 | ... | N ]
                    ↕ 디스크 컨트롤러가 매핑
물리적 관점: Cylinder 0, Track 0, Sector 0 → 논리 섹터 0
             Cylinder 0, Track 0, Sector 1 → 논리 섹터 1
             ...
             Cylinder 0, Track 1, Sector 0 → 논리 섹터 K
             ...
             Cylinder 1, Track 0, Sector 0 → 논리 섹터 M

슬라이드의 예시를 보면, 실린더 0에 Track 0과 Track 1이 있고, 실린더 1에도 Track 0과 Track 1이 있어서 전체 섹터가 0부터 22까지 순서대로 번호가 매겨져 있습니다.

Disk Controller (디스크 컨트롤러)

디스크 컨트롤러는 CPU와 하드 디스크 사이의 통신을 중개하는 회로입니다.

주요 역할:

  • 논리 섹터 번호를 물리적 위치(CHS: Cylinder-Head-Sector)로 변환
  • I/O 요청 큐를 관리
  • 내부에 작은 버퍼(캐시)를 가지고 있어 미리 읽은 데이터를 저장

인터페이스 종류:

  • IDE (Integrated Drive Electronics): 구형 인터페이스. 병렬 방식(PATA)
  • SATA (Serial ATA): 현대의 표준 인터페이스. 직렬 방식으로 IDE보다 빠르고 케이블이 얇음
  • NVMe: SSD를 위한 최신 인터페이스. PCIe 버스를 직접 사용하여 SATA보다 훨씬 빠름

기록 밀도 방식 (CLV vs CAV)

  • 디스크에 데이터를 기록하는 밀도 방식에는 두 가지가 있습니다.

Constant Linear Velocity (CLV, 일정 선속도)

트랙당 비트 밀도가 균일한 방식입니다. 바깥쪽 트랙은 둘레가 더 크므로 더 많은 섹터를 담을 수 있습니다. 헤드가 바깥쪽 트랙에서 안쪽 트랙으로 이동하면 트랙당 섹터 수가 줄어듭니다.

데이터 전송 속도를 일정하게 유지하기 위해, 디스크의 회전 속도를 바깥쪽에서는 느리게, 안쪽에서는 빠르게 조절합니다.

사용 예: CD-ROM, DVD-ROM

Constant Angular Velocity (CAV, 일정 각속도)

디스크가 일정한 속도로 회전하는 방식입니다. 데이터 전송 속도를 일정하게 유지하기 위해, 안쪽 트랙에서 바깥쪽 트랙으로 갈수록 비트 밀도가 낮아집니다. 즉 바깥쪽 트랙의 섹터 간 간격이 더 넓습니다.

사용 예: 표준 하드 디스크, 플로피 디스크

비교

항목CLVCAV
회전 속도변동 (바깥 느리게, 안쪽 빠르게)일정
비트 밀도균일변동 (안쪽 높고, 바깥쪽 낮음)
트랙당 섹터 수바깥쪽이 더 많음모든 트랙 동일 (또는 존 단위 다름)
사용CD/DVDHDD, 플로피

디스크 용량 증가 방법

디스크 제조사(Seagate, Maxtor 등)가 디스크 용량을 늘리는 두 가지 방법:
1. 트랙당 섹터 수 증가 — 비트 밀도를 높여 같은 트랙에 더 많은 섹터를 넣음
2. 디스크당 실린더 수 증가 — 트랙 간 간격을 좁혀 더 많은 트랙을 넣음


디스크 스케줄링 (Disk Scheduling)

왜 필요한가?

디스크를 많이 사용하는 애플리케이션에서는 디스크가 바쁠 수 있습니다. 디스크가 바쁘면 새로운 I/O 요청은 대기 큐(pending request queue)에 들어갑니다. 이때 요청을 처리하는 순서에 따라 평균 디스크 접근 시간이 크게 달라집니다.

I/O 요청 처리 경로

애플리케이션
    │ System call (read/write)
    ▼
File system (파일 시스템)
    │ 논리 블록 → 물리 섹터 변환
    ▼
Buffer cache (버퍼 캐시)
    │ 캐시에 없으면 디스크 요청
    ▼
Disk driver (디스크 드라이버)
    │ 요청을 큐에 넣고 스케줄링
    ▼
   Queue: [B0, B3, B2, B4, ...]
    │ 스케줄링 알고리즘이 순서 결정
    ▼
   Disk (물리적 디스크)

스케줄링의 기준

Seek time을 최소화하는 것이 핵심입니다. Rotational time은 디스크 회전 속도에 의해 결정되므로 소프트웨어로 제어할 수 없지만, seek time은 요청 처리 순서를 바꿈으로써 줄일 수 있습니다.

FCFS

First Come, First Served (선입선출)

가장 단순한 방식으로, 요청이 도착한 순서대로 처리합니다.

동작 과정

헤드 이동 순서: 53 → 98 → 183 → 37 → 122 → 14 → 124 → 65 → 67

이동 거리 계산:
|53-98|   = 45
|98-183|  = 85
|183-37|  = 146
|37-122|  = 85
|122-14|  = 108
|14-124|  = 110
|124-65|  = 59
|65-67|   = 2
─────────────
총 이동 거리 = 640 실린더

문제점

122 → 14 → 124 처럼 헤드가 한쪽 끝에서 반대쪽 끝으로 왔다갔다 하는 wild swing(격렬한 진동)이 발생합니다. 122번에서 14번으로 갔다가 바로 124번으로 되돌아오면, 122와 124는 거의 같은 위치인데 불필요하게 왕복한 셈입니다.

장단점

장점단점
구현이 매우 단순seek time이 매우 비효율적
공정함 (starvation 없음)wild swing으로 헤드 이동 거리가 김
예측 가능요청 수가 많으면 성능 급락

SSTF 스케줄링

Shortest-Seek-Time-First (최단 탐색 시간 우선)

현재 헤드 위치에서 가장 가까운 요청을 먼저 처리합니다.

동작 과정

현재: 53
큐: {98, 183, 37, 122, 14, 124, 65, 67}

53에서 가장 가까운 것: 65 (거리 12)
65에서 가장 가까운 것: 67 (거리 2)
67에서 가장 가까운 것: 37 (거리 30)
37에서 가장 가까운 것: 14 (거리 23)
14에서 가장 가까운 것: 98 (거리 84)
98에서 가장 가까운 것: 122 (거리 24)
122에서 가장 가까운 것: 124 (거리 2)
124에서 가장 가까운 것: 183 (거리 59)

이동 순서: 53 → 65 → 67 → 37 → 14 → 98 → 122 → 124 → 183
총 이동 거리 = 12 + 2 + 30 + 23 + 84 + 24 + 2 + 59 = 236 실린더

FCFS의 640에 비해 훨씬 적은 이동 거리(236)입니다.

문제점: Starvation (기아 현상)

SSTF의 치명적 문제는 특정 요청이 영원히 처리되지 않을 수 있다는 것입니다.

예시 시나리오:

현재 헤드: 14번 근처
큐에 있는 요청: 14번 근처, 186번

14번 근처 요청 처리 중...
→ 14번 근처에 새 요청 도착 → 이것부터 처리
→ 또 14번 근처에 새 요청 도착 → 이것부터 처리
→ 186번 요청은 계속 대기...
→ 또 14번 근처에 새 요청 도착 → 또 이것부터 처리
→ 186번: 무한 대기 (starvation!)

현재 헤드 근처에 계속 새 요청이 들어오면, 멀리 있는 요청은 영원히 처리되지 않습니다. 이는 SJF(Shortest Job First) CPU 스케줄링에서 긴 프로세스가 기아 상태에 빠지는 것과 같은 원리입니다.

장단점

장점단점
FCFS보다 훨씬 적은 seek timeStarvation 가능성
전체 처리량(throughput) 높음최적해를 보장하지 않음

SCAN 스케줄링

SCAN (엘리베이터 알고리즘)

디스크 암이 한쪽 끝에서 반대쪽 끝까지 이동하면서 경로 위의 요청을 처리하고, 끝에 도달하면 방향을 반전합니다. 엘리베이터가 위아래로 이동하면서 각 층의 승객을 태우는 것과 비슷하여 "엘리베이터 알고리즘"이라고도 부릅니다.

동작 과정 (초기 방향: 왼쪽/감소 방향으로 가정)

헤드 시작: 53, 왼쪽(감소 방향)으로 이동 중

왼쪽으로 이동하면서 처리:
53 → 37 → 14 → 0 (디스크 끝)

방향 반전 (오른쪽/증가 방향):
0 → 65 → 67 → 98 → 122 → 124 → 183

이동 순서: 53 → 37 → 14 → 0 → 65 → 67 → 98 → 122 → 124 → 183
이동 거리:
|53-37| = 16
|37-14| = 23
|14-0| = 14
|0-65| = 65
|65-67| = 2
|67-98| = 31
|98-122| = 24
|122-124| = 2
|124-183| = 59
총 = 236 실린더

특징

  • 헤드가 항상 한 방향으로 쭉 이동하다가 끝에서 반전하므로, SSTF처럼 왔다갔다 하지 않음
  • Starvation이 발생하지 않음 — 모든 요청은 헤드가 한 번 왕복하는 동안 반드시 처리됨
  • 단점: 끝까지 가지 않아도 되는데(14번이 마지막 요청인데) 0번까지 감 → LOOK이 개선

장단점

장점단점
Starvation 없음끝에 도달할 때까지 불필요한 이동
균일한 대기 시간방향 전환 직후의 요청이 가장 오래 기다림
예측 가능한 성능

C-SCAN 스케줄링

Circular SCAN (순환 스캔)

SCAN의 변형으로, 헤드가 한쪽 끝에 도달하면 서비스하지 않고 즉시 반대쪽 끝으로 점프합니다. 서비스는 항상 한 방향으로만 합니다. (자이드롭 ??)

동작 과정

헤드 시작: 53, 오른쪽(증가 방향)으로 이동

오른쪽으로 이동하면서 처리:
53 → 65 → 67 → 98 → 122 → 124 → 183 → 199 (디스크 끝)

서비스 없이 즉시 0번으로 점프:
199 → 0

다시 오른쪽으로 이동하면서 처리:
0 → 14 → 37

이동 순서: 53 → 65 → 67 → 98 → 122 → 124 → 183 → 199 → 0 → 14 → 37

SCAN과의 차이점

SCAN에서는 헤드가 반전하여 되돌아올 때도 요청을 처리하므로, 방향 전환 직전/직후의 요청 간에 대기 시간의 불공정이 발생합니다. 예를 들어 헤드가 0에서 199로 갔다가 돌아오는 중이면, 0번 근처의 요청은 방금 처리되었지만 199번 근처의 요청은 다시 한참 기다려야 합니다.

C-SCAN은 서비스를 한 방향으로만 하므로, 모든 요청의 대기 시간이 더 균일합니다. 디스크를 원형(circular)으로 취급하여 199 다음이 0인 것처럼 동작합니다.

장단점

장점단점
대기 시간이 더 균일 (SCAN보다 공정)되돌아가는 동안 시간 소비 (서비스 안 하므로)
Starvation 없음총 이동 거리가 SCAN보다 길 수 있음

LOOK과 C-LOOK 스케줄링

LOOK과 C-LOOK

SCAN과 C-SCAN의 실용적 구현입니다. SCAN/C-SCAN은 디스크의 물리적 끝(0 또는 199)까지 이동하지만, LOOK/C-LOOK은 해당 방향의 마지막 요청까지만 이동하고 즉시 방향을 전환합니다.

"LOOK"이라는 이름은 헤드가 이동하기 전에 그 방향에 요청이 있는지 "미리 본다(look ahead)"는 의미입니다.

C-LOOK 동작 과정

헤드 시작: 53, 오른쪽으로 이동

오른쪽으로 이동하면서 처리:
53 → 65 → 67 → 98 → 122 → 124 → 183
(199까지 가지 않음! 183이 오른쪽 마지막 요청이므로 여기서 점프)

서비스 없이 왼쪽 끝 요청으로 점프:
183 → 14
(0까지 가지 않음! 14가 왼쪽 첫 요청이므로 여기로 점프)

다시 오른쪽으로 이동하면서 처리:
14 → 37

이동 순서: 53 → 65 → 67 → 98 → 122 → 124 → 183 → 14 → 37

SCAN vs LOOK 핵심 차이

SCAN:  53 → 37 → 14 → [0] → 65 → 67 → ...
                        ↑ 디스크 끝까지 감 (불필요한 이동)

LOOK:  53 → 37 → 14 → [방향 전환] → 65 → 67 → ...
                        ↑ 마지막 요청(14)에서 바로 전환

Look vs C-Look 차이

LOOK에서 14 → 65는 헤드가 실제로 물리적으로 이동하면서 서비스하는 것이므로 |14 - 65| = 51이 seek distance에 포함됩니다.
C-LOOK에서도 14 → 65 구간의 이동 거리는 포함되지만, 차이는 서비스 방향입니다.

  • Look
    53 → 37 → 14 → (반전) → 65 → 67 → 98 → 122 → 124 → 183
    ←←←←←←←← →→→→→→→→→→→→→→→→→→→→→→→
    왼쪽으로 서비스 오른쪽으로 서비스

  • C-Look
    53 → 65 → 67 → 98 → 122 → 124 → 183 → (점프) → 14 → 37
    →→→→→→→→→→→→→→→→→→→→ ←점프→ →→→→→
    오른쪽으로 서비스 오른쪽으로 서비스

관계 정리

알고리즘어디까지 가는가
SCAN디스크 끝(0 또는 199)까지
LOOK해당 방향의 마지막 요청까지만
C-SCAN디스크 끝까지 간 후 반대쪽 끝으로 점프
C-LOOK마지막 요청까지만 간 후 반대쪽 첫 요청으로 점프

스케줄링 알고리즘 비교 총정리

이동 거리 비교 (queue = 98, 183, 37, 122, 14, 124, 65, 67 / head = 53)

알고리즘이동 순서총 이동 거리
FCFS53→98→183→37→122→14→124→65→67640
SSTF53→65→67→37→14→98→122→124→183236
SCAN53→37→14→0→65→67→98→122→124→183236
C-SCAN53→65→67→98→122→124→183→199→0→14→37약 382
LOOK53→37→14→65→67→98→122→124→183208
C-LOOK53→65→67→98→122→124→183→14→37약 322

특성 비교

알고리즘Starvation이동 효율대기 균일성구현 복잡도실용성
FCFS없음나쁨보통매우 간단낮음
SSTF있음좋음나쁨보통보통
SCAN없음좋음보통보통좋음
C-SCAN없음보통좋음보통좋음
LOOK없음매우 좋음보통보통매우 좋음
C-LOOK없음좋음좋음보통매우 좋음

가장 많이 사용되는 것은 LOOK 또는 C-LOOK입니다. SCAN/C-SCAN의 개념을 기반으로 하면서 불필요한 끝까지의 이동을 제거한 실용적 버전입니다.


디스크 포매팅 (Disk Formatting)

  • 디스크가 데이터를 저장하려면 포매팅 과정을 거쳐야 합니다. 세 단계가 있습니다.

Low-level Formatting (저수준 포매팅 / 물리적 포매팅)

디스크를 디스크 컨트롤러가 읽고 쓸 수 있는 섹터 단위로 나누는 과정입니다. 공장에서 출하될 때 수행됩니다.

각 섹터의 구조:

┌──────────┬──────────────────┬──────────┐
│  Header  │   Data (512B)    │ Trailer  │
└──────────┴──────────────────┴──────────┘
  • Header: 섹터 번호, 동기화 비트 등 컨트롤러가 사용하는 정보
  • Data: 실제 사용자 데이터 영역 (전통적으로 512바이트)
  • Trailer: ECC(Error-Correcting Code) — 데이터 무결성을 검증하고 오류를 수정하는 코드

ECC 덕분에 일부 비트가 손상되어도 데이터를 복구할 수 있습니다. 디스크 컨트롤러가 데이터를 읽을 때마다 ECC를 계산하여 저장된 ECC와 비교합니다.

Partition (파티셔닝)

디스크를 여러 그룹의 실린더로 분할하는 과정입니다. 각 파티션은 독립적인 논리 디스크로 취급됩니다. 예를 들어 1TB 디스크를 C: 드라이브(500GB)와 D: 드라이브(500GB)로 나누는 것입니다.

Logical Formatting (논리적 포매팅)

운영체제가 파티션 위에 파일 시스템의 초기 데이터 구조를 기록하는 과정입니다.

기록되는 것들:

  • Superblock: 파일 시스템의 전체 정보 (크기, 블록 수, 마운트 정보 등)
  • Free space map: 어떤 블록이 비어있는지 추적하는 비트맵
  • Inode list: 파일의 메타데이터(권한, 크기, 블록 위치 등)를 저장하는 구조 (Unix/Linux)

전체 포매팅 = 저수준 포매팅 + 논리적 포매팅

일반적으로 "전체 포맷(full format)"이라 하면 저수준 포매팅과 논리적 포매팅을 모두 수행하는 것을 의미합니다. "빠른 포맷(quick format)"은 논리적 포매팅만 수행하여 파일 시스템 메타데이터만 초기화하고, 실제 데이터 영역은 그대로 둡니다.


디스크 캐시 (Disk Cache)

정의

  • 디스크 캐시는 디스크의 섹터 내용을 DRAM(메모리) 버퍼에 복사해 두는 것입니다. 디스크 접근은 메모리 접근보다 수만 배 느리므로, 자주 사용하는 섹터를 메모리에 캐싱하면 성능이 크게 향상됩니다.

동작 방식

Read 요청 시

I/O 요청 (특정 섹터 읽기)
    │
    ▼
디스크 캐시에 해당 섹터가 있는가? ──── Yes ──→ 캐시에서 바로 반환 (매우 빠름)
    │                                            (Cache Hit)
    No (Cache Miss)
    │
    ▼
디스크에서 해당 섹터를 읽어서 캐시에 저장
    │
    ▼
캐시에서 상위 계층으로 반환

Write 요청 시

I/O 요청 (특정 섹터 쓰기)
    │
    ▼
디스크 캐시에 해당 섹터가 있는가? ──── Yes ──→ 캐시의 데이터를 업데이트
    │                                            (나중에 디스크에 반영)
    No
    │
    ▼
디스크에서 해당 섹터를 캐시로 읽어온 후 업데이트
(또는 직접 디스크에 기록)

캐시가 효과적인 이유

프로그램은 지역성(locality)을 가집니다:

  • 시간적 지역성: 최근에 접근한 데이터는 곧 다시 접근할 가능성이 높음
  • 공간적 지역성: 어떤 데이터에 접근하면 그 근처의 데이터도 곧 접근할 가능성이 높음

그래서 한 번 읽은 섹터를 캐시에 보관하면, 다음 접근 시 디스크까지 가지 않고 메모리에서 바로 가져올 수 있습니다.


스왑 공간 관리 (Swap Space Management)

스왑 공간이란?

  • 스왑 공간(Swap Space)은 디스크의 일부를 가상 메모리의 확장으로 사용하는 영역입니다. 물리 메모리(RAM)가 부족할 때, 당장 사용하지 않는 페이지를 디스크의 스왑 공간으로 내보내고(swap out), 필요할 때 다시 불러옵니다(swap in).

  • 스왑 공간에 저장될 수 있는 것:

      1. 전체 프로세스 이미지: 코드 세그먼트와 데이터 세그먼트 전체
      1. 페이지 아웃된 페이지들: 메인 메모리에서 밀려난 개별 페이지

스왑 공간 크기

  • 스왑 공간이 부족하면 시스템이 프로세스를 강제 종료하거나 다운될 수 있습니다. 따라서 과소평가보다는 과대평가하는 것이 안전합니다.

권장 크기:

  • Solaris: 가상 메모리 크기 - 페이저블 물리 메모리 크기
  • Linux: 물리 메모리의 2배 (전통적 권장값. 최근에는 RAM이 충분하면 1배 이하도 가능)

구현 방식

스왑 공간은 세 가지 방식으로 구현할 수 있습니다.

(1) Normal File System 방식 (Windows XP)

파일 시스템 안에 큰 파일 하나를 만들어 스왑 공간으로 사용합니다. Windows에서는 C:\pagefile.sys가 이에 해당합니다.

파일 시스템
└── pagefile.sys (스왑 파일)

장점: 구현이 쉬움. 기존 파일 시스템 루틴을 그대로 사용
단점: 비효율적. 스왑 시마다 디렉터리 구조와 디스크 할당 데이터 구조(inode 등)를 조회해야 하므로 오버헤드가 큼

(2) Separate Disk Partition 방식 (Unix)

파일 시스템이 없는 별도의 raw 파티션을 스왑 공간으로 사용합니다.

디스크
├── Partition 1: ext4 파일 시스템 (일반 데이터)
└── Partition 2: raw partition (스왑 전용, 파일 시스템 없음)

장점: 파일 시스템 오버헤드 없이 직접 디스크 블록에 접근하므로 빠름
단점: 파티션 크기를 설치 시 미리 결정해야 하며, 나중에 변경이 어려움

스왑 공간 관리자(Swap space manager)가 스왑 맵(swap map)을 유지하여 어떤 블록이 사용 중인지 추적합니다.

(3) Flexible 방식 (Linux)

Linux는 raw 파티션과 파일 시스템 기반 스왑을 모두 지원합니다.

# 스왑 파티션 사용
sudo swapon /dev/sda2

# 스왑 파일 사용
sudo fallocate -l 4G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

이 유연성 덕분에 설치 후에도 스왑 파일을 추가하거나 크기를 변경할 수 있습니다.

스왑 공간 접근 경로

슬라이드의 다이어그램에 따르면 두 가지 경로가 있습니다:

경로 1: 파일 시스템을 통한 접근 (Normal file system 방식)

Virtual memory system
→ (1) /etc/swap.data 파일 경로 조회
→ Naming layer → VFS → Local file system (Ext2)
→ 디스크의 swap.data 파일에 접근

경로 2: raw disk를 통한 직접 접근 (Separate partition 방식)

Virtual memory system
→ (2) Swap space manager가 raw disk의 swap space에 직접 접근
→ Swap map으로 블록 위치 관리
→ 디스크의 스왑 파티션에 직접 접근

경로 2가 파일 시스템 계층을 거치지 않으므로 더 빠릅니다.

구현 방식 비교

항목Normal File SystemSeparate PartitionFlexible (Linux)
대표 OSWindowsUnixLinux
파일 시스템 필요아니오둘 다 가능
성능느림 (파일 시스템 오버헤드)빠름 (직접 접근)선택에 따라 다름
구현 난이도쉬움보통보통
유연성높음 (파일 크기 변경 가능)낮음 (파티션 크기 고정)매우 높음

핵심 요약

  1. 디스크의 물리적 구조: 플래터, 트랙, 섹터, 실린더로 구성. 섹터가 최소 전송 단위

  2. 디스크 접근 시간 = Seek time + Rotational time + Transfer time이며, Seek time이 가장 큰 비중을 차지

  3. 디스크 스케줄링의 목적: Seek time을 최소화하는 것

    • FCFS: 단순하지만 비효율적
    • SSTF: 효율적이지만 starvation 위험
    • SCAN: 엘리베이터 방식, starvation 없음
    • C-SCAN: 한 방향으로만 서비스, 대기 시간 균일
    • LOOK/C-LOOK: SCAN/C-SCAN의 실용적 버전, 가장 많이 사용
  4. 디스크 포매팅: 저수준 포매팅(섹터 구조) → 파티셔닝 → 논리적 포매팅(파일 시스템)

  5. 디스크 캐시: 지역성을 이용하여 자주 접근하는 섹터를 메모리에 캐싱

  6. 스왑 공간: 물리 메모리 부족 시 디스크를 가상 메모리 확장으로 사용. 파일 시스템 방식(Windows)과 raw 파티션 방식(Unix), 둘 다 지원하는 유연한 방식(Linux)이 있음

0개의 댓글