CS/운영체제

[공룡책🦖] ch11 Storage Managemet

설기똥꼬 2023. 7. 29. 15:28

본 포스팅은 공룡책으로 불리는 Abraham Silberschatz, Peter B. Galvin, Greg Gagne의 『Operating System Concept 10th』 기반으로 정리한 글입니다.


 

Mass-storage Structure

  • Mass-storage는 보조기억장치 시스템 (비휘발성 메모리)
  • HDD(Hard Disk Drive) or NVM(Non-Volatile Memory)
  • 때로는 마그네틱 테이프(백업용), 광학 디스크, 클라우드 저장소 의미

 


Hard Disk Drives

  • 하드디스크 드라이브 : 전통적인 저장 장소
  • 대용량 데이터를 저장하는 용도

 

HDD 스케줄링

스케줄링의 목적은 접근 시간 (or seek time) 최소화데이터 대역폭 (bandwith) 최대화를 목표로 한다.

 

  • Seek Time : 헤드가 저장된 트랙(특정 섹터)으로 이동하는데 걸리는 시간
  • Rotation Latency : 헤드가 트랙 내에서 원하는 섹터로 이동하는 것까지 걸리는 시간
  • Disk Bandwidth : 첫 요청에서 마지막 전송 완료시까지 (전송 용량 / 전체 시간)을 계산 → 시간당 한 번에 전송할 수 있는 용량

 

 

FIFO 스케줄링

  • 먼저 들어온 요청 섹터를 먼저 처리
  • 공평하나 매우 느림(비효율적)

 

 

Scan 스케줄링

  • 디스크 한쪽 끝에 암을 배치하고 다른 쪽 끝으로 암을 이동시키며 스캔
  • 방향 중요
  • 이 과정에서 헤드는 반전되고 계속해서 이동

 

 

C-SCAN 스케줄링

  • 스캔시 uniform scan time 부여
  • 디스크 끝에 도달 후 처음으로 돌아올 때 속도를 위해 데이터 읽지 않음
  • 원형 리스트처럼 다룸 → 마지막 실린더가 첫 실린더를 감싸는 순환 구조

 

 

Boot block

  • 부팅에 필요한 파일을 담는 디스크 영역
  • 전원이 인가되었을깨 컴퓨터 로딩시키기 위해 반드시 실행되어야하는 프로그램
    부트스트랩 프로그램 적재
  • NVM flash memory에 저장
  • 전원 인가돠면 메모리에 올라와서 운영체제 커널 로드 후 운영체제에 넘겨줌

 

 

RAID

  • RAID : Redundant Arrays of Independent Disks (복수 배열 독립 디스크)
  • 여러 디스크를 묶어 하나의 디스크처럼 사용하는 디스크 구성 기술
    • 여러 개의 하드 디스크에 일부 중복된 데이터를 나눠서 저장
  • 드라이브를 병렬로 작동시켜 데이터의 읽기 및 쓰기 속도 향상 
  • 신뢰성(Redundancy)을 높여 데이터 보호 능력 향상
    • 한 디스크의 데이터를 다른 디스크로 미러링(중복 저장)하여 데이터 보존
    • 충분한 정보가 많은 장지체 저장 
  • Parallelism을 통해 성능 향상
    • bandwitdth를 striping하여 데이터를 전송할 때 드라이브에서 한번에 보낼 수 있도록 함
    • Multiple drive 있다면 전송률 향상할 수 있음

 

 

RAID LEVEL

  • Mirroring : 데이터 카피 → 신뢰성을 높여주지만 비용이 비쌈
  • Striping : 효율적이나 신뢰성을 낮춤
  • 레이드 레벨로 구분 → 분류를 통해 cost-performance trade off

  • 비용 대비 성능에 따라 레벨로 분류
    • RAID 0 : 데이터를 여러 디스크에 분할 저장하는 방식, 한 디스크에서 장애 발생 시 데이터가 모두 손실
    • RAID 1 : 디스크에 기록된 정보를 모두 미러링하여 저장
    • RAID 4 : parity 디스크를 추가하고, parity bit를 넣어 디스크에 에러가 발생하지 않았는지 검사
    • RAID 5 : 각 디스크에 parity bit 추가
    • RAID 6 : 각 디스크에 parity bit를 이중으로 추가하여 더 정교하게 에러 감지

  • RAID 0 + 1 : stripe한 디스크를 미러링 하는 방식, 미러링 전에 한 디스크가 고장나면 데이터가 손실될 수 있음
  • RAID 1 + 0 : 미러링한 디스크를 stripe하는 방식이며 안정성이 높아 현업에서 주로 사용

 

 

I/O systems

  • 컴퓨터가 하는 두가지 일 : I/O and computing
  • I/O가 메인 작업 (웹 브라우징, 파일 편집, 유튜브, 게임 등)
  • 운영체제가 I/O 장치와 연산 관리

 

전형적인 PC 버스 구조

  • Memory-Mapped I/O
    • 디바이스에 내리는 명령을 어떻게 정할 것인가?
      • Data-in register
      • Data out
      • Status
      • Control
    • I/O address에 관련있는 controller 레지스터와 함께 메모리에 매핑
      • 메모리에 I/O 명령을 내리면 controller 레지스터 역할 수행

 

Three types of I/O

  • Polling : or busy-waiting
    • Busy bit이 종료될때까지 Status register를 반복해서 읽음
  • Interrupt
    • 대기할 때 시그널 주는 명령
    • CPU는 Interrupt-request line이라고 불리는 와이어 보유
    • CPU가 인터럽트 탐지하면 이를 ISR(interrupt service routine)으로 이동
    • ISR 주소는 인터룹트 벡터 테이블에 구체화됨
  • DMA(Direct Memory Access)
    • Programmed I/O (직접 I/O 작업)를 피하기 위해 사용
    • 대용량 데이터 전송을 위해 사용

 

 

Blocking I/O vs Non-Blocking I/O

  • Blocking : 요청 스레드의 실행이 즉시 지연됨 (Running 상태에서 Waiting Queue로)
  • Non-blocking : 요청 스레드의 실행 중단하지 않고 요청시 바로 리턴
  • Asysnchronous system call : 실행 계속 해 나감
    • Non-blocking과 Asysnchronous system call 차이
      • Non-blocking: 즉시 리턴, 데이터가 이용 가능한지 여부, 양 상관 없음
      • Asysnchronous system call : 리드 호출하면 요청하고 자기 할일 또 계속 할 수 있음, 계속 실행해 나감

 

 

File system Interface

파일 시스템은 운영체제의 모든 사용자 데이터, 프로그램을 논리적으로 저장하고 사용자가 접근 가능하게 설정하는 것이다.

관련 데이터를 저장하는 파일시스템 내의 모든 파일을 정리하는 디렉터리로 파일 시스템이 구성된다.

 

 

접근 방법

1. 순차 접근 (Sequential access) 

  • 파일 내 정보를 순서대로 접근하는 것
  • 파일 레코드가 순차적으로 기록되어 있어 판독할 때도 순차적으로 판독 

 

2. 직접 접근 (Direct access)

  • 파일의 레코드가 순차적으로 기록되어 있어 판독할 때도 순차적으로 판독

 

 

디렉토리 구조

  • 디렉터리 : 파일 시스템 내부에 있는 것, 디스크에 존재하는 파일에 대한 여러 정보를 가지고 있는 특수한 형태의 파일
  • 각 파일의 위치, 크기등의 정보를 가지고 있음
  • 디렉토리 구조 종류 4가지 (Single-level, Two-level, Tree-structured, Acyclic-graph, General graph)

 

 

File-System Implementation

파일 시스템 자체로도 위의 사진과 같이 여러 레벨 지닌다.

(application programs → logical file system → file-organization module → basic file system → I/O control → devices)

파일 시스템 내 문제 중 하나로, 파일 공간 할당을 어떻게 할 것인가?

 

Allocation method

  • 디스크 공간에 파일을 할당할 때 어떤 방식으로 해야 더 효율적일까?
  • Contiguous allocation
    • 하나의 파일이 디스크에 연속적으로 저장되는 것
    • 파일이 삭제되면 홀이 생기고 반복되면 홀이 흩어짐 ⇒ 새 파일을 어느 홀에 배치할 수 있느냐에 따라 외부 단편화 문제 발생
  • Linked allocation
    • Linked List를 이용해 아무 곳에나 들어갈 수 있도록 만드는 방법
    • 연속 할당의 문제 해결
    • 중간에 한 섹터에 문제가 발생하면 이후의 링크도 모두 잃기에 안정적이지 않음
  • FAT (file allocation table)
    • 연결 할당의 변종으로 하나의 데이터 블록에 다음 블록에 대한 정보를 담고 있는 테이블
    • 포인터를 별도의 테이블에 보관하는 방법
    • 연결 할당 문제점 해결
  • Indexed allocation
    • 각 파일에 포인터가 순서대로 저장된 인덱스 블록을 할당
    • 인덱스 블록의 i 번째 항목이 파일의 i 번째 블록을 가리킴
    • 너무 큰 파일인 경우 하나의 블록으로 인덱스를 모두 저장할 수 없기 때문에 다중 인덱스 블록을 구성해야 함
  • FreeSpace Management
    • Free Disk Space를 추적하기 위해 Free-space List 보유