하드 디스크 드라이브(HDD)와 비휘발성 메모리 장치(SSD 등)는 대부분의 컴퓨터에서 주요 보조저장장치(I/O 장치)로 사용된다. 최신 보조저장장치는 논리 블록의 1차원 배열로 구성되며, 컴퓨터 시스템에는 다음과 같은 방식으로 연결된다.
- 호스트 컴퓨터의 로컬 I/O 포트
- 마더보드에 직접 연결
- 통신 네트워크 또는 스토리지 네트워크
보조저장장치에 대한 I/O 요청은 파일 시스템과 가상 메모리 시스템에서 발생하며, 각 요청은 참조할 장치의 논리 블록 번호로 지정된다.
디스크 스케줄링
디스크 스케줄링 알고리즘은 HDD의 유효 대역폭, 평균 응답 시간, 응답 시간의 편차를 줄이기 위해 사용된다.
- 대표적 알고리즘: SCAN, C-SCAN (엘리베이터 방식)
- HDD에서는 알고리즘에 따라 성능 차이가 크지만, 반도체 디스크(SSD)는 기계적 움직임이 없으므로 FCFS만으로도 충분하다.
디스크 스케쥴링 기본 개념
- 디스크 헤드: HDD에서 특정 트랙(논리 블록이 있는 원형 위치)을 읽고 쓰기 위해 이동하는 기계적 부품
- 디스크 요청: 특정 트랙(블록 번호)에서 데이터를 읽거나 쓰라는 요구
- 성능 지표: 평균 대기 시간, 평균 응답 시간, 헤드 이동 거리
SCAN (엘리베이터 알고리즘)
- 헤드가 한 방향으로 이동하면서 요청을 처리하다가 끝에 도달하면 반대 방향으로 전환.
- 실제 엘리베이터가 위층까지 갔다가 내려오는 방식과 유사.
예시
- 디스크 트랙: 0 ~ 199
- 현재 헤드 위치: 53
- 요청 큐: 98, 183, 37, 122, 14, 124, 65, 67
- 초기 이동 방향: 오른쪽(증가 방향)
처리 순서
- 53에서 오른쪽 이동 → 65 → 67 → 98 → 122 → 124 → 183
- 끝(199)에 도달한 뒤 방향 전환
- 다시 왼쪽으로 이동 → 37 → 14
총 이동 경로
53 → 65 → 67 → 98 → 122 → 124 → 183 → 199 → 37 → 14
특징
- 양방향 모두 사용하므로 모든 요청이 언젠가는 서비스됨
- 하지만 중앙 쪽 요청이 유리하고, 끝부분 요청은 불리
C-SCAN (Circular SCAN)
- SCAN의 변형
- 헤드가 한쪽 방향(예: 오른쪽)으로만 이동하며 요청을 처리
- 끝에 도달하면 반대편 끝으로 점프해서 다시 같은 방향으로 이동 시작
- 엘리베이터가 꼭대기까지 올라간 뒤, 다시 맨 아래로 순간이동해 올라오는 방식
예시
- 디스크 트랙: 0 ~ 199
- 현재 헤드 위치: 53
- 요청 큐: 98, 183, 37, 122, 14, 124, 65, 67
- 초기 이동 방향: 오른쪽(증가 방향)
처리 순서
- 53에서 오른쪽 이동 → 65 → 67 → 98 → 122 → 124 → 183
- 끝(199)에 도달 → 0으로 점프 (점프는 이동 거리로 계산하지 않음)
- 0부터 오른쪽 이동 → 14 → 37
총 이동 경로
53 → 65 → 67 → 98 → 122 → 124 → 183 → 199 → (점프 0) → 14 → 37
특징
- 모든 요청이 공평하게 대기 (끝에 있는 요청도 차별받지 않음)
- 평균 응답 시간 균일성이 SCAN보다 우수
알고리즘 동작 방식 장점 단점
SCAN | 헤드가 왕복 이동 | 헤드 이동 최소화 | 끝부분 요청이 불리 |
C-SCAN | 헤드가 한쪽으로만 이동 후 점프 | 응답 시간 균일, 공평 | 왕복 대신 점프 때문에 더 긴 이동 가능 |
오류 감지 및 복구
데이터 저장과 전송은 오류가 발생하기 쉽다.
- 오류 감지: 문제를 발견해 보고하고 전파를 방지
- 오류 수정: 여분의 데이터(패리티, ECC 등)를 활용해 손상된 데이터를 복구
파티션과 파일 시스템
저장장치는 여러 파티션으로 나뉘며, 각 파티션은 독립된 볼륨을 갖거나 다중 장치 볼륨의 일부가 될 수 있다. 파일 시스템은 볼륨 내부에 생성된다.
운영체제는 저장장치 블록을 관리하며, 일반적으로 장치는 사전 포맷된 상태로 제공된다.
- 파티션과 파일 시스템 생성
- 부트 블록: 운영체제가 포함된 장치의 경우 부트스트랩 프로그램 저장
- 손상된 블록: 여분 블록으로 대체
스왑 공간
스왑 공간(물리 메모리(RAM)가 부족할 때 보조저장장치(HDD, SSD)의 일부를 임시로 메모리처럼 사용하는 공간)은 시스템 성능을 좌우한다. 운영체제는 다음 방식을 제공한다.
- Raw 파티션에 직접 스왑 공간 할당
- 파일 시스템 내부의 스왑 파일 사용
- 일부 시스템은 두 가지 방식을 모두 허용
RAID (Redundant Array of Independent/Inexpensive Disks)
대규모 시스템은 저장장치 고장에 대비해 RAID 알고리즘을 사용한다. RAID는 여러 드라이브를 중복 구성하여, 고장 발생 시에도 지속적인 작업과 자동 복구를 보장한다. RAID 레벨은 신뢰성과 전송 속도의 조합에 따라 구분된다.
RAID 개념
알고리즘은 여러 개의 디스크를 하나처럼 묶어 성능과 신뢰성을 향상시키는 기술
- 성능 향상 (여러 디스크에 병렬로 읽고 쓰기 → I/O 대역폭 증가)
- 내결함성 제공 (디스크 고장 발생 시에도 데이터 손실 최소화)
RAID 0 (스트라이핑, Striping)
- 데이터 블록을 여러 디스크에 분할 저장
- 장점: 읽기/쓰기 병렬 처리 → 성능 최고
- 단점: 중복 없음 → 디스크 하나만 고장 나도 전체 데이터 손실
Disk1: A1, A3, A5 ...
Disk2: A2, A4, A6 ...
RAID 1 (미러링, Mirroring)
- 동일한 데이터를 두 개 이상의 디스크에 그대로 복제
- 장점: 디스크 하나 고장 나도 다른 복사본 사용 가능 → 신뢰성 최고
- 단점: 디스크 용량 효율 50% (예: 1TB x 2 = 1TB 사용 가능)
Disk1: A1, A2, A3 ...
Disk2: A1, A2, A3 ...
RAID 5 (스트라이핑 + 분산 패리티)
- N개의 디스크에 데이터를 나눠 저장 + 패리티(Parity) 정보를 분산 저장
- 디스크 1개 고장 시 패리티로 데이터 복구 가능
- 장점: 저장 효율 높음 (N-1개 용량 사용 가능)
- 단점: 패리티 연산 때문에 쓰기 성능 약간 떨어짐
Disk1: D1 D2 P3 D4
Disk2: D1 P2 D3 D4
Disk3: P1 D2 D3 D4
(P = parity 블록)
RAID 6
- RAID 5의 확장판 → 2개의 패리티 블록 저장
- 디스크 2개 동시에 고장 나도 복구 가능
- 안정성 높지만 쓰기 속도 더 느림
RAID 10 (1+0, Mirrored Striping)
- RAID 1 + RAID 0 조합
- 먼저 디스크를 짝지어 미러링 후, 그 쌍들을 묶어 스트라이핑
- 성능 + 안정성 균형 잡힌 방식, 비용은 높음
레벨 방식 성능 안정성 용량 효율
레벨 | 방식 | 성능 | 안정성 | 용량 효율 |
RAID 0 | 스트라이핑 | 높음 | 없음 | 100% |
RAID 1 | 미러링 | 보통 | 높음 | 50% |
RAID 5 | 분산 패리티 | 좋음 | 보통 | (N-1)/N |
RAID 6 | 이중 분산 패리티 | 중간 | 매우 높음 | (N-2)/N |
RAID 10 | 미러+스트라이프 | 높음 | 높음 | 50% |
운영체제 관점
- OS는 RAID를 논리적 하나의 디스크로 인식
- 실제 데이터 배치는 RAID 컨트롤러(하드웨어)나 소프트웨어 레이어에서 관리
- RAID는 주로 서버, 데이터센터, DBMS에서 사용 → 고성능 + 고가용성 보장
객체 저장소
객체 저장소는 클라우드 및 빅데이터 환경에서 사용된다.
- 데이터는 파일 이름이 아닌 객체 ID로 접근
- 데이터 보호를 위해 복제(replication) 활용
- 데이터 사본이 분산된 환경에서 직접 연산 가능
- 수평 확장을 통한 대용량 처리 지원