13.1 디스크 구조(Disk Structure) - 보조저장장치 구조(Secondary Storage Structures)
13. 보조저장장치 구조(Secondary Storage Structures)
13.1 디스크 구조(Disk Structure)
▶ 디스크 구동기는 논리적 블록(통상 512bytes)의 일차원 배열로 주소 지정
- 구식: 논리적 블록 번호 → 디스크 주소(실린더 번호, 트랙 번호, 섹터 번호)
→ 변환이 어려움
① 손상 섹터를 다른 곳의 여유분 섹터로 대치
② 트랙당 섹터의 수가 바깥쪽으로 갈수록 증가
- 현대식: 실린더를 섹터 수가 일정한 지역(zone)으로 구분
13.2 디스크 스케줄링(Disk Scheduling)
▶ 효율적인 디스크 사용의 평가 기준
- 접근 시간(access time)
① 탐색 시간(seek time): 디스크 암이 요구되는 섹터를 포함하는 실린더로 헤드를 움직이는 시간
② 회전 지연(rotational latency): 디스크 헤드에 요구하는 섹터가 회전하기까지 기다리는 시간
- 대역폭(bandwidth): 전송되는 총 바이트를 첫 번째 요구에 대한 서비스에서 마지막 전송까지의 총 시간으로 나눈 값
▶ 디스크에 대한 입출력을 위한 시스템 호출의 정보
① 입력/출력
② 디스크 주소(구동기 번호, 실린더, 표면, 섹터)
③ 주기억장치 주소
④ 전송 정보의 길이(바이트/단어 수)
→ 만일 디스크 구동기와 제어기가 바쁘면, 큐에서 대기해야 함: 스케줄링 필요
13.2.1 선입선처리(First-Come-First-Served; FCFS) 스케줄링
▶ 개념: 먼저 요청한 것을 먼저 처리
- 알고리즘 간단, 공평
[그림 13.1] 선입선처리 디스크 스케줄링(652 실린더 이동)
→ 최적 탐색 아님
13.2.2 최소 탐색 우선(Shortest-Seek-Time-First; SSTF) 스케줄링
▶ 개념: 현재 헤드의 위치에 가장 가까운 요청부터 처리
- 전반적인 탐색 시간 감소
- SJF(Shortest-Job-First) 알고리즘 형태: 기아 상태(starvation) 발생
[그림 13.2] 최소 탐색 우선 디스크 스케줄링(236 실린더 이동)
→ 최적 탐색 아님
13.2.3 SCAN 스케줄링
▶ 개념: 헤드가 한 쪽 끝에서 다른 쪽 끝으로 왕복 이동하면서 현재의 이동 방향에서 가장 가까운 요청부터 처리하는 방법
[그림 13.3] SCAN 디스크 스케줄링(236 실린더 이동)
→ 양 끝 부분에서는 방금 처리한 부분에 대해 바로 재처리하게 되므로 대기 시간이 균등하지 않음
13.2.4 순환 SCAN(Circular-SCAN; C-SCAN) 스케줄링
▶ 개념: 헤드가 이동하는 양쪽 끝이 원형으로 맞닿아 있다고 가정하고 순환적으로 일정한 방향으로 처리하는 방법
- 실린더 횡단은 매우 신속하게 이동함
[그림 13.4] 순환 SCAN 디스크 스케줄링(183 실린더 이동)
→ 대기 시간이 균등함
13.2.5 LOOK/C-LOOK 스케줄링
▶ LOOK 개념: 실제로는 요청이 없는 양쪽 끝까지는 도달할 필요가 없으므로, 각 방향의 마지막 요청까지만 이동한 후 바로 반대 방향으로 이동하는 방식
▶ C-LOOK 개념: 실제로는 요청이 없는 양쪽 끝까지는 도달할 필요가 없으므로, 각 방향의 마지막 요청까지만 이동한 후 바로 정해진 방향의 첫 요청위치로 이동하는 방식
[그림 13.5] C-LOOK 디스크 스케줄링(153 실린더 이동)
13.2.6 디스크 스케줄링 알고리즘의 선택
▶ 최소 탐색 우선(SSTF)과 LOOK이 합리적인 선택임
▶ 최적 알고리즘은 가능하지만 필요한 계산량 때문에 효율적이라고 할 수 없음
▶ 디스크 서비스의 성능에 영향을 끼치는 요인
① 파일 할당 방법
- 연속 할당된 파일: 헤드의 이동이 효율적, 디스크 이용률은 저조
- 링크 파일, 색인 파일: 헤드의 이동이 비효율적, 디스크 이용률은 높음
② 디렉토리나 색인 블록의 위치
→ 파일에 접근할 때마다 참조해야 하므로 디스크의 양끝보다는 중간에 위치시키는 것이 효율적
13.3 디스크 관리(Disk Management)
13.3.1 디스크 포맷팅(Disk Formatting)
▶ 저급 포맷팅(low-level formatting): 자기 원판을 특정의 자료구조를 갖는 섹터로 구분하는 것
- 헤더(header): 섹터 수
- 자료 구역(data area): 보통 512 바이트
- 테일러(tailer): 오류 수정 코드(Error Correction Code; ECC) - 섹터의 손상 여부를 판별
→ 대부분의 하드디스크는 제조 공장에서 저급 포맷팅 됨
▶ 단편(partition) 분할: 실린더의 부분 집합으로 구분
→ 별개의 디스크로 간주
ex) 운영체제 코드 부분, 사용자 파일 부분
▶ 논리적 포맷팅(logical formatting): 파일 시스템을 만드는 것
→ 초기 파일 시스템의 구조를 디스크 속에 저장
- 가용 및 할당 공간의 맵(map): FAT 또는 inode
- 초기의 빈 디렉토리
13.3.2 부트 블록(Boot Block)
▶ 부트스트랩(bootstrap) 프로그램: 시작 프로그램, 초기 프로그램
- 운영체제의 커널을 찾고,
- 이를 주기억장치 내에 적재하고,
- 초기 주소로 점프함
▶ 부트스트랩 프로그램의 위치
- 약간의 부트스트랩 프로그램을 ROM에 저장하고(수정 불가),
- 나머지는 디스크의 고정 위치인 시스템 디스크 또는 부트 디스크에 저장(수정 가능)
[그림 13.6] MS-DOS 디스크 구조
13.3.3 손상 블록(Bad Blocks)
▶ IDE 제어기 디스크의 경우: 손상 블록을 수동으로 처리
→ MS-DOS의 format 명령어(논리적 포맷 및 디스크 검사): 손상된 블록이 발견되면, 사용하지 못하도록 FAT 항목에 특별한 값을 부여함(데이터는 손실됨)
▶ SCSI 제어기 디스크의 경우: 손상 블록을 자동으로 처리
→ 섹터 전진(forwarding) 또는 섹터 옮기기(slipping): 제어기는 손상 블록의 리스트를 유지하고, 손상 섹터를 여분의 섹터로 대체할 수 있음(데이터는 손실됨)
ex) p.479의 내용
13.4 교체 공간 관리(Swap-Space Management)
▶ 교체 공간: 가상 기억장치를 위한 디스크 상의 일부 공간
13.4.1 교체 공간 사용(Swap-Space Use)
▶ 교체 공간의 사용 방법: 운영체제에 따라 다양
- 프로세스 전체를 유지하는 공간
- 페이지를 위한 공간
- 다중 교체 공간: 서로 다른 디스크에 존재하면서 입출력 장치의 부하를 분산시킴 - ex) UNIX
▶ 교체 공간의 크기: 실제 기억장치의 크기, 가상 기억장치의 크기, 가상 기억장치의 사용 방법 등에 따라 결정됨
- 과소 평가의 경우: 프로세스의 중단 혹은 고장 초래
- 과대 평가의 경우: 공간의 낭비 초래 ← 보다 안전
13.4.2 교체 공간 위치(Swap-Space Location)
▶ 파일 시스템 내에 큰 파일로 존재하는 경우
(장점)
- 통상의 파일 시스템 루틴으로 교체 공간을 생성하고, 이름짓고, 공간 할당을 할 수 있음
- 다른 교체 공간의 추가도 쉬움
(단점)
- 디렉토리 구조와 디스크 할당 자료구조를 추적하기 위한 시간과 별도의 디스크 접근이 소요됨
- 외부 단편화는 교체 시간을 크게 증가시킴
- 블록 할당 정보를 캐시에 둘 수 있으나, 여전히 캐시의 자료 구조 조사를 위한 시간 소요됨
▶ 별도의 디스크 분할(partition)로 존재하는 경우: 보다 일반적
(장점)
- 파일 시스템이나 디렉토리 구조가 이 공간에 위치하지 않음
- 교체 공간 관리자가 블록을 할당하고 해제함
(단점)
- 공간보다 시간을 중시함으로써 내부 단편화 발생
→ 교체 공간은 다른 파일에 비해 훨씬 짧게 존재하면서 빈번히 접근되기 때문에 참을만함
- 교체 공간이 고정된 크기이기 때문에, 재분할(repartitioning)이나 추가에 의해서만 확장 가능
→ 재분할의 경우, 기존 파일 시스템의 이동 필요함
▶ 두 방식을 모두 제공하는 경우: ex) Solaris 2
- 정책과 구현이 분리됨
- 기계 관리자(machine's administrator)에 의해 방식이 결정됨
13.4.3 교체 공간 관리(Swap-Space Management)
▶ UNIX에서의 교체 기법과 페이징 기법의 발전 과정
- 초기에는 전체 프로세스를 연속된 디스크 공간과 기억장치 사이에 복사하는 방식을 사용
- 하드웨어 페이징이 가능해지면서 페이징과 교체를 결합한 방식을 사용
1) 4.3BSD
- 프로세스가 시작될 때 교체 공간이 할당됨
① 텍스트 페이지/텍스트 세그먼트: 프로그램
② 자료 세그먼트: 데이타
- 프로세스당 두 교체 맵이 사용됨
① [그림 13.7] 4.3BSD 텍스트 세그먼트 교체 맵
→ 512K 단위로 할당됨
② [그림 13.8] 4.3BSD 자료 세그먼트 교체 맵
→ 블록 가 크기: 해당 블록 크기를 넘게 되면, 두 배 큰 다음 블록을 할당
2) Solaris 1(SunOS 4)
- 프로세스가 시작되면 텍스트 세그먼트 페이지들을 일단 주기억장치로 불러들여 접근하고, 페이지 아웃되도록 선정되면 미리 생성되어 있는 교체 공간으로 내보내는 방식 채택
→ 효율성 향상
3) Solaris 2
- 교체 공간을 미리 생성되는 것이 아니라 실제 기억장치로부터 방출될 때 교체 공간을 할당하는 방식 채택
→ 주기억장치의 용량이 큰 현대 컴퓨터 시스템에 적합
13.5 디스크 신뢰성(Disk Reliability)
▶ 디스크: 시스템에서 가장 신뢰도가 낮은 요소
→ 높은 고장률
▶ 디스크 스트리핑(striping)/인터리빙(interleaving): 하나의 저장 단위로 디스크들의 그룹을 사용하는 방법
→ 각 블록을 여러 부분 블록으로 나누고 디스크마다 병렬로 전송함으로써 전송 시간을 향상시킴
▶ 중복 배열 디스크(Redundant Array of Independent Disks; RAID): 디스크 스트리핑으로 중복된 자료를 복사함으로써 신뢰도를 향상시키는 조직
① 미러링(mirroring)/새도우잉(shadowing): 이중 디스크를 사용하는 방법
- 쓰기: 이중으로 복사해야 하기 때문에 두 배로 느림
- 읽기: 각 디스크에서 동시에 보내기 때문에 두 배로 빠름
② 블록 인터리브된 패리티(block interleaved parity): 9개의 디스크 중 마지막 하나를 패리티 비트의 블록으로 사용하는 방법
- 한 디스크의 고장시 복구 가능
- 자료 블록의 매 변경마다 패리티 블록을 갱신해야 함
13.6 안정된 저장장치 구현(Stable-Storage Implementation)
▶ 독립된 고장 모드의 다중 저장 장치의 사용: 정보의 무손실 가능
→ 갱신 중의 고장에도 복사본에 의한 복구 가능
▶ 디스크 기록의 결과
- 성공적인 완료: 자료가 디스크 상에 정확하게 기록됨
- 부분적 고장: 전송도중 에러가 발생하여 해당 섹터의 데이터가 손상됨
- 완전 고장: 디스크 기록이 시작되기 전에 고장이 일어나서, 기존 데이터가 그대로 남아있음
▶ 고장 발생시 회복 알고리즘을 가동하기 위해서는, 각 논리적 블록에 두 개의 물리적 블록을 유지하면 됨
'시리즈 > OS' 카테고리의 다른 글
5 부 분산 시스템(Distributed Systems) -15. 네트워크 구조(Network Structures) (0) | 2014.08.24 |
---|---|
제3의 저장장치 구조(Tertiary Storage Structure) (0) | 2014.08.20 |
12. 입출력 시스템(I/O Systems) (0) | 2014.08.12 |
11.1 파일 시스템 구조(File-System Structure) (0) | 2014.08.08 |
10. 파일 시스템 인터페이스(File System Interface) (0) | 2014.08.07 |