디스크 관리
디스크는 컴퓨터 시스템의 대표적인 2차 저장장치이다.
디스크의 구조
디스크 외부에서는 디스크를 일정한 크기의 저장공간들로 이루어진 1차원 배열처럼 취급하게 된다. 이 일정한 크기의 저장공간을 논리블록이라고 하며, 디스크에 데이터가 저장될 때에는 논리블록 단위로 저장되고, 디스크 외부로 입출력이 일어날 때에도 논리블록 단위로 전송된다. 논리블록에 저장된 데이터를 접근하기 위해서는 배열을 접근하는 것처럼 해당 블록의 인덱스 번호를 디스크에 전달해야 한다. 그러면 디스크 컨트롤러는 해당 논리블록이 저장된 물리적 위치를 찾아 요청된 데이터에 대한 입출력 작업을 수행하게 된다. 이때 각 논리블록이 저장되는 디스크의 물리적인 위치를 섹터라고 부른다. 즉 논리블록 하나가 섹터 하나와 1대1로 매핑되어 저장되는 것이다. 디스크의 물리적인 구조는 마그네틱의 원판으로 구성된다. 하나의 디스크 내에 원판의 수는 하나일 수도 있고 여러 개일 수도 있다. 각각의 원판은 트랙으로 구성되고 각 트랙은 섹터로 나뉘며, 섹터에 최소한의 단위 정보가 저장된다. 여러 개의 원판에서 상대적 위치가 동일한 트랙들의 집합을 실린더라고 부른다. 디스크에 데이터를 읽고 쓰기 위해서는 암이 해당 섹터가 위치한 실린더로 이동한 후 원판이 회전하여 디스크 헤드가 저장된 섹터 위치에 도달해야 한다.
디스크 스케줄링
디스크에 대한 접근시간은 탐색시간과 회전지연시간, 전송시간으로 구분된다.
탐색시간: 디스크 헤드를 해당 실린더 위치로 이동시키는 데 걸리는 시간이다. 즉 접근하려는 데이터가 원판의 안쪽에 있는지 바깥쪽에 있는지에 따라 헤드를 움직이는 데 걸리는 시간이다.
회전지연시간: 디스크가 회전해서 읽고 쓰려는 섹터가 헤드 위치에 도달하기까지 걸리는 시간이다.
전송시간: 해당 섹터가 헤드 위치에 도달한 후 데이터를 실제로 섹터에 읽고 쓰는 데 소요되는 시간이다.
접근 시간을 최소화하기 위해 시간을 줄여야 하는데 회전지연시간과 전송시간은 수치가 작고 운영체제 입장에서 통제하기가 힘들다.
따라서 탐색시간을 줄이기 위해 헤드의 움직임을 최소화하는 스케줄링 작업을 한다. 디스크 스케줄링이란 효율적인 디스크 입출력을 위해 여러 섹터들에 대한 입출력 요청이 들어왔을 때 이들을 어떠한 순서로 처리할 것인지 결정하는 메커니즘이다. 궁극적 목표는 디스크 헤드의 이동거리를 줄이는 것이다.
FCFS 스케줄링
FCFS(First Come First Served) 스케줄링은 디스크에 먼저 들어온 요청을 먼저 처리하는 방식을 말한다. 이 스케줄링 계속 왕복하며 일하기 때문에 매우 비효율적이다.
SSTF 스케줄링
SSTF(Shortest Seek Time First) 스케줄링은 헤드의 현재 위치로부터 가장 가까운 위치에 있는 요청을 제일 먼저 처리하는 알고리즘이다.
헤드의 이동거리를 줄여 디스크 입출력의 효율성을 증가시키지만 기아 현상을 발생시킬 수 있다.
SCAN 알고리즘
SCAN알고리즘은 헤드가 디스크 원판의 안쪽 끝과 바깥쪽 끝을 오가며, 그 경로에 존재하는 모든 요청을 처리한다. 즉 디스크의 어떠한 위치에 요청이 들어오는가와 상관없이 헤드는 정해진 방향으로 이동하면서 길목에 있는 요청들을 처리하며 지나가는 것이다. 이 알고리즘은 일반적인 엘레베이터에서 사용하는 스케줄링 알고리즘과 유사하다. SCAN 알고리즘에서는 FCFS처럼 불필요한 헤드의 이동이 발생하거나 SSTF 처럼 일부 지역이 지나치게 오래 기다리는 현상이 발생하지 않는다. 즉 효율성과 형평성을 모두 만족하는 알고리즘이다. 또한 헤드가 전체 실린더를 한 번 스캔하는 시간이면 기다리던 모든 요청이 처리되므로 일부 요청이 지나치게 오래 기다리는 현상도 발생하지 않는다.
하지만, 모든 실린더 위치의 기다리는 시간이 공평한 것은 아니다. 제일 안쪽이나 제일 바깥쪽 위치보다는 가운데 위치를 지나가는 주기는 양 끝을 지나가는 주기의 절반에 불과하다. 이런 위치에 따른 탐색시간의 편차를 보완하기 위해서 C-SACN알고리즘이 제안되었다.
C-SCAN 알고리즘
SCAN 처럼 헤드가 한쪽 끝에서 다른 쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리한다. 그러나 다른 쪽 끝에 도달하면 방향을 바꾸고 요청을 처리하는 것이 아니라 출발점으로 다시 이동 후 동일한 탐색을 한다. SCAN 보다 헤드의 이동거리는 조금 길어지지만 탐색시간의 편차를 줄일 수 있다는 것이 장점이다.
LOOK과 C-LOOK 알고리즘
SCAN은 요청의 존재 여부와 관계없이 헤드가 무조건 디스크의 끝에서 끝으로 이동한 밤녀 LOOK은 헤드가 한 쪽 방향으로 이동하다가 그 방향에 더 이상 대기중인 요청이 없으면 이동 방향을 즉시 반대로 바꾸는 방식이다. C-LOOK은 전방에 요청이 없을 때 방향을 바꾼다는 측면에서는 LOOK과 유사하고, 한쪽 방향으로 이동할 때에만 요청을 처리한다는 점에서 C-SCAN과 유사하다. SCAN, C-SCAN, LOOK, C-LOOK 등이 디스크 입출력이 많은 시스템에서 FCFS나 SSTF에 비해 더 효율적인 것으로 알려져 있다.
다중 디스크 환경에서의 스케줄링
많은 동시 사용자를 서비스하는 서버에서는 다수의 디스크를 함께 사용한다. 동일한 정보를 여러 디스크에 중복 저장하여 인기 있는 데이터를 여러 디스크로부터 동시에 서비스할 수 있고, 일부 디스크에 오류가 발생해도 지속적인 서비스가 가능하며, 정보의 유실을 방지할 수 있기 때문이다. 이처럼 다중 디스크를 사용하면 시스템의 성능과 신뢰성을 동시에 향상시킬 수 있다.
이러한 환경에서는 여러 개의 디스크 중 어느 디스크에서 요청을 처리할지 결정하는 스케줄링 문제가 발생한다. 이 때에는 스케줄링의 목표에 따라 요청을 처리할 디스크를 결정하는 기준이 달라진다. 예를 들어 탐색시간을 줄이는 것이 목표라면 여러 디스크 중에서 헤드의 현재 위치가 요청한 데이터와 가장 가까운 디스크를 선택하는 방법을 사용할 수 있다. 다중 디스크 환경에서의 스케줄링은 많은 요청을 동시에 처리할 수 있는 확장성 있는 서비스가 목표이므로 일부 디스크가 과부하 상태에 이르지 않고 모든 디스크에 요청이 골고루 분배되도록 스케줄링해야 한다. 최근에는 전력 절감 측면에서 모든 디스크에 요청을 골고루 분산시키기보다는 일부 디스크에 요청을 집중시키고 나머지 디스크는 회전을 정지시키는 것이 더 효과적이다.
디스크의 저전력 관리
비활성화 기법
디스크의 상태는 전력 소모를 기준으로 활동상태, 공회전상태, 준비상태, 휴면상태로 나누어볼 수 있다.
활동 상태: 현재 헤드가 데이터를 읽거나 쓰고 있는 상태
공회전 상태: 디스크가 회전 중이지만 데이터를 읽거나 쓰지는 않는 상태
준비 상태: 디스크가 회전하지 않지만 인터페이스가 활성화된 상태
휴면 상태: 디스크가 회전하지 않고 인터페이스도 비활성화된 상태
편의상 활동 상태와 공회전 상태를 활성화된 상태, 준비 상태와 휴면 상태를 비활성 상태라고 부른다. 비활성 상태에서 전력 소모가 적으므로 요청이 없을 경우 디스크를 정지시키는 것이 전력 절감 측면에서 효과적이다.
그러나 활성상태로의 전환하는 과정에서 전력 소모와 시간이 뒤따르므로 후속 요청까지의 시간 간격이 일정 시간 이상일 경우에만 디스크의 회전을 정지시키는 것이 전력 소모를 절감하는 데 효과적이다. 이는 장치를 비활성화할 시점을 결정하기 위해 미래의 요청이 도착하는 시점과 간격을 정확히 예측하는 것이 중요하다.
디스크를 비활성화하는 시점을 결정하는 방법으로는 시간기반 기법과 예측기반 기법, 확률기반 기법이 있다.
시간기반 기법: 일정 시간 동안 디스크가 공회전 상태이면 장치를 정지시켰다가, 다시 요청이 왓을 때 디스크를 활성화한다.
예측기반 기법: 과거 요청을 관찰하여 다음 공회전 구간의 길이를 예측한 후 디스크를 비활성화할 시점을 결정한다.
확률기반 기법: 디바이스의 상태변경 시간 간격을 구하기 위해 확률분포를 통해 요청을 모델링하고 마르코프 체인 등과 같은 통계적 모델을 이용한다.
회전속도 조절 기법
디스크의 전력 소모를 줄이기 위한 방법으로 최근에는 디스크의 회전속도를 가변적으로 조절하는 기법이 제안되었다.
디스크의 데이터 배치 기법
디스크의 용량은 매년 빠른 속도로 증가하고 있으나 디스크의 접근 속도는 기계적 메커니즘으로 인해 그다지 큰 발전이 없는 실정이다. 요즘 컴퓨터 시스템에서 디스크의 과반수가 빈 공간인 상태로 남아 있다는 점에 착안해, 디스크 내에 데이터의 복제본을 많이 만들어 헤드 위치에서 가까운 복제본에 접근하도록 함으로써 빠른 응답시간과 전력 소모량 절감을 얻는 FS2 파일 시스템을 제안했다.
버퍼캐싱 및 사전인출 기법
미래에 요청될 데이터를 미리 알거나 어느 정도 예측할 수 있다면 디스크가 활성 상태일 때 헤드 위치로부터 가까운 데이터를 사전인출 함으로써 향후 디스크의 비활성화 가능성을 높여 전력 소모를 줄일 수 있다. 또한 데드라인을 꼭 지켜야 하는 긴급한 요청이 아닌 경우, 디스크의 활성 상태 여부에 따라 요청을 최대한 지연시키는 방식으로 전력 소모를 줄일 수 있다. 이 둘을 통합하여, 디스크가 저전력 모드일 때는 입출력 처리를 최대한 지연시켰다가 디스크가 정상 전력 모드로 돌아왔을 때 사전인출을 공격적으로 함으로써 디스크의 상태 변화 횟수를 최소화하는 방법이 연구된 바 있다.
쓰기전략을 통한 저전력 디스크 기법
대상 디스크가 비활성 상태일 때에는 디스크 쓰기를 하지 않고 기다렸다가, 디스크가 활성 상태로 돌아왔을 때 쓰는 방식으로 전력 소모를 줄이는 방안이 연구되었다. 유사하게, 대상 디스크가 활성 상태가 아니면 일단 블록들을 로그 디스크에 썼다가 디스크가 활성 상태로 돌아왔을때 디스크에 쓰기연산을 수행하는 방식도 제안된 적 있다.
'공부 기록들' 카테고리의 다른 글
개인적인 알고리즘 문제 풀이 팁 기록 (0) | 2020.11.12 |
---|---|
웹 캐싱 기법 (0) | 2020.10.25 |
가상 메모리 (0) | 2020.10.25 |
메모리 관리 (0) | 2020.10.24 |
프로세스 관리 (0) | 2020.10.23 |