본문 바로가기
Computer Science/운영체제

Operating System - Ch11. Mass storage structure

by NCTP 2022. 6. 18.

본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...!

 

 

 

Mass storage는 다음과 같은 것들이 있다.

- HDD (Hard Disk Drive)

- SSD (Solid State Disk)

- RAM disk

- Magnetic tape

 

이러한 저장장치를 연결하는 방법은 두 가지가 있다.

Host attached: I/O 포트를 통해 붙인다. 컴퓨터를 조립할 때 SATA 케이블이나 M.2 슬롯에 넣는 물리적인 연결.

 - IDE: 우리가 PC에서 사용하는 인터페이스

 - SCSI: 서버같이 신뢰성과 기능이 중요한 컴퓨터에 사용하는 인터페이스

 

Network attached: 네트워크를 통해 붙인다. 

 - NAS(Network-Attached Storage): 4~5베이 이상의 하드를 꽂을 수 있는 장치를 네트워크에 연결해서 사용한다. NFS나 CIFS같은 파일 시스템을 사용하는데, IDE, 즉 우리가 흔히 사용하는 PC의 저장장치처럼 File-level access이다. 

 - SAN(Storage-Area Network): 저장장치를 연결한 네트워크를 의미한다. 네트워크 자체가 하나의 저장장치인 셈. 나스보다도 규모가 크다. 대량의 데이터를 빠르게 처리해야 하는 서버나 데이터 센터에서 많이 사용한다. SCSI나 Fibre channel로 사용되고, Block-level access이다. Storage array 장치에 아주 많은 하드를 꽂아넣고, 네트워크 (Fibre channel)를 통해 연결해서 사용한다.

 

Non-IP Networks: IDE/SCSI, SAN

IP Networks: NAS

 

HDD 하드디스크

 

HDD Structure

디스크는 물리적인 장치며 당연히 물리적인 특징을 갖는다. 

 

디스크에서 데이터를 읽으려면 어느 트랙 어느 섹터를 읽을 지를 정해야한다. 옛날에는 운영체제가 처리했는데, 요즘에는 운영체제는 명령을 내리고 disk controller가 처리해준다. 

 

디스크의 성능은 seek time에 따라 좌우된다. 이 seek time을 최소화하는 것이 Disk scheduling이라고 한다.

 

Disk scheduling

- FCFS: 항상 나오는 아주 공평한 알고리즘, 성능이 좋지 않다.

- SSTF (Shortest Seek Time First): Seek time이 가장 짧은 방향으로 움직이는 알고리즘. seek time이 길어지는 경우 기아가 발생할 수 있다. 대부분의 디스크가 SSTF의 개선된 버전을 사용한다.

- SCAN (elevator algorithm): 한쪽 방향으로 끝까지 가고, 반대 방향으로 끝까지 가면서 처리하는 알고리즘.

- C-SCAN: 한쪽방향으로 끝까지 가고, arm을 반대쪽 방향의 끝으로 가져간 다음 다시 한쪽방향으로 끝까지 가는 알고리즘.

- C-LOOK

 

디스크 스케줄링 알고리즘은 디스크에의 접근이 많을 경우 효과가 좋다. 

 

Swap-space Management

Swap-space는 virtual memory 사용시 필요하다. Physical memory가 부족할 때 디스크를 메모리처럼 사용한다고 했는데, 이 때 사용하는 공간을 의미한다. 리눅스는 따로 전용 공간을 남겨놓고, 윈도우즈는 파일로 관리한다. (윈도우즈는 C드라이브에 메인 메모리의 두 배의 공간은 남겨둬야 성능이 잘 나온다!)

 

 

RAID (Redundant Array of Inexpensive Disks)

RAID는 여러 개의 디스크를 효율적으로, 신뢰성 있고, 좋은 성능으로 사용할 수 있도록 하는 기술이다.

File system이 아니라 Storage system이다.

 

신뢰성을 높이는 두 가지 방법

- Mirroring(shadowing): 데이터를 다른 디스크에 복제해놓는 기법이다. 다른 디스크에 같은 데이터를 저장하면 디스크에 문제가 생겼을 때 다른 디스크에서 정보를 읽어올 수 있다.

- Parity or error-correcting codes: 다른 partition에 데이터 복구를 위한 error-correcting codes나 parity bit를 저장해놓는 기법이다. mirroring 기법보다 디스크 용량을 덜 먹지만 연산이 필요해서 오버헤드가 크다.

- 여러 디스크 안쓰고 디스크 하나만 쓰기.

- Mirroring 과 Parity or error-correcting code는 중복 사용이 가능하다.

 

Parallelism을 이요한 성능 개선하기

Data striping: 파일을 block 단위로 쓰고 읽는 경우 여러 디스크에 block을 나눠 저장하는 것, bit-level은 block보다도 작게, bit단위로 여러 디스크에 나눠 저장하는 것이다. 여러 디스크에 나눠 저장된 파일을 병렬적으로 읽기/쓰기 해서 성능을 높이는 기법이다. bit-level data striping은 spatial locality에 따라 성능이 높아진다. 

 

RAID Levels

레이드의 종류를 의미한다.

- RAID 0: 신뢰성은 고려하지 않고 오직 성능만을 고려하는 방식으로 Block-level data striping을 적용한 방식이다.

- RAID 1: Mirroring만 하는 방식으로 신뢰성만을 고려하는 방식이다. 마찬가지로 Block-level data striping을 적용한다.

- RAID 2: 성능도 높이고 신뢰성도 높이는 것을 고려하는 방식이다.  Memory-style error-correcting codes(ECC)를 사용한다. Bit-level data striping을 적용한다. ECC가 연산이 많이 필요하고 bit-level data striping이라 잘 안쓰는 RAID Level이다.

- RAID 3: Parity만 적용하는 방식이다. (Bit-interleaved parity) RAID2에 비해 오버헤드를 줄였지만 마찬가지로 안쓰이는 기술이다.

- RAID 4: RAID3 처럼 Parity를 사용하면서 Block-level data striping을 적용하는 방식이다. 성능은 RAID 0만큼 좋고 신뢰성도 좋다. 한 디스크에 parity를 몰아서 저장했기 때문에 어느 한 블록이 수정될 때마다 parity도 반드시 수정해주어야한다. 따라서 parity에 대한 접근이 너무나 많아지고 bottleneck이 발생해 성능이 저하된다.

- RAID 5: parity를 분산시켜서 RAID4의 문제점을 해결한 방식이다. Block-level로 data striping도 하고 parity도 striping해준다. 

- RAID 6: RAID 5에서 신뢰성을 높인 방식. Parity대신 ECC를 사용한다. RAID 5에 비해 디스크에 대한 오버헤드가 커지는데, 어차피 저렴한 디스크 한 장 더 붙이는 수준이라 큰 문제는 되지 않는다.

- RAID 0+1: RAID 0를 먼저 수행하고,  RAID 1도 수행하는 방식. 원래 파일과 미러링된 파일 모두 RAID 0를 통해 Block-level striping을 적용한다.

- RAID 10 (RAID 1+0): RAID 1으로 미러링된 것들을 RADI 0로 묶는 방식. RAID 10이 RAID 0+1보다 좋다. 그 이유는 RAID 0+1에서는 RAID0로 처리된 파일의 블럭 하나가 손상되면, RAID1으로 묶여있기 때문에 잘못된 블럭이 있는 디스크 를 포함해 RAID0로 묶인 디스크들 전체에 문제가 있다고 판단하게 된다. 하지만 RAID 10은 더 작은 단위로 미러링되어있고 이들이 RAID 0로 묶여있기 때문에, 문제가 있는 블럭의 디스크만 처리해주면 된다. 즉 신뢰성에 문제가 생겼을 때 사용 가능한 디스크의 비율의 차이가 난다.

 

 

 

 

 

 

 

댓글