서울대학교 컴퓨터공학과 김진수 교수님의 "고급 운영체제" 강의를 필기한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

간단한 역사

  • 1956, RAMAC: 최초의 HDD (가격은 $10000/Mb…)
  • 이전의 punch card 는 mechanical 방식
  • Tape 나 HDD 는 magnetic 방식
  • CD, DVD, BlueRay 가 optical 방식
  • 90년대까지는 magnetic 혹은 optical 방식이었고 얘네는 전부 뭔가를 물리적으로 움직이는 것을 요했다.
  • Electrical 방식은 전기가 끊어지면 없어지기 때문에 volatile (short-term) 방식으로 정보를 저장하는 것만이 가능해 보였지만
  • Flash 가 electrical 방식으로 작동하며 반도체에 전자를 가두는 방식으로 long term data persistent (non-volatile) 를 일궈냈다.

HDD 구조

  • Platter (Disk): 원판, 앞뒤로 기록 가능
    • 여기의 한 표면을 Surface 라 부름
  • Arm: 읽어들이는 팔
    • 여기에 달려있는 실제로 데이터를 읽는 놈을 Head 라고 한다.
      • HeadSurface 마다 존재 (즉, Platter 마다 두개)
    • 이걸 움직이는데 시간이 오래 걸리고, 이 움직이는 시간을 Seek time 이라 부름
  • Track: 원판의 한 원
  • Sector: Track 내의 한 구역으로 데이터를 읽어들이는 단위 (1 sector = 512byte)
  • Spindle: 축
  • Cylinder: 같은 반지름의 Track 의 묶음 (여러 Platter 에 걸친)
    • 같은 Cylinder 에 있는 데이터는 Head 를 움직이지 않아도 되기 때문에 빠르게 읽어들일 수 있다.
    • FAST Filesystem 의 핵심 아이디어임: 하나의 파일 및 그의 메타데이터는 하나의 cylinder group 에 넣어서 빠르게 rw 되게 하자.
  • HDD 에도 CPU 와 RAM 이 있어서 작동을 제어한다.

Addressing

CHS

  • 여기서 CHS
    • Cylinder no: 몇번째 트랙에 있냐
    • Head no: 몇층에 있냐
    • Sector no: 트랙에서 몇번째 sector 에 있냐
  • 이렇게 3차원 정보를 가지고 HDD 내의 데이터가 어디 저장되어 있는지 (데이터의 주소) 명시
  • 옛날에는 트랙 당 sector 의 개수를 같게 하고 sector 당 byte 도 같게 해서 track 의 길이가 더 길어도 같은 양의 정보를 저장하게 했는데
    • 따라서 반지름이 작으면 밀도가 높아서 데이터가 깨질 확률도 커짐
  • 요즘은 ZBR (Zone Bit Remapping) 이라는 기술이 나와서 track 의 밀도를 비슷하게 함
    • 즉, track 의 반지름이 크면 그만큼 sector 도 많게
  • 따라서 이에 따라 CHS 은 더이상 못쓰게 되었다

LBA

  • CHS 의 3차원 스킴이 아니고
  • 그냥 1차원 배열로 처리해서
  • 모든 sector 에 sequential 하게 번호를 부여하고 그 번호를 가지고 접근
  • LBA 를 가지고 HDD 의 컨트롤러 내에서 어디에 있는지 계산을 해서 데이터를 가져오는 방식을 취함
  • 따라서 LBA 를 가지고는 OS 에서 데이터가 어디 있는지 알 수 없어서 (OS 는 HDD 의 컨트롤러가 뭔짓하는지 모르기 때문에) FAST Filesystem 처럼 데이터의 위치를 활용해 성능 최적화를 하는 것이 힘들어짐
  • 그래서 보통 인접한 LBA 를 접근할 때에는 성능이 잘 나오게끔 HDD 를 설계하는 것이 convention 이 되었다고 한다
    • 즉 data 를 sequential 하게 읽으면 성능이 최대가 됨

Metrics

  • Seek time: head 를 움직이는 시간
    • Average seek time은 1번 cylinder 부터 마지막 cylinder 까지 읽었을 때의 평균이고 수학적으로 max 값의 1/3 이 된다고 한다.
  • Rotational delay (Rotational laytency): 돌리는 시간
  • Transfer time: 읽은 정보를 host 로 보내는 시간
  • 위에서 말한 것처럼, 얘네들 중에 Seek time 이 제일 오래걸린다.

HDD Interface

  • SCSI 는 성능이 좋은 HDD 용 인터페이스, ATA 는 일반 사용자용
  • 원래는 디스크에 parallel 하게 저장 (접근?) 하는 것이 더 빠른 줄 알았는데 나중에 보니 sequential 하게 하는 것이 더 좋아서 SCSI 는 SAS, ATA 는 SATA 로 바뀌게 된다.

NCQ

  • NCQNative Command Queueing 의 약자로
    • 이전에는 command 를 선입선출 방식으로 처리해서 디스크의 회전 방향과는 무관하게 처리했지만
    • NCQ 는 한번에 32개의 command 를 모아서 디스크의 회전방향에 맞게 command 를 정렬해서 한번에 처리 한다
    • 배민의 알뜰배달 같은 것: 목적지로 가는 경로상에 있는 배달지를 한명이 다 모아서 가면서 처리
  • 다만 NCQ 가 효과가 있으려면 command 가 음청 들어와서 queue 가 꽉 차있어야 하지만 SATA 에서는 그런 경우가 그리 많지 않았고, 따라서 SATA 에서는 크게 성능 차이가 없었다고 한다.

SMR Disk

  • SMR (Shingled Magnetic Recording) <-> CMR (Conventional Magnetic Recording)
  • Disk 는 read 를 위해 필요한 head 의 너비에 비해 write 를 위해 필요한 head 의 너비가 더 크다.
  • 그래서 일반적으로는 write 에 필요한 너비로 track 의 너비를 산출했는데
  • SMR 에서는 한 트랙을 write 한 다음에 다음 track 을 write 할 때에는 이전 트랙의 read 부분만 남기고 나머지는 덮어쓰는 식으로 write 를 한다.
  • 이렇게 하면 track 너비가 줄어들어 공간을 절약하게 되니까 더 많은 데이터를 저장할 수 있고
  • 기존 방식대로 random read 가 가능하다.
  • 하지만 write 공간을 덮어쓰는 방식으로 write 하기 때문에 in-place update 가 안되고 데이터가 변경되면 다시 overwrite 해야 한다는 단점이 있다.
  • 약간 ssd 랑 특성이 비슷해졌죠