디스크 구조
먼저 디스크가 어떻게 생겼는지 먼저 살펴보자.
- 디스크에 데이터를 저장할때는 최소 저장 단위인 논리블록(logical block) 단위로 저장한다.
- 이러한 논리블록은 1개의 섹터에 저장이 된다. 즉 논리블록과 섹터는 1:1 관계다.
- 디스크는 여러개의 마그네틱 원판이 겹쳐진 형태로 되어있다.
- 마그네틱 원판위에는 여러개의 트랙으로 구성되어있다.
- 트랙은 섹터들이 이름 그대로 섹터들이 일열로 구성되어있는것이다.
- 여러개의 원판에 같은 z 좌표가 같은 집합을 실린더라고 한다.
- 디스크에서 데이터를 읽고 쓸때는 암(arm)이 해당 실린더로 이동하고,
원판이 돌아가 트랙위에 섹터를 헤드가 읽는다.
디스크 스케줄링✅
디스크에서 데이터를 일겅오려면 여러개의 섹터들을 접근해야한다.
그렇다면 접근해야할 섹터들이 여러개인 상황에서 어떤 순서로 접근해야 좋은 성능이 나올까?
디스크 성능 지표
먼저 좋은 성능을 객관적으로 비교하기위한 지표 먼저 살펴보자.
- 탐색 시간(seek time) : 디스크 암이 원판을 앞 뒤로 움직이며 해당 섹터가 존재하는 실린더로 이동하는 시간.
- 회전 지연 시간(rotational latency) : 원판이 회전하며 트랙위에 섹터를 찾는 시간.
- 전송 시간(transfer time) : 헤드가 해당 섹터에서 데이터를 읽고 쓰는데 걸리는 시간.
- 접근 시간(access time) : seek time + rotational latency + transfer time. 데이터를 읽어오는데 총 걸리는 시간.
회전 지연 시간과 전송 시간은 소요 시간이 굉장히 짧고 줄이기가 힘들기 때문에,
디스크 스케줄링 작업은 탐색 시간을 줄이는것을 목표로 한다.
FCFS(First Come First Served)
가장 간단하게 생각해볼 수 있는 방식으로,
요청이 들어온 순서대로 처리하는 것이다.
- 위 그림에서 실린더 0 이 원판의 가장 안쪽을, 실런더 199가 가장 바깥쪽 실린더를 의미한다고 해보자.
- 그렇다면 헤드는 실린더의 안쪽과 바깥쪽을 열심히 이동할것이다.
- 가장 최악의 상황은 0,199 가 반복되는(양 끝단이 반복되는) 상황일것이다.
- 위 예시에서 총 이동거리는 644가 된다.
SSTF(Shortest Seek Time First)
그렇다면 그리디 알고리즘처럼 현재의 상황에서 가장 짧은 이동거리로 이동하는 것이다.
즉 다음 탐색 시간(seek time)이 가장 짧은 방식으로만 헤드를 이동하는것이다.
- 총 이동거리가 236으로 FCFS보다 많이 줄었다.
- 그러나 기본적으로 그리디 알고리즘이므로,
필요한 섹터가 비슷한 실린더에 몰려있다면 멀리 있는 실린더는 기아현상(starvation)이 발생한다. - 그리고 헤드의 이동거리를 비교한 성능이 가장 우수하지도 않다.
SCAN
기아현상을 없애기 위해 실린더의 양끝단을 왕복하는 방법이다.
전체를 스캔한다고해서 이름도 스캔 알고리즘이다.
스캔 알고리즘은 마치 엘리베이터가 1층과 꼭대기를 왕복하는 모양이어서,
엘리베이터 스케줄링 알고리즘이라고도 한다.
- 해당 방식은 효율적인 면에서 우수하다.
불필요하게 앞뒤를 왕복하지 않고, 쭉 직진으로 섹터를 처리하기 때문이다. - 총 이동거리도 238이다.
- 기아현상이 발생하지 않는다.
한바퀴안에 모든 실린더 방문을 보장하기 때문이다.
그러나 장점만 있는것은 아니다.
- 1, 199 위치에 존재하는 섹터들은 연속해서 2번 방문하거나 1바퀴 전체를 돌때까지 기다려야한다.
- 반대로 100에 위치한 섹터는 정확히 이동거리 100마다 실리더 방문이 보장된다.
- 이처럼 중앙과 가장자리에 실린더 방문 빈도가 달라져,
위치에 따라 탐색시간의 편차가 발생한다.
C-SCAN(Circular-SCAN)
SCAN 방식이 양끝단을 왕복 반복했다면,
C-SCAN은 한 방향으로만 방문하는것이다. (편차 x)
- 이런식으로 방문한다면 모든 실린더 방문에 편차가 없이 동일해,
실린더마다 탐색 시간이 균일해진다. - 다만 끝에서 끝으로 이동하는 오버헤드가 발생해 이동거리가 늘어난다.
아래 그림은 실린더 번호가 증가하는 방향으로만 탐색한다.
그래서 이동거리가 조금 큰 380이 나오게된다.
LOOK, C-LOOK
SCAN 알고리즘은 반드시 끝에서 끝까지 이동한다.
근데 굳이 끝까지 갈 필요가 없다면, 안가도 될거같다.
- LOOK 알고리즘은 기본적으로 SCAN 알고리즘인데 끝까지 갈 필요가 없다면 가지 않는다.
- 이름도 갈 필요가 있나 살펴본다고해서 LOOK 이다.
C-LOOK은 LOOK 알고리즘인데 한 방향으로만 스캔하는 방식이다.
마치 SCAN과 C-SCAN의 관계처럼.
위 그림을 보면 SCAN 과 다르게 0 과 199까지 굳이 방문하지 않는다.
- 일반적으로 LOOK, C-LOOK 알고리즘이 FCFS, SSTF보다
효율성과 기아현상 관점에서 더욱 우수하다고 알려져있다.
다중 디스크 환경
디스크를 다중으로 사용한다면 다음과 같이 이점 있다.
- read 작업이 많은 데이터를 여러군데 저장하여 동시 접근이 가능해 성능적인 이점을 가져갈 수 있다.
- 디스크 장애 발생시 다른 디스크에서 복구가 가능해 신뢰성이 향상된다.
스케줄링은 어떻게 해야할까?
지금까지 살펴본 스케줄링 기법들은 단일 디스크 환경만을 고려한것이다.
- 목적에 따라 스케줄링이 달라질 것이다.
- 만약에 seek time을 최소화하고 싶다면,
헤더의 위치가 가장 가까운 디스크에서 데이터를 읽어오는것이 효율적일 것이다. - 여러개 디스크를 골고루 사용해 디스크의 부하를 줄이고 싶다면,
부하균형(load balancing)이 되도록하는 스케줄링 기법이 필요할것이다. - 비용 측면에서 전력 소모를 최소화하고 싶다면,
디스크 작업이 많지 않을때는 최소한의 디스크만 사용하고
나머지는 유휴상태로 두는것이 유리하다.
디스크 저전력 관리
지금부터는 디스크를 저전력으로 관리하기 위한 기법들을 설명한다.
디스크의 상태는 전력 소모를 기준으로 볼때 4가지 상태가 존재한다.
- 활동(active) : 헤더가 데이터를 읽거나 쓰는중.
- 공회전(idle) : 헤더가 회전중이지만 활동상태는 아님.
- 준비(stanby) : 회전하지는 않지만 인터페이스 활성화.
- 휴면(sleep) : 회전하지도 않고 인터페이스 활성화도 안됨.
활동, 공회전 상태를 활성 상태로 준비, 휴면 상태를 비활성 상태로 본다면
요청이 없을땐 활성상태보단 비활성 상태가 전력 소모 관점에서 유리하다.
그러나 디스크 암을 활성하는데 물리적인 시간이 걸리므로(컴퓨터를 키고 끌때처럼)
데이터 요청이 없을때도 일정 시간 활성 상태로 두는것이 유리하다.
그럼 디스크 활성화를 얼만큼 유예해야할까?
- 시간 기반(timeout based) : 일정 시간만큼 공회전하게 둔다.
- 예측 기반(prediction based) : 과거 회전 시간을 기반으로 미래 예측해 공회전한다.
- 확률 기반(stochastic based) : 마르코프 체인(Markov chain)과 같은 통계 모델을 이용해 예측한다.
디스크 저전력을 위한 연구들
전력소모를 줄이기 위한 몇가지 연구를 살펴보자.
회전속도 조절
- 디스크의 RPM(Rotations Per Minute)를 가변적으로 조절하는것이다.
- 워크로드(작업 환경이나 부하)를 분석하여 상황에 맞게 RPM을 조절한다.
- 예를들어 멀티미디어 환경에서는 다음 데이터 접근을 예상할 수 있다.
(동영상을 틀면 뒤에 재생될 데이터가 미리 정해지므로) - 데이터 접근 예상이 가능해지면 데이터에 대한 주기성과 규칙성이 생긴다.
- 동영상의 bit rate, 버퍼 크기 등을 미리 안다면 이에 맞춰 RPM도 조절하면 될것이다.
디스크 데이터 배치
- 대부분의 컴퓨터에서 디스크 53% 이상이 비어있다는 연구 결과가 있다.
- 그래서 데이터를 중복 복제하여 디스크 암 이동시간을 최소화한다.
- 데이터가 중복되어있으므로 일관성(consistency) 문제가 생길수 있다.
- 쓰기 연산시 주소 테이블을 활용한 무효화(invalidation) 연산을 통해,
가까운 곳에 데이터를 업데이트하고 나머지는 데이터는 무효화 작업만하면 된다.
버퍼캐싱 및 사전인출
- 만약에 참조하는 데이터가 주기성을 나타내 예측이 가능하다면,
미리 데이터를 읽어오는 사전인출(prefetching)이 가능해진다. - 또한 당장 데이터를 읽어오지 않아도 된다면,
읽기 작업을 최대한 지연시키는 것이다. - 가장 좋은 방법은 평소에 저전력모드를 유지하다가 정상 모드로 돌아올때
사전인출을 하는것이다. - 이를 통해 디스크의 상태 변화 횟수가 최소화 될 수 있다.
쓰기 전략(write strategy)
- 정확히 서술하면 쓰기 지연 전략이다.
- 쓰기 작업이 들어와도 디스크 비활성이면 작업을 미루는 것이다.
'OS' 카테고리의 다른 글
[운영체제와 정보기술의 원리] 10장 웹캐싱 (0) | 2023.12.17 |
---|---|
[운영체제와 정보기술의 원리] 8장 가상 메모리 (0) | 2023.12.12 |
[운영체제와 정보기술의 원리] 7장 메모리 관리 (0) | 2023.12.04 |
[운영체제와 정보기술의 원리] 6장 CPU 스케줄링 (0) | 2023.11.16 |
[운영체제와 정보기술의 원리] 5장 프로세스 관리 (0) | 2023.11.15 |