Hard Disk Drive (HDD)
하드 디스크는 자기 패턴으로 정보를 기록한다. 쉽게 말하면 수많은 CD를 밀집시켜 놓은 구조로 생각하면 된다. 하드 디스크의 구조를 그림으로 살펴보면 아래와 같다.
Read-write head : 데이터를 읽고 쓰는 역할을 담당
Disk arm : 헤드를 데이터가 있는 곳으로 움직이는 역할
Spindle : 플래터를 돌려주는 역할
Platter : CD 한 장으로 생각하면 된다. 위, 아랫면에 자기적 성질을 이용해 정보를 저장
Track : 플래터의 동심원 일부
Sector : 하드 디스크의 최소전송 단위로 트랙의 일부분. 섹터의 집합이 트랙이다. 섹터는 고정 크기를 가지는데 2010년까지는 512B, 현재는 일반적으로 4KB의 크기를 가진다
Cylinder : 다수개의 플래터의 트랙을 수직적으로 관통하는 3차원적인 스택
HDD 용량 = (헤드 수) * (실린더 수) * (섹터 수) * (섹터 용량)
하드 디스크에서 정보를 읽고 쓰는 과정은 단순하다. 쓰고자 하는 섹터에 헤더를 위치시키기만 하면 된다. 이때 헤더를 원하는 섹터에 위치시키기 위해 스핀들 모터와 디스크 암이 열심히 움직인다. 여기서 원하는 섹터까지 접근하는 시간을 '접근 시간(access time)'이라고 한다. 접근 시간은 다시 seek time과 rotational latency라는 요소로 나뉜다.
Access Time의 두 요소
1. Seek Time : 디스크 암이 찾고자 하는 섹터를 포함한 실린더까지 이동하는데 걸리는 시간
2. Rotational Latency : 실린더에서 찾고자 하는 섹터를 헤더로 위치시키기 필요한 스핀들 모터 회전 시간
헷갈리면 볼드체로 처리한 부분만 읽으면 된다. Seek time은 암이 이동하는 시간, rotational latency는 스핀들 회전 시간이다.
한편, 장치 대역폭(device bandwidth)은 전송된 총 바이트 수를 첫 번째 서비스 요청과 마지막 전송 완료 사이의 총 시간으로 나눈 값이다. 즉, 시간당 데이터 이동량이다.
접근 시간과 대역폭을 갑자기 말하는 이유는, HDD 스케줄링을 통해 이 두 가지를 개선시킬 수 있기 때문이다. HDD 스케줄링은 '디스크암 이동 전략'으로 생각하면 된다. 운영체제가 스케줄링을 담당하고 있으며 다양한 전략이 있다. 어떤 전략이 있는지 살펴보자.
Disk Scheduling
다수의 request가 있을때, 디스크 암이 어떻게 움직이는 것이 효율적인지 알아보는게 목적이기 때문에 모든 스케줄링 알고리즘의 초기값을 통일시킬 필요가 있다. 먼저 헤드 포인터는 53번 실린더에서 시작하는 것으로 가정하고, 큐 안에 대기값은 아래와 같다. 각 번호는 실린더 숫자를 의미한다. 실린더는 0~199번까지 있다고 가정한다.
1. FCFS (First-Come Fist-Served)
큐에 들어온 순서대로 이동하는 전략이다. 아래 그림을 보면 98, 183, 37 ~ 순서로 이동한다.
2. SSTF (Shortest Seek Time First)
현재 위치에서 가장 가까운 곳으로 이동하는 전략이다. 1번의 방법보다는 훨씬 이동 시간이 단축되지만 이 전략은 기아 현상이 발생할 수 있는 문제가 있다. 극단적인 상황을 가정해보자. 헤더의 시작 위치가 53번이고 199번이 대기 큐에서 기다리고 있는 상황이다. 그런데 대기 큐에 계속 들어오는 값이 50번 근처 값이면 199번에는 영원히 도달할 수 없는 상황이 발생할 수 있다.
3. SCAN
자동차 와이퍼처럼 계속 왕복운동 하는 전략이다. 왼쪽 끝으로 갔다가 그 지점에서 오른쪽 끝으로 갔다가를 반복하거나 그 반대의 경우를 말한다.
4. C-SCAN
한방향으로만 움직이는 전략이다. 왼쪽 끝에서 오른쪽 끝으로 갔다가, 다시 왼쪽 끝으로 돌아가서 오른쪽 끝으로 가는 경우를 말한다.
5. C-LOOK
SCAN 방식에서 양끝점을 큐의 최소값과 최대값으로 대치하는 전략이다.
SSD (Solid-State Disk)
SSD의 구조를 자세히 살펴보기에는 운영체제의 범위를 많이 벗어나기 때문에 굉~~~장히 간단하게만 다루고 넘어가자. 사실 SSD의 세부적인 구조는 나도 모른다! SSD는 HDD와 다르게 전기적 신호로 데이터를 저장하기 때문에 HDD에 비해 속도가 많이많이많이 빠르다. 그래서 HDD를 쓰다가 SSD를 쓰면 부팅 속도 차이를 많이 느낄 수 있다. SSD는 전기적 신호로 동작하기 때문에 seek time과 rotational latency와 같은 시간이 소요되지 않는다. 좀 과장되게 비유하면 HDD와 SSD의 속도 차이는 우체국과 이메일 급의 속도 차이다. HDD의 저장 단위가 섹터였다면 SSD의 저장 단위는 페이지다. 우리가 가상 메모리에서 배웠던 그 페이지가 맞다. SSD는 이렇게만 알아두자!
두 가지만 기억하자. SSD는 전기적 신호로 동작한다! SSD의 최소 단위는 페이지다!
디스크 관리 (Disk Management)
운영체제는 디스크 관리 기능 일부를 담당한다. 이 글에서는 운영체제의 기능 중 드라이브 초기화, 부트 블록 관리, 디스크의 손상된 블록 관리에 대해 살펴본다.
1. 드라이브 초기화
디스크는 초기에 빈 상태다. 운영체제가 디스크를 파일 저장 용도로 사용하기 위해서 디스크는 섹터 또는 페이지 단위로 나누어져 있어야 한다. 이 과정은 보통 운영체제가 실행하기 보다는 디스크 제조 과정의 마지막 단계에 포함된다. 이를 저수준 포맷팅(low level formating)또는 물리적 포맷팅이라고 한다. 시중에 파는 디스크들은 이미 저수준 포맷팅이 완료된 상태로 봐도 된다.
저수준 포맷팅이 완료된 디스크에 운영체제가 자신의 파일 시스템 자료 구조를 저장하는 과정을 '드라이브 초기화' 라고 한다. 드라이브 초기화는 아래의 두 단계를 거친다.
1. 파티셔닝
디스크를 하나 이상의 블록 또는 페이지 그룹으로 분할하는 과정. 운영체제는 각 파티션을 별도의 장치로 취급할 수 있다. 예를 들어 파티션A 는 스왑 공간으로 사용될 수 있고, 파티션B 는 사용자 파일을 관리하는 파일 시스템으로 사용될 수 있다.
2. 논리적 포맷팅
운영체제가 자신의 파일 시스템 자료구조를 디스크에 저장하는 일이다. 이렇게 파일시스템으로 포맷된 파티션 공간을 볼륨(volume)이라고 한다.
2. 부트 블록 관리
부트 블록은 부트스트랩 프로그램이 저장된 디스크 블록을 말한다. 우리가 PC 전원을 키면 가장 먼저 읽기 전용 메모리인 ROM 안에 '부트로더'가 실행된다. 부트 로더는 부트 블록의 부트스트랩 프로그램을 실행시킨다. 부트스트랩 프로그램은 디스크에서 부트 파티션의 첫 번째 섹터를 실행시킨다. 부트 파티션에는 운영체제와 디바이스 드라이버 등이 저장되어 있다. 부트 파티션으로부터 운영체제 커널을 찾아서 메모리에 적재하고, 진입점으로 메모리를 이동(jump) 시킴으로서 운영체제가 동작한다. 이렇게 운영체제가 실행되기 전까지의 과정을 '부팅'이라고 한다. 윈도우의 부팅 프로세스를 예로 들어보자.
먼저, ROM 안에 부트로더가 실행되는 것은 동일하다. 부트로더는 디스크의 첫 번째 논리 블록을 실행시키는데, 이 블록을 MBR(Master Boot Record)이라고 한다. MBR에는 부팅 코드와 파티션 테이블이 저장되어 있다. 파티션 테이블로부터 부트 파티션이 확인되면, 부트 파티션의 첫번째 섹터를 불러온 후 나머지 부트 프로세스를 계속 진행한다.
3. 손상된 블록 관리
HDD의 경우 움직이는 부품들로 구성되어 있기 때문에 섹터에 손상이 갈 수 있다. 이렇게 손상된 섹터를 bad block이라고 한다. bad block을 관리하는 방법은 아래와 같다.
1. Sector Sparing or Forwarding
: 예비 섹터를 남겨놓아 손상된 섹터와 교체하는 방법. 예를 들어 섹터 87번이 손상됐다고 하면, 87번 섹터를 읽으려고 할때 예비 섹터로 매핑시키는 방법.
2. Sector Slipping
: 손상된 섹터 기준으로 한칸씩 밀어내는 방법이다. 예를 들어 17번 섹터가 손상됐고, 202번 섹터가 spare 섹터라고 하면, 17번을 18번으로 매핑시키고, 18번을 19번으로 매핑시키고... 201번을 202번으로 매핑 시키는 방법. spare는 예비 섹터를 말한다.
'CS > 운영체제' 카테고리의 다른 글
[ 운영체제 ] 쓰레싱(Thrashing)과 작업 공간(Working Set), 지역성(Locality) (1) | 2022.02.21 |
---|---|
[ 운영체제 ] 가상 메모리2 - Modify bit(Dirty bit), 페이지 교체 알고리즘 (2) | 2022.02.16 |
[ 운영체제 ] 가상 메모리1 - Swapping, Demand Paging, Valid bit, Page Fault (0) | 2022.02.15 |
[ 운영체제 ] 메모리 관리3 - 페이징 단점, 내부 단편화, TLB, 세그멘테이션(Segmentation) (0) | 2022.02.09 |
[ 운영체제 ] 메모리 관리2 - 페이지 테이블의 세 가지 구조 (0) | 2022.02.08 |