Mass-Storage Structure

k_bell·2024년 6월 15일
1

운영체제

목록 보기
12/15
post-thumbnail

Mass Storage (대용량 저장 장치) 는 흔히 우리가 아는 HDD, SDD와 같은 비휘발성 메모리를 의미한다. 비휘발성이란, 시스템의 전원이 꺼져도 데이터가 날아가지 않고 유지되는 것을 의미한다. 따라서 컴퓨터는 우리가 저장한 파일, 프로그램 등이 유실되지 않고 영구적으로 저장할 수 있는 대용량 비휘발성 저장 장치를 제공한다.

이러한 mass stroage의 특징은 단위 용량 당 가격이 저렴하지만, 메인 메모리보다 접근 속도가 느리다는 것이다. 그래서 우리는 mass storage에 프로그램을 저장시켰다가, 프로그램을 실행할 때 메모리로 로딩해야 하는 것이다. 그렇지 않으면 CPU에서 디스크까지 접근하는 시간이 너 ~ 무 오래 걸리기 때문이다.

Hard Disk Drive

HDD는 자기적으로 코팅된 platter 에 데이터를 저장한다. 사진에서 보이는 동그란 원판이 플래터이다. 플래터는 논리적인 원형 track 으로 다시 나누어지며, 트랙은 sector 라는 단위로 다시 나뉘어진다.

sector는 고정된 사이즈를 가지고 있는데, 일반적으로 512 bytes 또는 4 KB의 크기를 가진다. 바로 이 섹터가 HDD에서 데이터를 읽고 쓰고, 전송하는 단위이다.

이미지에서 보이는 read - write header 가 기계적으로 위아래로 움직이고 플래터가 회전하면서 데이터를 읽고 쓴다.

https://www.youtube.com/watch?v=ojGvHDjHPb4

위의 영상에서 7200 RPM의 HDD가 실제로 작동하는 모습을 확인할 수 있다.

Performence

하드 디스크의 성능에 영향을 미치는 요인에는 Transfer RatePositioning Time (Random-Access Time) 이 있다.

Transfer Rate은 HDD가 sector를 읽고 전송하는 시간이다.

Positioning Time은 read-write header가 읽어야 할 sector를 찾는 시간을 의미하며 seek timerotational latency로 구분된다.

  • seek time
    : disk arm이 읽고자 하는 sector가 있는 cylider까지 움직이는 시간을 의미한다.

    cylinder란 하나의 track 구분하는 경계이다.

  • rotational latency
    : 읽고자 하는 sector를 disk head로 위치시키기 위해, 스핀들 모터가 회전하는 시간이다. (플래터가 돌아가는 시간)

Average Latency = Average Seek Time + Average Rotational Latency

Average I/O Time = Sum of
1. Access Time = seek time + rotational latency
2. Amount to Transfer / Transfer Rate = transfer time
3. Controller Overhead

예제를 풀면서 HDD의 I/O Time을 직접 구해보도록 하자.

  • Transfer a 4KB block on a 7200 RPM disk.
    - 5 ms seek time.
    - 1 Gb/s transfer rate
    - 0.1 ms controller overhead
  • Transfer Time = ?
  • Average I/O Time = ?

Transfer Time부터 구해보면, 전송해야 될 용량은 4KB이고, 전송 속도는 1 Gb/s이다. 단위만 잘 맞춰준다면 크게 어려울 것이 없다.

4KB4KB / 1Gb/s=32KB/1GB/s=32/10242=0.031ms1Gb/s = 32 KB / 1 GB/s = 32 / 1024^2 = 0.031ms

그리고 Average I/O Time을 구하기 위해서는 rotational latency를 구해야 한다.

Rotational latency = 60000ms/7200/2=4.17ms60000ms / 7200 / 2 = 4.17ms

2 를 나누는 이유는 원하는 sector를 찾기 위해서는 180180^\circ만 회전하면 되기 때문이다. 그리고 단위를 맞추기 위해 1,000ms 를 곱하였다.

  • Average I/O time = 5ms + 4.17ms + 0.031ms + 0.1ms = 9.301ms

Nonvolatile Memory Devices

위에서 말한 것처럼, non - volatile (비휘발성) 은 전원이 꺼져도 데이터가 유지되는 메모리를 말한다. 그러면, NVM의 종류들을 간단하게 살펴보자.

  • Read - Only Memory (ROM)
    : ROM은 제조 과정에서 한 번 프로그래밍된 이후에는 변경할 수 없다.

  • Programmable ROM (PROM)
    : 한 번 프로그래밍이 가능하다.

  • Erasable PROM (EPROM)
    : 자외선을 이용하여 전체 메모리를 한 번에 지울 수 있다. (Bulk)

  • Electrically erasable PROM (EEPROM)
    : 전자적으로 지우는 것이 가능하다.

  • Flash memory
    : 부분적(block 단위)으로 지울 수 있는 EEPROM.

Flash memory - based NVM

  • Solid - State Disk (SSD)
    : 모두가 잘 아는 저장 장치이며, 기존의 HDD와 유사한 형태의 컨테이너이다.

  • USB driver

NVM은 HDD에 비해 더 신뢰성 있고, 빠른 접근 속도를 자랑한다. 기계적으로 움직여야 하는 부분이 없기 때문에, seek time과 rotational latency 가 발생하지 않는다.

하지만 그만큼 HDD에 비해 단위 용량 당 가격이 비싸며, 수명의 관리가 필요한 것이 단점이다. 그 이유는 블록을 지우는 횟수가 제한이 있기 때문인데, 약 100,000번 정도 지우게 된다면 수명이 다할 수 있다.

Solid State Disk (SSD)

SSD는 block 과 page로 구성된다. 블록은 32개에서 128개의 페이지를 가지며, 하나의 페이지는 512 byte 에서 4 KB 의 크기를 가진다. 데이터를 읽고 쓰는 단위는 페이지이지만, 지우는 것은 오직 블록 단위로만 가능하다. 또한 page 단위의 덮어쓰기가 불가능 하기 때문에, 페이지를 덮어쓸려면 반드시 블록을 지워야 한다.

또한 SSD에는 Flash Translation Layer라는 것이 있다. 일반적인 운영체제의 파일 시스템을 기반으로 하는 프로그램들은 디스크를 섹터 단위로 인식한다. 하지만 SSD는 페이지와 블록을 단위로 데이터를 저장하기 때문에 섹터 기반으로 인식하는 프로그램들에서 SSD를 올바르게 인식하기 위해서는 중간에서 이를 조율해주는 무언가가 필요한 것이다. 이것이 flash trnaslation layer 이며, MMU 와 비슷한 역할을 수행한다고 생각하면 된다. 가상의 논리적인 섹터를 생성하여 섹터 기반 프로그램들이 이를 통해 실제 SSD의 블록에 접근할 수 있도록 도와주는 것이다.

NAND Flash Controller

SSD는 페이지 단위로 데이터를 읽고 쓰며, 블록 단위로 지우는 것이 가능하다. 따라서 하나의 페이지를 덮어쓰기 위해서는 블록 전체를 지우고 다시 써야 한다고 했다. 그러나 하나의 페이지를 덮어쓰기 위해 블록 전체를 지우는 것이 과연 효율적인가?

"그렇지 않다."

따라서 SSD는 덮어쓰지 않고 데이터의 수정이 필요한 경우 그냥 새로운 페이지를 작성하게 된다. 그렇다면 하나의 블록 내에는 사용하는 페이지와 그렇지 않은 페이지들이 함께 공존하게 될 것이다. 이것을 SSD에서는 valid page / invalid page로 구분한다. 페이지에 저장되어 있는 데이터가 더 이상 사용되지 않는다면 유효하지 않은 페이지로 정의하는 것이다.

NAND Flash controller는 이러한 invalid page를 관리한다. 페이지들을 추적해서 해당 페이지가 사용되는지, 페이지에 저장된 데이터가 유효한지를 검사하고 valid / invalid 를 표기하는 것이다.

SSD에서 page를 계속 새로 쓰게 되면 invalid page가 블록 내에서 차지하는 비율이 높아지고, 저장 공간을 효율적으로 활용하지 못할 것이다. 이때, 등장하는 개념이 garbage collection 이다.

invalid 페이지가 많은 비율을 차지하고 있는 블록을 garbage collection은 invalid block 이라고 규정한다. 그리고 invalid block에 있는 유효한 페이지들을 유효한 블록으로 옮기는 과정을 수행한다. 따라서 이제 ivalid block 에는 invalid page만 남아있게 된다. garbage coolection은 이렇게 정리된 invaid block을 깔끔히 지워서 더 많은 저장공간을 효율적으로 확보할 수 있도록 한다.

0개의 댓글

관련 채용 정보