[운영체제] 입출력 시스템

한결·2023년 5월 10일
1

CS

목록 보기
12/34

Disk Management and Scheduling

Disk Structure

  • 디스크 컨트롤러가 논리적 블록에 저장된 주소를 가지고 실제 물리적 섹터 위치로 변환해서 읽고 쓰게 해줌
  • 섹터에 데이터 저장

Disk Management

  • 피지컬포멧팅 : 섹터를 나누는 과정
  • header/trailer : 디스크 내부에서 컨트롤러가 관리하기 위한 정보가 들어있음
    • 섹터 번호 : 실제 이 섹터에 어떤 데이터가 들어가 있는지
    • ECC : 저장된 내용이 제대로 저장 되어있는지 체크하고 수정하는 코드
  • 파티셔닝 : 디스크 하나를 c/d드라이브 처럼 논리적으로 나누는 과정
    • 운영체제 입장에선 디스크가 한개인데 2개 이상으로 인지할 수 있음
  • 논리적 포멧팅 : 파티션된 논리적 디스크에 파일시스템 설치하는 과정
    • 각 논리적 디스크마다 다른 파일 시스템을 설치하거나 용도가 다르게 사용하는 등 해줌
  • 메모리에 비휘발성 메모리인 ROM도 있음
    • 전원키면 ROM이 0번 섹터에 있는 내용을 메모리에 올리고 실행해줌

Disk Scheduling

  • 디스크 헤드가 읽고 씀
  • Seek time이 가장 많은 시간 소요됨
  • 시간줄이는 데에 헤드 이동거리 줄이는게 가장 중요함

Disk Scheduling Algorithm

FCFS (First Come First Served)

  • 선착순 처리 매우 비효율적일 수 있음

SSTF (Shortest Seek Time First)

  • 가까운 위치 먼저
  • starvation의 문제 발생

SCAN

  • 가장 획기적인 방법
  • 나머지는 전부 SCAN의 개선된 버전
  • 대기시간이 불공평함

C-SCAN

  • SCAN보다 대기시간 편차가 적음
    -> 형평성 증가, 효율성과 맞교환하는 느낌

Other Algorithm

  • N-SCAN
    • 움직이기 시작한 시점 이후에 도착하면 무시하고 한바퀴 돌아와서 처리함
  • LOOK and C-LOCK
    • 해당 방향에 더이상 요청 처리할게 없으면
      방향바꿔서 이동 가능

Swap-Space Management

  • Swap area는 훨씬 큰 단위로 데이터 처리하는게 효과적

RAID

  • 디스크 여러개 묶어서 씀
    -> 신뢰성 상승 (하나가 고장나도 다른 디스크에서 읽기 가능)
    -> 중복저장해야함 = 쉐도잉, 미러링
    근데 완전 중복저장하면 공간낭비됨
    -> parity(축약본)를 저장함
    -> parity를 이용해 완전복구 or 고장낫다는 정도만 알리는 등 함

  • 데이터를 분산저장하면 읽어들일 때 디스크를 병렬적으로 읽으면 읽는 속도 향상함 = interleaving, striping

Ext4 파일시스템, 저널링, 버퍼캐시 알고리즘

UNIX 파일시스템

  • i-node에 메타데이터 저장

  • inode 상세

파일시스템 변천사

Ext2 파일시스템

  • indirect pointer덕에 상당히 큰 파일 처리 가능
  • 메타데이터와 실제데이터위치를 가까이 할 수 없을까
    -> 블록의 그룹화

  • 데이터 블록 비트맵으로 사용, 안사용 구분

Ext4 파일시스템

  • Ext4 = Ext2 + 저널링 기능


  • 수정 하다가 갑작스레 전원공급 중단되면
    system crash(수정중에 일부만 반영되는 등에 의해 파일이 깨지는 현상) 발생
    -> 이를 해결하기위해 저널링 추가함


  • 저널영역에 쓰는 도중에 crash나면 그냥 저널영역 버림

  • 저널영역에 쓰는게 완료되면 Check pointing하고 원본에 반영

  • 저널링 정리

  • 저널링 2가지

    • 메타데이터만 저널링하는 방법
    • 모두 저널링 하는 방법 (디폴트는 메타데이터 저널링임)

메타데이터 저널링

  • 메타데이터 저널링하면 파일 구조는 괜찮지만
    파일 데이터 일부가 크래쉬 날 수는 있음

데이터 저널링 모드

저널링은 파일이 깨지지 않게 만드는게 포인트

파일시스템을 위한 버퍼캐시 알고리즘

  • LRU
    • 이전 사용기록은 영향을 주지 않음
  • LFU
    • 사용횟수만 확인하고 사용시점은 확인안함

LRFU

  • 블록의 가치를 계산

LRFU 실효성

  • 과거 사용기록을 다 저장해놔야함
    -> Space Overhead 문제
  • 매번 value값을 계산해야함
    -> Time overhead 문제

LRFU의 효율적인 구현 방법

  • 이미구해놓은 value(t시점)로 임의의 시점의 value계산가능
    -> 이전 기록을 모두 가지고 있을 필요 없음

  • t시점 이후에 a,b 모두 사용된적 없으면
    시간이 지나도 둘의 가치의 대소관계는 변하지 않음

  • 힙으로 구현
  • 항상 부모보다 가치 낮은걸 자식으로 설정
    -> 다시 계산할 필요 없음
  • 가치 바뀌면 자식이랑만 가치 비교해서 위치 변경

  • 지금은 LRFU보다 좋은 알고리즘 많이 나옴

0개의 댓글