Frinee의 코드저장소

디스크 관리

by Frinee
이 글은 반효경 저 - "운영체제와 정보기술의 원리"를 공부하고 정리하여 작성하였습니다.

 

1. 디스크의 구조

  • 디스크는 컴퓨터 시스템의 대표적인 비휘발성 2차 저장장치이다.
  • 디스크는 논리블록이라 부르는 일정한 크기의 저장공간들로 이루어진 1차원 배열로 취급함
  • 디스크가 저장 시에나 디스크 외부로 입출력이 일어날 때에도 논리블록 단위로 발생함.
  • 데이터 접근 과정
    1. 논리블록에 저장된 데이터를 접근하기 위해선 배열을 접근하는 것처럼 해당 블록의 인덱스 번호를 디스크에 전달함.
    2. 디스크 컨트롤러는 해당 논리블록에 저장된 물리적 위치를 찾아 요청된 데이터에 대한 입출력 작업 수행
  • 섹터(sector): 각 논리블록이 저장되는 디스크 내 물리적 위치, 논리블록 하나와 1대1 매핑
  • 물리적 구조
    • 디스크의 물리적 구조는 마그네틱의 원판으로 구성됨.
    • 각각의 원판은 트랙(track)으로 구성되고 각 트랙은 섹터로 나뉘며 섹터에 최소한의 단위 정보가 저장됨.
    • 실린더(cylinder): 여러 개의 원판에서 상대적 위치가 동일한 트랙들의 집합
    • 디스크에 데이터를 읽고 쓰기 위해서 암(arm)이 해당 섹터가 위치한 실린더로 이동 후 원판이 회전하여 디스크 헤드가 저장된 섹터 위치에 도달해야 함.

 

2. 디스크 스케줄링

  • 디스크에 대한 접근 시간은 탐색 시간, 회전지연시간, 전송시간으로 구분됨.
  • 탐색시간: 디스크 헤드를 해당 실린더 위치로 이동시키는 데 걸리는 시간 (r방향 이동)
  • 회전지연시간: 디스크가 회전해서 읽고 쓰려는 섹터가 헤드 위치에 도달하기까지의 시간 (ω 방향 이동)
  • 전송시간: 해당 섹터가 헤드 위치에 도달한 후 데이터를 실제로 섹터에 읽고 쓰는 데 소요되는 시간
  • 디스크 입출력 효율을 높이기 위해선 접근시간을 최소화해야 하는데 이때 탐색시간을 줄이기 위한 디스크 스케줄링이 작동함.
  • 디스크 스케줄링: 효율적인 디스크 입출력을 위해 여러 섹터들에 대한 입출력 요청이 들어왔을 때 이들을 어떠한 순서로 처리할 것인지 결정하는 메커니즘

2.1. FCFS(First Come First Served) 스케줄링

  • 디스크에 먼저 들어온 요청을 먼저 처리하는 방식을 말함.
  • 합리적이지만 효율성이 매우 떨어짐.

2.2. SSTF(Shortest Seek Time First) 스케줄링

  • 헤드의 현재 위치로부터 가장 가까이 있는 요청을 제일 먼저 처리하는 방식
  • 헤드의 이동거리를 줄여 디스크 입출력의 효율성이 오르지만 기아 현상을 발생시킬 수 있음

2.3. SCAN 알고리즘

  • 헤드가 디스크 원판의 안쪽 끝과 바깥쪽 끝을 오가며 그 경로에 존재하는 모든 요청을 처리함.
  • 요청의 위치와 상관없이 헤드가 정해진 방향으로 이동하면서 만나면 처리함.
  • 엘리베이터 스케줄링 알고리즘이라고도 부름.
  • 만약 그 방향으로 요청이 더 이상 없으면 방향을 바꾸어 진행함.
  • 이동거리 측면에서 매우 효율적이나 일부 요청이 지나치게 오래 기다릴 수 있음

2.4. C-SCAN 알고리즘

  • SCAN처럼 헤드가 한쪽 끝에서 다른 쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리함
  • 그러나 헤드가 다른 쪽 끝에 도달한 경우 방향을 바꿔 출발점으로 이동만 함.
  • 이동시간은 조금 길어지지만 탐색시간의 편차를 줄일 수 있음.

2.5. LOOK과 C-LOOK 알고리즘

  • LOOK 알고리즘은 SCAN과 달리 그 방향에 더 이상 대기 중인 요청이 없으면 즉시 이동방향을 반대로 바꾸는 스케줄링 방식
  • C-LOOK 알고리즘은 전방에 요청이 없을 때 방향을 바꾸는 측면에서 LOOK과 유사하며, 한쪽 방향으로 이동할 때에만 요청을 처리한다는 점에서 C-SCAN과 유사함

 

3. 다중 디스크 환경에서의 스케줄링

  • 수많은 동시 사용자를 서비스하는 서버는 다수의 디스크를 함께 사용함
  • 동일한 정보를 여러 디스크에 중복 저장하여 인기 있는 데이터를 여러 디스크로부터 동시에 서비스할 수 있음
  • 그리고 일부 디스크에 오류가 발생해도 지속적인 서비스가 가능하고 정보의 유실을 방지할 수 있음
  • 다중 디스크 환경에서는 어느 디스크에서 요청을 처리할지 결정하는 스케줄링 문제가 발생
  • 이런 경우 스케줄링 목표에 따라 기준이 달라진다.
  • 거시적인 관점에서는 각 디스크 간 부하균형을 이루는 것이 중요함.
  • 최근에는 전력 소모를 줄이는 것이 디스크 관리의 새로운 목표가 되고 있음. 이 경우는 디스크를 몰아넣는 것이 더 효과적

 

4. 디스크의 저전력 관리

4.1. 비활성화 기법

  • 디스크의 상태는 전력 소모를 기준으로 4가지로 나눌 수 있음
    • 활동(active): 현재 헤드가 데이터를 읽거나 쓰고 있는 상태
    • 공회전(idle): 디스크는 회전 중이지만 데이터를 읽거나 쓰진 않은 상태
    • 준비(standby): 디스크는 회전하지 않지만 인터페이스가 활성화된 상태
    • 휴면(sleep): 디스크가 회전하지 않고 인터페이스도 비활성화된 상태
  • 비활성화 상태에서 디스크를 읽는 작업이 활성 상태일 때보다 전력이 많이 소모됨
  • 후속 요청까지의 시간 간격이 일정 시간 이상일 경우에만 디스크의 회전을 정지시키는 것이 전력 소모를 절감하는 데 효과적
  • 이는 장치를 비활성화할 시점을 결정하기 위해 미래의 요청 시점을 맞추는 것이 중요함
  • 디스크 비활성화 시점 결정
    • 시간기반 기법: 일정 시간 동안 디스크가 공회전 상태이면 장치를 정지하고 다시 요청이 왔을 때 디스크를 활성화
    • 예측기반 기법: 과거 요청을 관찰하여 다음 공회전 구간의 길이를 예측한 후 디스크를 비활성화할 시점을 결정
    • 확률기반 기법: 디바이스의 상태변경 시간 간격을 구하기 위해 확률분포를 통해 요청을 모델링하고 마르코프 체인 등과 같은 통계적 모델을 이용

4.2. 회전속도 조절 기법

  • 디스크의 전력 소모를 줄이기 위해 최근에는 디스크의 회전속도를 가변적으로 조절하는 기법이 제안
  • 운영체제는 시스템 자원과 부하를 포괄적으로 볼 수 있기 때문에 하드웨어 혼자서 전력관리를 하는 거세에 비해 더 많은 절감효과를 얻을 수 있음
  • 최근에는 워크로드의 특성을 활용해 회전속도를 조절하려는 시도락 이루어짐
  • 멀티미디어 환경에서는 시간에 따른 순차적 데이터 접근이 이루어져 주기성과 규칙성을 활용해 참조에 대한 예측이 가능함.
  • 전력 소모를 최소화하기 위해 실시간 응용프로그램 재생률(bit rate)과 버퍼 크기에 따라 디스크의 회전속도를 조절해서 전력 소모를 최소화하는 기법도 제안됨

4.3. 디스크의 데이터 배치 기법

  • 디스크 용량 발전에 비해 디스크 접근 속도는 크게 발전하지 않음
  • 디스크 내에 데이터 복제본을 많이 만들어 헤드 위치에서 가까운 복제본에 접근하게 하여 응답시간과 전력 절감을 얻는 FS2 파일 시스템이 제안됨
  • 복제본이 있는 경우, 쓰기 연산에서 일관성 문제가 발생할 수 있으나 FS2에서는 헤드의 위치에서 가까운 복제본에 데이터를 쓰면 나머니는 주소 테이블에 무효화 연산을 수행해 쓰기연산의 효율성도 높임

4.4. 버퍼캐싱 및 사전인출 기법

  • 예측이 가능한 경우 디스크가 활성 상태일 때 헤드위치로부터 가까운 데이터를 사전인출하여 디스크의 비활성화 가능성을 높여 전력 소모를 줄일 수 있음
  • 긴급한 요청이 아닌 경우, 디스크 활성 상태 여부에 따라 요청을 지연시켜 전력소모를 줄임
  • 이 둘을 통합하여 디스크가 저전력 모드일때는 입출력 처리를 최대한 지연시키고 정상 전력 모드로 돌아오면 사전인출을 공격적으로 시행

4.5. 쓰기전략을 통한 저전력 디스크 기법

  • 저장장치의 데이터에 대한 쓰기전략을 통해 전력 소모를 줄이는 기법 제안
  • 비활성 상태일 때는 디스크 쓰기를 하지 않고 대기
  • 활성 상태일 때는 쓰는 방식으로 전력 소모를 줄이는 방

 

 

자료

  • 운영체제와 정보기술의 원리 (반효경 저, 2020.5)

'[컴퓨터 과학자 스터디] > 운영체제' 카테고리의 다른 글

웹캐싱 기법  (1) 2024.11.11
가상 메모리  (0) 2024.11.07
메모리 관리  (0) 2024.11.01
CPU 스케줄링  (0) 2024.10.27
프로세스 관리  (0) 2024.10.22

블로그의 정보

프리니의 코드저장소

Frinee

활동하기