Post

KOCW_I/O System

✅ Disk Structure

  • ✔️ logical block
  • 디스크의 외부에서 보는 디스크의 단위 정보 저장 공간
  • 주소를 가진 1차원 배열처럼 취급
  • 정보를 전송하는 최소 단위
  • CPU는 logical block에 명령을 내리고(track번호, sector번호에 대해서는 모름)

  • ✔️ sector
  • logical block이 물리적인 디스크에 매핑된 위치
  • 디스크 내에서는 데이터는 sector에 저장
  • sector 0은 최외곽 cylinder의 첫 track에 있는 첫 번째 sector

  • ✔️ Disk Structure

Image

  • 원판이 들어있고
  • magnetdata 저장
  • 각각의 track 동심원이 여러개가 있고(안쪽 track, 바깥쪽 track)
  • track은 또 sector로 나누어져 있다
  • cylinder: 어느 위치에 있는지 나타내고
  • sector에 data저장
  • disk headdataread, write
  • disk head는 같은 cylinder를 가리키게 된다

✅ Disk Management

☑️ Physical Formatting(🟰 low-level formatting)

  • 디스크를 컨트롤러가 read, write할 수 있도록 sector들로 나누는 과정
  • sectorheader실제 data(보통 512bytes) ➕ trailer로 구성
  • headertrailersector를 관리하기 위한 정보
    • sector number, ECC(Error Correcting Code)등의 정보 저장
    • ECC: 데이터를 축약한 코드
    • controller가 직접 접근하고 운영

☑️ Paritioning

  • 디스크를 하나 이상의 cylinder그룹으로 나누는 과정
  • OS는 이것을 독립적 disk로 취급(logical disk)

☑️ Logical Formatting

  • 파일 시스템을 만드는 것
  • FAT, inode, free space등의 구조 포함
  • 먼저 디스크를 Paritioning하고, 그 안에 각각 파일 시스템을 설치
  • 예를 들어 하나의 cylinder그룹은 FAT으로 쓰고, 다른 그룹은 swap area로 쓰고…

☑️ Booting

  • 컴퓨터 전원을 켰을 때 디스크를 불러오는 방법
  • 메모리에 옆에 ROM이 있고(involatile, 비휘발성)
  • ROM에 있는 small bootstrap loader의 실행
  • small bootstrap loader: 디스크의 sector 0에 있는 기계어를 실행해라
  • 즉, sector 0(boot block)load하여 실행
  • sector 0full bootstrap loader program
  • sector 0에는 디스크에서 OS의 위치를 찾아 메모리에 올리라고 되어 있음
  • OS를 디스크에서 load하여 실행

✅ Disk Scheduling

☑️ Disk Access time의 구성

  • 디스크에서 정보를 찾아오는데 걸리는 시간을 구성하는 요소들

  • ✔️ Seek Time
  • 디스크 헤드를 실린더로 움직이는데 걸리는 시간
  • 가장 많은 시간을 차지한다

  • ✔️ Rotational Latency
  • 헤드가 원하는 섹터에 도달하기까지 걸리는 시간
  • 디스크가 회전해서 헤드랑 원하는 정보가 만나는 시간

  • ✔️ Transfer Time
  • 실제 데이터 전송 시간
  • 실제로 디스크에서 데이터를 read, write하는 시간

☑️ Disk bandwidth

  • 단위 시간 당 전송된 바이트 수

☑️ Disk Scheduling

  • seek time을 최소화하는 것이 목표
  • 즉, 헤드 이동 거리(시간)를 줄이는 것이 중요한 목표
  • seek time 🟰 seek distance

📌 FCFS

  • disk queue에 먼저 들어온 순서대로 디스크에서 read, write

Image

📌 SSTF

Shortest Seek Time First

  • 현재 디스크 헤드에서 제일 가까운 위치 먼저 간다
  • 즉 seek time이 제일 빠른 순서대로 처리
  • 👎🏻 starvation 문제

Image

📌 SCAN

disk arm은 요청에 따라 달라지지 않고
그냥 자신의 갈 방향을 쭉 가면서 요청 처리

  • disk arm이 디스크의 한쪽 끝에서 다른쪽 끝으로 이동하며
  • 바깥쪽 실린더에서 ➡️ 안쪽 실린더
  • 가는 길목에 있는 모든 요청을 처리한다
  • 다른 한쪽 끝에 도착하면 역방향으로 이동
  • 또 오는 길목에 있는 모든 요청을 처리
  • 다시 반대쪽 끝으로 이동한다
  • 엘레베이터와 비슷
  • 👎🏻 실린더 위치에 따라 대기 시간이 다르다
    • 👎🏻 한쪽 끝에 있는 요청이 중간에 있는 요청보다 좀 불리함

Image

📌 C-SCAN

  • 실린더 위치에 따라 대기 시간이 차이나는 문제 해결위해 등장
  • 헤드가 한쪽 끝에서 다른쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리하는 건 동일
  • 다른쪽 끝에 도착했으면
  • 곧바로 다시 출발점으로 이동
  • 👍🏻 SCAN보다 균일한 대기 시간 제공
  • 👍🏻 대기시간 편차를 줄인다

Image

Image

📌 N-SCAN

  • SCAN처럼 왔다갔다 하면서 요청을 처리하지만
  • 출발하기 전 queue에 들어온 요청들만 처리
  • 이동하는 도중에 queue에 들어오는 요청들은 무시하고 지나갔다가
  • 돌아오는 길에 처리
  • 👍🏻 대기시간 편차를 줄인다
  • 👍🏻 먼저 들어온 요청이 먼저 처리된다

📌 LOOK

  • 한쪽 방향으로 가다가 더 이상의 요청이 없으면
  • 그 방향 끝까지 가는게 아니라
  • 요청까지만 가고 반대 방향으로 turn
  • 🆚 SCAN이었으면 끝까지 가고 turn

📌 C-LOOK

  • C-SCAN처럼 한 방향으로 요청을 처리하다가
  • 어느 요청 이상으로 요청이 없으면 그 방향 끝까지 가지 않고 반대 방향으로 turn

  • 그림에서처럼 183번 이상 요청이 없으므로 199번까지 가지 않고 turn
  • 14번 밑으로 요청이 없으므로 turn
  • 🆚 C-SCAN이었으면 0까지, 199번까지 갔음 Image

✅ Disk Scheduling Algorithm의 결정

  • SCAN, C-SCAN을 응용해 만든 알고리즘이 ` LOOK, C-LOOK`
  • 파일 할당 방법에 따라 디스크 요청이 영향을 받는다
  • Disk Scheduling Algorithm은 필요한 경우 다른 알고리즘으로 쉽게 교체할 수 있도록
  • OS와 별도로 모듈로 작성되는 것이 바람직하다

✅ Swap Space Management

  • ✔️ Disk를 사용하는 두 가지 이유
  • memory의 volatile한 특성 ➡️ 영구적인 내용을 저장하는 file system
  • 프로그램 실행을 위한 memory 공간 부족 ➡️ swap space(swap area)
  • 💡 용도가 다르니, 관리하는 방법도 file systemswap area가 달라야 한다!

  • ✔️ Swap-space
  • virtual memory system에서는 디스크를 memory연장 공간으로 사용
  • file system내부에 둘 수도 있으나
  • 별도 partition사용이 일반적이다
    • 공간 효율성보다는 속도 효율성이 우선시된다
      • 어짜피 swap area는 전원 끄면 날아가는 내용이니까 공간을 효율적으로 저장할 필요는 크게 없음
    • 일반 파일보다 swap은 훨씬 짧은 시간만 존재하고, 자주 참조됨
    • 따라서 block의 크기 및 저장 방식이 일반 file system과는 다르다
    • file system보다 훨씬 큰 뭉치로 데이터를 read, write

Image

✅ RAID

Redundant Array of Independent Disks

  • 여러 개의 디스크를 묶어서 사용

☑️ RAID의 목적

  • 👍🏻 디스크 처리 속도 향상

    • 여러 디스크에 block의 내용을 분산 저장
    • 병렬적으로 read, write
    • 각각의 디스크에서 1/n씩 조금씩 읽어와서 모으기
    • 하나의 디스크에서 왕창 읽어오는 것보다 효율적
    • interleaving, striping(쪼개서)
  • 👍🏻 신뢰성(reliability)향상

    • 동일 정보를 여러 디스크에 중복 저장
    • 하나의 디스크가 고장! failiure시 다른 디스크에서 읽어온다
    • mirroring, shadowing
    • 단순한 중복 저장을 해도 되고,
    • 단순 중복은 최소화하고
    • 일부 디스크에 parity저장
      • parity: 일종의 축약 정보
      • 3개 중 1개 디스크가 고장나도 2개의 디스크와 parity를 사용해 복원 가능
    • parity사용으로 공간 효율성을 높일 수 있다

This post is licensed under CC BY 4.0 by the author.