Mass Storage Structure
종류
- HDD: 하드 디스크 드라이브로, 플래터 위에 데이터를 저장하는 방식이다.
- SSD: 솔리드 스테이트 드라이브로, 플래시 메모리를 이용해 데이터를 저장하는 방식이다.
- RAM Disk: RAM을 이용하여 가상 디스크를 생성하여 사용하는 방식이다.
- Magnetic Tape: 자기 테이프를 이용하여 데이터를 저장하는 방식이다.
Disk Attachment
- Host Attached: I/O 포트를 이용해서 슬롯에 바로 디스크를 붙이는 방법이다. IDE와 SCSI가 존재한다.
- IDE: 일반 PC에 사용하는 방식이다.
- SCSI: 서버와 같은 신뢰성이 중요한 장치에 붙이는 규격이다.
- Network Attached: NAS, SAN이 있다.
- NAS (Network-Attached Storage): 여러 개의 디스크를 넣을 수 있는 하드웨어를 네트워크에 연결시켜서 클라이언트가 네트워크를 통해 접근할 수 있도록 구현한 스토리지이다. NAS는 하나의 파일 시스템과 같이 동작하며 파일 레벨로 엑세스할 수 있다. 실제 컴퓨터에 붙어있는 스토리지처럼 사용하며 NFS, CIFS 등의 파일 시스템을 사용한다.
- SAN (Storage Area Network): 스토리지를 연결한 네트워크로 NAS보다 큰 단위이다. 네트워크 자체가 하나의 스토리지이며 전용의 interconnection 네트워크를 사용한다. 대량의 데이터를 빠르게 처리해야 하는 데이터 센터 등에서 사용된다. Fiber Channel(광 채널)을 사용하고 블록 레벨로 데이터를 read/write한다. SAN 자체가 하나의 큰 파일 시스템이라고 생각할 수 있다. 예를 들어, 넷플릭스처럼 대량의 영상 데이터를 SAN으로 저장한다.
- 분류: NON IP이면서 direct로 연결되는 IDE, SCSI가 있고 Fiber Channel로 연결된 SAN이 있다. 블록 단위로 동작해서 더 빠르지만 파일 시스템을 OS에서 서포트해줘야 한다. IP 네트워크에는 NAS가 있다. NAS는 별도의 파일 시스템이 존재해서 파일 단위로 접근 가능하다. 중소규모의 기업에서도 많이 구현해서 사용한다.
HDD
- 플래터가 여러 장 존재하고 그 위에 데이터를 쓰는 영역인 트랙이 존재한다. 트랙에 데이터를 쓰는 최소 단위는 섹터이다. 실제 데이터를 읽는 부분이 헤더이며, 헤더와 연결된 부분이 암(Arm), 암을 움직이는 암 어셈블리 등으로 구성되어 있다. 플래터는 스핀들이라는 공용의 축을 통해서 돌아간다. HDD는 충격에 약하고 bad block이 잘 발생한다. 피지컬과 로지컬 영역을 나눠서 사용하는데, 디스크의 섹터 등은 low level로 피지컬 영역이고 filename, record 등 higher level로 abstraction해서 사용한다. 실린더, 트랙, 섹터 등의 정보를 가지고 데이터를 찾는 과정을 전부 OS가 처리하는 것은 옛날 방식이고 요즘은 디스크 컨트롤러에서 처리하며 OS의 오버헤드가 줄어들어 성능이 향상된다. HDD I/O에서는 Arm seek time이 성능에 가장 중요하다. Rotation, transfer 속도가 미치는 영향은 아주 적다. seek time을 최대한 줄이기 위한 disk scheduling 알고리즘이 존재한다.
- Disk Scheduling
- FCFS (First-Come, First-Served): 들어온 순서대로 처리한다. 가장 fair하지만 성능이 안 좋다.
- SSTF (Shortest Seek-Time First): SJF와 비슷하지만 그와 달리 예측이 가능하다. 제일 가까운 데이터 블록으로 arm을 움직인다. 큐가 고정되어 있으면 starvation이 발생하지 않지만 새로 계속 들어온다면 starvation이 발생한다. 실제로는 개량된 버전의 SSTF를 디스크에서 가장 많이 사용한다.

- SCAN: 엘리베이터 알고리즘이라고도 하며, 한쪽 방향의 끝까지 갔다가 반대편의 끝까지 가는 방법이다. 이 방식은 waiting time이 길어질 수 있다.
- C-SCAN: SCAN과 달리 waiting time이 균일하다. 한쪽 방향으로 끝까지 진행하고 암을 반대쪽 끝으로 초기화하는 방법이다.
- C-LOOK: 끝까지 가는 것이 아니라 읽을 데이터가 존재하는 마지막 위치까지 이동하는 방법이다. C-SCAN을 개량한 방법이다.
Disk Controller 기능
- Read Ahead: spatial locality를 고려해서 회전하는 방향의 앞 부분도 미리 읽어서 메모리에 올려준다.
- Caching: 최근에 사용된 데이터를 캐시하여 성능을 향상시킨다.