Mass-Storage

Mass Storage는 흔히 말하는 세컨더리 스토리지이다. 하드디스크, SSD, RAM 디스크 등등이 존재한다.

  • 세컨더리에 파일을 저장 삭제, 프로그램 실행 등등을 운영체제의 서브시스템 중 하나인 파일 시스템이라 부르는데, 어떠한 경우에는 램을 디스크처럼 써서 동작하는 프로그램도 있다. 따라서 전원을 껐다 키면 데이터 내용이 다 날라간다.

  • Disk Attachment 에는 총 두 가지 방법이 있다.

    • Host attached via an I/O port. 흔히 사용하는 I/O 포트에 물리적인 연결로 디스크를 사용하는 방법이다.
    • Network attached via a network connection. 물리적인 연결이 아닌 네트워크로 멀리있는 디스크를 사용하는 방법이다.

Network attached (<-> Host attached)

NAS ( Network-Attached Storage ) : File level access

ip 네트워크로 저장소를 만든다. 여러 사용자가 공유 데이터를 사용할 수 있도록 만든 것으로. 그룹별로 공동 작업할 때 nas를 주로 사용한다

image

SAN ( Storage-Area Network) : Block level access

서버, 데이터 센터에 렉을 배치한다. 렉의 뒤에서는 네트워크 형태로 디스크들이 연결되어있다.

NAS는 파일 단위로, 하나의 파일 시스템이 라우트된 형태이며, SAN은 블럭 단위로, 하나를 큰 디스크로 생각해서 0번, 1번으로 블락으로 생각한다.

image


image

HDD

  • Seek : 헤드가 원하는 트랙으로 이동하는 것. 기계적 움직임. 가장 시간이 오래걸린다
  • Rotation : 원하는 섹터가 돌아서 내 위치로 오는 것
  • Transfer : 헤더 아래의 데이터를 읽는 것

image

Seek Algorithm

Seek Time 은 물리적으로 작동하기에 무엇보다 오버헤드가 가장 크다. 따라서 어떻게 Seek 하는 지가 성능에 매우 큰 영향을 미친다. 다음은 Seek를 위해 헤더를 움직이는 알고리즘이다.

FCFS

모든 알고리즘의 가장 처음에 해당하는 데이터가 도착한 순서대로 읽어나가는 방식이다. 당연히 매우 공평하지만 성능을 고려하지 않았기에 매우 성능이 안좋다.

image

SSTF (Shortest Seek Time First)

SJF와 비슷하게 현재 위치에서 가장 가까운 곳부터 찾아 읽어나간다. 디스크는 읽어야할 데이터를 미리 알고 있어서 사용할 수 있는 방식이다. 하지만 제일 끝단은 우선순위가 너무 낮다는 문제가 있다.

image

SCAN

한 방향으로 seek한다. 처음 위치에서 가장 왼쪽에 도착할 때까지 다 읽고, 가장 왼쪽에 도착하면 오른쪽 끝까지 쭉 다 읽는 방식이다.

image

C-SCAN

SCAN에서는 가운데 부분은 헤드가 지나가는 횟수가 높아 이득을 본다. 따라서 SCAN에서 끝단에 도착하면 다시 반대편 끝단으로 이동해 같은 방향으로 읽어나가는 방식이다. 따로 계산할 필요가 없지만 최대 최소로 이동하는 것이 아니라 끝단에서 끝단으로 이동하는 것이 쓸데없는 오버헤드이다.

image

C-LOOK

바로 위에서 말한 C-SCAN에서 가장 끝단에서 끝단으로 이동하지 않고 읽어야할 데이터에서 최대/최소로 이동한다.

image

일반적으로는 SSTF 를 사용하지만 디스크 요청이 매우 많은 경우에는 SCAN 성능이 우수하다.

Disk Controller ( I/O Controller)

운영체제가 하던 일이 컨트롤러에서 하드웨어적으로 가능해져 옛날보다 매우 우수해졌다. Read-ahead / Caching/ Request reordering … 등이 가능하다

Swap-space management

스와핑은 프로세스 전체를 디스크나 메인 메모리로 옮기는 작업으로 사용 가능한 물리 메모리가 매우 작을 때 활성화 되며 사용 가능 메모리를 만들기 위해 프로세스들은 메모리에서 스왑 공간으로 이동 된다. 대부분의 현재 운영체제들은 이러한 방식이 아닌 스와핑과 가상 메모리 기법을 이용하여 페이지를 스왑한다.

윈도우는 파일 시스템에 일반 파일로 저장하지만 리눅스는 별도의 파티션을 나눠 Swap space 를 한다.

RAID (Redundant Array of Inexpensive Disks)

Multiple Disks는 디스크가 여러 개 존재하는 것이다. RAID 는 여러 개의 디스크를 하나의 디스크처럼 사용하는 것이다.

NAS에서 많이 쓰인다. 비싸지 않은 디스크를 많이 redundant하게 해서 하나의 큰 디스크처럼 쓰겠다는 의미이다. 그러면서 신뢰성과 성능을 잡는 방법이다.

image

  • 신뢰성
    • Mirroring(shadowing) : 하나의 파일을 저장할 때 다른 디스크에 똑같이 백업 파일을 만드는 것이다.
    • Parity or error-correcting codes : 파일을 저장할 때 파일의 변질 유무를 판별하기 위한 코드를 사용한다.
  • 성능
    • Data striping
      • bit-level(block을 각 하드디스크만큼 나눠서 저장하는 것)
      • block-level(block 단위로 하드디스크에 저장하는 것)
      • 한번 Seek 해서 많이 읽는 것이 성능이 좋으므로 Block level이 성능이 더 좋다.

RAID 0

신뢰성은 고려하지 않고 Block-Level Stripping 을 했다. 신뢰성보다는 성능이 중요할 때 사용할 수도 있다.

image

RAID 1

성능보다 신뢰성이 중요한 경우. 하나하나 모두 미러링을 한 경우이다.

image

RAID 2

Bit-level Striping. 신뢰도를 위해 Error Correcting Code을 추가하였다. 0~4 까지의 3개의 디스크가 고장나더라도 나머지로 복구시킬 수 있다.

image

RAID 3

Bit-level에서 신뢰도를 위해 하나의 패리티만 사용했다. 디스크 중 하나가 고장나면 복구할 수 있지만 두 개 이상 고장나면 복구할 수 없다.

image

RAID 4

Block-Level striping + 패리티. 블락 중 하나가 고장나도 복구 시킬 수 있다. Read시에는 상관없지만 Write 하면 패리티도 같이 수정해서 Write 해야한다. 따라서 4번 디스크는 계속 계산한 패리티를 써야하므로 너무 busy하다.

image

RAID 5

위의 문제를 개선해 패리티도 Striping 했다. Write 할 때 하나의 패리티 디스크만 바쁘지 않는다.

image

RAID 6

자원이 충분하면 패리티를 더 사용해서 Error correcting codes 로 사용할 수 있다.

image

RAID 0+1

Block-level striping 하고! 그대로 미러링한다. 하지만 2번 디스크가 고장나면 왼쪽 RAID 0 전체가 고장났다 0,1,3번도 사용할 수 없다.

image

RAID 1+0

미러링을 한 후에 Block-level Striping 을 한다. 2번이 동작하지 않으면 두 번째 R1이 동작하지 않는 것이다. 이외에 디스크는 동작해서 성능이 더 좋다.

image

업데이트:

댓글남기기