하드 디스크 구조
<옆에서 본 모습>
- Platter의 양면에 자석을 입혀서 사용 가능
- 이론적으로 Platters 하나 당 head 2개 붙을 수 있음
- 각 head는 Spindle이라는 축에 붙어 있음
- Spindle은 회전함
<위에서 본 모습>
- head가 왔다갔다가 하면서 안쪽 바깥쪽의 데이터를 읽음
- Platter는 시스템이 켜진 순간부터 기본적으로 계속 돌고 있음
- head가 특정 위치에 가면 그 위치부터 원이 하나 생김 -> track
- 한 track 안에 데이터가 다 적혀 있으면 head를 움직이지 않고도 데이터를 다 읽을 수 있음
- Seek Time: 가장 오래 걸리는 시간, head가 움직이는 시간
- Rotation Delay: head가 원하는 위치로 갔을 때 원하는 데이터가 올 때까지 기다리는 시간
- Spindle이 고정되어 있으므로 head는 여러 개의 Platter 상에 동일 위치에 존재
- 여러 개의 head가 만들어낸 원들 -> 원통 모양: cylinder
- head가 한 번 움직임에 따라 모든 Platter위의 track들의 집합을 한 번에 읽을 수 있음
- 하드 디스크의 가장 작은 물리적 데이터 단위: sector
- 디스크에서 데이터를 읽고 쓰기 위해 필요한 정보
- cylinder 결정 = head 위치
- Platter의 surface = track 위치
- track 내 sector 번호
=> CHS가 결정되면 하나의 sector 가 도출되어 하드디스크는 chs 체계라고 함
- transfer size: 한 번에 읽어들이는 데이터의 양
- memory address: 데이터를 I/O 하기 위해서 memory 상 주소를 알아야 함
- 운영체제는 디스크를 어떻게 바라보는가?
- 운영체제는 물리적 구조 이런 거 모르고 하나의 I/O 단위인 block 단위의 저장 매체다 정도만 알고 있음 => LBA: Logical Block Address
- LBA # - sector 매핑되어야 함 -> 어떻게 매핑할 지는 하드디스크 제조 업체가 결정
Disk Scheduling
- Seek time: head의 움직임, os가 어떻게 줄여볼 수 있음
- Rotational latency: 회전 속도가 빠르면 줄어듦, 하드 디스크에서 결정돼서 나오니까 os 가 뭘 할 수 없음
- Seek time은 Seek distance와 비례
=> 웬만하면 seek 발생을 막자(같은 track에서 읽을 수 있도록 하자), seek 이 발생해도 짧게 짧게 하자
- LBA 번호가 연속적이면 하드 디스크 내에서도 연속적이지 않을까? -> 웬만하면 LBA가 연속적이면 좋겠다
- LBA가 연속적이지 않으면 가까이 있는 거 먼저 처리하면 좋겠다
1. FCFS; First Come First Served => 640 cylinder만큼 head가 움직임
2. SSTF; Shortest Seek Time First
- 가까이 있는 요청을 먼저 처리하게 되면서 먼저 들어왔지만 멀리 있는 놈들은 계속 기다려야 됨 -> fairness, starvation 문제(CPU Scheduling에서의 SJF 알고리즘과 유사)
- 내가 언제 서비스받을 수 있는지를 예측할 수가 없음 -> unpredictable performance
3. SCAN
- FCFS보다는 seek time을 줄이면서 SSTF의 문제점을 완화시키는 방법
- 왔다갔다 해서 elevator algorithm이라고도 함
- 현재 진행하는 방향에 있는 모든 요청을 처리하면서 움직이겠다
- 한 번 왔다갔다(swing)하는 내에 반드시 요청이 처리됨(upper bound 제공) -> starvation, 예측 불가능성 해결
- 더 이상 request가 없는 상황에서도 무조건 끝까지 감; 단점이라면 단점
- 0번과 199번의 경우 한 번 swing할 때 서비스를 받는 횟수가 한 번밖에 안 됨
4. C-SCAN; Circular SCAN
- 서비스받는 기회의 불균형 문제(양끝)를 해결하기 위한 방법
- 한 방향으로만 움직임, 돌아올 때는 중간에 멈춰서 읽지 않으니까 재빨리 돌아옴
- 돌아올 때 아무 의미 없이 seek 하니까 좀 아깝지
5. C-LOOK
- C-SCAN 변형
- 전진 방향의 request 가 없음에도 전진하는 문제를 해결하기 위한 방법
- 지나온 쪽에는 request가 있는데 전진 방향에는 없으면 돌아와버림
- Arm Stickiness Problem
- SCAN, C-SCAN, SSTF 가 가지는 문제
- 매우 희박
- 현재 head가 읽는 cylinder에 request가 계속 들어오면 head를 움직이지 않아도 됨
-> 6번이 계속 서비스받지 못하게 됨, starvation
Disk Management
- logical formatting: 파일 시스템을 초기화하는 것, 디스크 내 데이터는 냅두고 파일의 메타 데이터만 지우는 것
- physical formatting= Low-level formatting
- 하드 디스크를 sector 단위로 다 자름 -> head와 trailer를 붙임
- head/trailer에는 ECC(Error Correction Code)가 있어서 sector를 읽어들일 때 에러가 발생했는지 검사
- spare sector를 만들어 놓음, LBA와 매핑되지 않은 여유 공간, os는 사용하지 못하고 하드디스크 내부의 controller만 알고 있음
- ECC check로 bad sector(일반적으로는 자성이 약해졌거나, 물리적으로 긁혔거나) 가 발생하면 또 에러날 가능성이 커서 그 sector는 더이상 사용하지 않게 하고 spare sector와 LBA 번호로 매핑시켜버림
- partition: 물리적 디스크를 논리적 기능으로 만들어주는 것
- os가 독립적인 디스크처럼 관리
- Power-up: 메인보드의 ROM에 부팅을 하기 위한 아주 짧은 코드가 있음; small bootstrap loader
- 전기가 들어오자마자 저 loader가 sector 0를 load
- sector 0 에는 부팅 과정 전체를 담고 있는 full bootstrap loader가 있음 -> os가 담겨있는 디스크의 부분을 읽어들임
RAID(Redundant Array of Inexpensive/Independent Disks)
- 값싼 디스크들을 여러 개 묶어서 하나의 비싼 디스크처럼 보이게 하는 것
- 여러 개의 디스크를 동시게 구동시킴으로써 엄청나게 큰 용량과 속도도 빠르게 만듦
- 신뢰성 문제; N개의 디스크를 동시에 가동시킬 때 하나만 고장나도 디스크 전체가 고장나는 것
- Redundancy를 구현하는 가장 단순한 방법 - Mirroring=shadowing
- 각각의 디스크의 쌍둥이를 하나 더 만들겠다
- 전체 용량의 반밖에 사용하지 못하지만 디스크가 고장나더라도 쌍둥이 디스크에서 데이터를 읽을 수 있기 때문에 신뢰성 증가
- 데이터를 어떻게 분할하느냐에 따라 성능이 달라짐
- RAID에서 파일 별로 데이터를 분할하는 것은 아무 의미가 없고, 파일 내부의 데이터를 자름
- Bit-level striping: bit 단위로 자르는 것
- 한 바이트를 읽을 때 최대 8개의 디스크에서 읽을 수 있지만 seek overhead가 엄청나게 큼
- 대부분 안 씀
- Block-level striping: block 단위로 자르는 것
- RAID Levels
- RAID Level 0: Block striping; non-redundant
- 데이터 잃어버려도 상관없다
- 중요하지 않은 데이터, 좋은 성능 필요한 상황
- RAID Level 1: Mirrored disks with block striping
RAID Level 2,3 는 Bit-level striping 사용, 폐기 처분된 기법이라 몰라도 됨- RAID Level 4: Block striping, parity block
- 각 디스크의 동일 위치 block에 대한 parity block을 parity 디스크에 저장
- 데이터를 쓸 때마다 parity block에도 데이터를 써줘야 됨
- 한 번의 write가 최소 2개의 디스크에 write해야 함
- RAID Level 5: 모든 디스크에 parity block을 흩뿌리자
- bottle neck 없어짐
- RAID Level 0: Block striping; non-redundant
- RAID Level 선택 기준
- 돈
- 성능: 초당 I/O, bandwidth, ...
- failure 발생 시 성능
- 고장난 디스크 rebuilding
- 0은 개인이 사용하거나 백업을 잘 하는 경우
- 2,3은 별루
- 4 쓸 바에 5 씀
- 1 아니면 5 씀
'운영체제' 카테고리의 다른 글
[운영체제] I/O Systems (0) | 2024.06.11 |
---|---|
[운영체제] File System (0) | 2024.05.29 |
[운영체제] Virtual Memory(2) (0) | 2024.05.13 |
[운영체제] Virtual Memory (1) (0) | 2024.05.06 |
[운영체제] Memory Management (2) (0) | 2024.03.24 |