본문 바로가기

STUDY/운영체제

Secondary Storage Architecture

Disk Scheduling 

: 하드웨어 효율을 위해서 하드 디스크의 헤드 움직임을 줄이도록 스케줄링하는 것이다.

즉 스케줄링을 잘해서 디스크 seek time을 줄이는 것이 목표이다.

디스크의 구조

디스크는 arm이라고 불리는 축을 중심으로 헤드라고 하는 장치가 판을 돌며 read, write를 시도한다.

이때 데이터가 있는 트랙에 헤드가 위치하도록 찾아서 이동하는 시간이 바로 seek time이다. 우리나라 말로 하면 '탐구 시간'이다.

탐구 시간을 줄여야 효율이 좋다.

디스크 스케쥴링 알고리즘은 이 트랙을 찾는 순번에 대한 절차를 결정한다.


Disk Scheduling Algorithms

FCFS

: queue에 들어온 순서대로 이동한다.

이동거리는 sector 사이의 거리이다.

위와 같이 FCFS 알고리즘의 경우 총 640 이동거리가 발생한다.

효율이 그닥 좋지는 못하다.

 

SSTF (= Shortest Seek Time First)

: 현재 디스크 헤드와 가장 가까운 sector 부터 방문한다. SJF와 비슷한 원리이다.

이 경우 67번 sector에서 다음 이동을 결정할 때는 가까운 두개 간의 이동거리를 비교한다.

내가 그린 그림은 전혀 그렇지 않지만, 비교결과 37 sector가 더 가까우므로 37으로 이동한다.

 

가장 효율적이고 그렇기 때문에 최적인 알괴즘이다. (window, linux)

하지만 많은 양의 데이터가 들어온 경우에는 적용이 불리하다.

 

 

 

SCAN

: disk arm이 disk의 끝에서 다른 끝으로 이동하며 하던 일을 계속 진행한다. (end to end)

즉 scan하는 것 처럼 한쪽 방향으로 쭉 진행하고, 다시 다른 방향으로 쭉 진행하는 것이다.

53번 sector에서 시작하여 작은 방향으로 진행한다.

이때 queue의 끝 번호인 14에서 멈추지 않고, 디스크 자체의 끝인 0까지 내려간다.

그 후 다시 다른 끝 방향으로 진행하는 방식이다.

 

C-SCAN

: SCAN 방식 + 일방통행

SCAN 방식의 원리를 따르나 방향전환을 하는 SCAN 방식과 달리 C-SCAN 방식은 한쪽 방향으로만 읽기가 진행된다.

즉 끝에서 다른 끝으로 이동한 다음에 거기서부터 같은 방향으로 SCAN을 진행해나간다.

일방통행이 바로 C-SCAN의 핵심이다.

 

C-LOOK

: C-SCAN + 트랙의 끝

C-SCAN은 디스크 끝과 끝에서 이동한다. 하지만 C-LOOK은 디스크 끝이 아니라 트랙의 마지막에서 다른 트랙으로 이동한다.

 

트랙의 끝에서 다른 끝으로 이동한 다음 C-SCAN을 진행한다.

C-SCAN과 달리 트랙의 끝까지만 이동하는 것이기 때문에 절약되는 이점이 있다.

 


RAID

: Redundant Array of Inexpensive Disk

여러개의 하드 디스크를 하나처럼 사용하는 방식이다. 즉 데이터를 여러개의 하드디스크에 분산 저장하는 것이다.

예를 들어 1TB 하드 디스크를 사용하는 것이 아니라 500GB 두개를 사용하여 Bad Sector가 발생하여도 나머지 디스크에 저장된 정보를 바탕으로 복구를 할 수 있게 된다.

 

Improving reliability via redundancy

- mirroring (= shadowing)

하드 디스크가 4개라면 반으로 나눠서 2개는 데이터 저장 (읽기 및 쓰기), 나머지 2개는 백업용으로 데이터를 중복해서 저장한다. 

이 경우 bad sector와 같은 문제가 발생해도 완벽하게 복원이 가능하다.

하지만 하드 디스크가 많이 필요하다는 단점이 있다.

 

- Parity or error-correcting codes

 백업용 디스크는 하나만 생성한다.

데이터의 정보를 비트로 만들어서 정보를 저장한다. 디스크 하나가 고장나는 경우는 복구가 가능하지만 두개 이상이 동시에 고장나는 경우 복구가 어렵다는 단점이 있다.

 

Improving perfomance via parallelism (= striping)

data striping

: 여러개의 디스크에 데이터를 나눠서 저장하고 병렬적으로 동시에 읽으면 처리 속도가 빠르다. 즉 seek time이 줄어든다.

연속된 데이터를 여러 디스크에 RR 방식으로 저장하는 데 이때 두가지 선택지가 있다.

 

block level: block 단위로 다른 디스크에 RR 방식으로 저장

bits level: block 하나를 4개의 bit로 나누어서 다른 디스크에 저장

 

이를 바탕으로 구현한 여러가지 RAID 형태를 알아보자.


RAID-Levels

RAID 0

: striping 만 있고, redundancy 기능은 없다.

즉 신뢰도를 고려하지 않고 성능만 높이는 것이다.

각 디스크마다 데이터를 Round-Robin 방식으로 저장한다.

 

-> A 블록을 읽을 때 4개의 디스크에서 동시에 읽어오기 때문에 빠르다. (parallelism)

-> 백업 기능이 없기 때문에 신뢰도가 떨어진다. 즉 데이터가 날아가면 파일 전체를 읽을 수 없는 bad sector가 발생한다.

 

 

RAID 1

: 성능은 없고 mirroring 기능을 추가하여 복구 능력만 향상시킨 것이다. (= mirrored disk)

이때 하나의 디스크안에 블록을 다 몰아서 저장한다. 즉 striping 이 사용되지 않았다.

 

-> 0번 디스크가 통째로 날아가도 완벽하게 복구가 가능하다.

-> 데이터를 읽을 때 하나의 디스크로 읽는 것과 차이가 없다. 즉 병렬처리가 없기 때문에 여러개를 쓰는 의미가 없다.

성능보다 데이터의 신뢰가 중요할 때 사용된다.

 

RAID 2

: 성능과 신뢰도를 모두 고려

한 블록을 4개로 나누어서 저장한다. 즉 bit-level striping 이 적용되었다.

 

error connecting code disk(ecc)

: bit 들이 제대로 저장되어 있는지 아닌지 확인하는 Bit

따라서 bit 한개가 날아가도 나머지 bit를 통해 복구가 가능하다.

ecc bit가 총 3개이므로 4개 bit 중 3개까지는 날라가도 복구가 가능하다.

 

RAID 3

: bit-striping + parity bit

 

parity disk

-> disk 두개가 동시에 고장나는 일은 흔하지 않다. 따라서 백업 서버는 하나만 두자는 것이다.

 

 

이 또한 한 블록을 4개로 분산하여 저장하는 bit-level striping 이 사용되었다.

RAID 2와 달리 parity disk가 추가되어 자료가 맞는지 아닌지 판별하는 부분이 생겼다.

 

-> 하나가 고장나도 나머지 비트와 비교하여 유추가 가능하다.

-> 하지만 두개 이상에서 오류가 발생하는 경우 복구가 힘들다.

 

bit striping은 데이터를 읽고 쓸때 모든 디스크에서 읽기와 쓰기 동작을 수행해야 한다.

쓸때는 parity bit도 갱신해야하는 문제가 있다.

따라서 Bit level 말고 block level을 사용하자는 것이 RAID 4이다.

 

RAID 4

: block-striping + parity

block-level striping이 적용되었다.

즉 RAID 3의 단점을 해결하여 성능이 보다 업그레이드된 버전이다.

-> 그래도 디스크에 write 연산이 오면 parity disk의 갱신이 필요하다.

 

이렇게 매번 쓸때마다 parity bit를 갱신하는 것은 오버헤드가 크다.

따라서 이러한 부분을 개선한 것이 RAID 5이다.

 

 

RAID 5

: parity code를 모든 디스크에 분배

 

즉 모든 디스크마다 parity bit를 저장할 수 있는 공간을 두고 모든 디스크가 데이터 저장과 parity bit를 갱신한다.

이를 통해 parity disk의 오버헤드를 줄일 수 있다.

하지만 필요한 최소 디스크 수가 있다. (최소 3개의 하드디스크 또한 필요)

 

RAID 6

: RAID 5 + extra redundancy information

parity bit 대신 error correcting code, 즉 ecc를 사용한다.

따라서 디스크 두개가 동시에 고장나도 복구가 가능하다. (최소 4개 디스크 필요)

 

-> 사실 RAID 0와는 성능상의 차이는 없다. (block-striping)

하지만 RAID 6은 ecc를 통해 신뢰도를 보장한다는 장점이 있다.

 

RIAD 0+1

: RAID 0의 block striping + RAID 1의 mirroring

즉 성능과 신뢰도를 모두 구현한 모델이다.

 

RAID 1로 mirroring 디스크를 구성하고, 각각은 RAID 0로 block striping을 구현한다.

(mirroring 먼저 하고 block striping)

-> 속도 향상과 높은 신뢰도를 제공한다.

 

 

RAID 1+0

: RAID 0+1 보다 디스크 저장 방식에서 더 높은 신뢰도를 제공한다.

RAID 0로 block striping을 구현하고, 각각은 RAID 1로 mirroring을 구현한다.

(block striping 먼저 하고 mirroring)

 

이때 디스크 그룹을 구성하는데 데이터 디스크 + 백업 디스크로 구성된다.

따라서 총 4개의 디스크 그룹이 생성된다.

 

-> 하나의 디스크가 완전히 없어져도 mirroring을 해둔 백업 디스크가 존재하기 때문에 바로 교체해서 원래 데이터 디스크였던 것 처럼 사용 가능하다. 따라서 용량과 속도는 같지만 RIAD 1+0보다 안정적이다.

'STUDY > 운영체제' 카테고리의 다른 글

Implementing File System  (0) 2022.03.05
Virtual Memory Management  (0) 2022.03.03
memory management strategies2: page table의 구현  (0) 2022.02.16
memory management strategies  (0) 2022.01.10
deadlocks  (0) 2022.01.02