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)


▶ 독립된 고장 모드의 다중 저장 장치의 사용: 정보의 무손실 가능

→ 갱신 중의 고장에도 복사본에 의한 복구 가능


▶ 디스크 기록의 결과

- 성공적인 완료: 자료가 디스크 상에 정확하게 기록됨

- 부분적 고장: 전송도중 에러가 발생하여 해당 섹터의 데이터가 손상됨

- 완전 고장: 디스크 기록이 시작되기 전에 고장이 일어나서, 기존 데이터가 그대로 남아있음


▶ 고장 발생시 회복 알고리즘을 가동하기 위해서는, 각 논리적 블록에 두 개의 물리적 블록을 유지하면 됨






Posted by MSNU