다음은 반효경 교수님의 ‘운영체제와 정보기술의 원리’ CH9. 디스크 관리를 읽고 정리한 내용입니다 🙌



🌩 들어가기 전

  • 컴퓨터 시스템의 대표적인 2차 저장장치이다.
  • 메모리는 휘발성이지만 디스크는 데이터를 영구저장할 수 있다.

🌩 1. 디스크의 구조

  • 디스크 외부에서 디스크를 일정크기 저장공간들로 이루어진 1차원 배열로 취급한다.
    • 그 저장공간들을 논리 블록 logical block 이라고 한다.
  • 디스크에 데이터가 저장될 때 논리블록 단위로 저장되고, 입출력도 논리블록 단위로 전송된다.
  • 데이터 접근을 위해 배열처럼 블록 인덱스를 디스크에 전달하고 디스크 컨트롤러가 해당 논리블록의 물리적 위치를 찾아 요청 데이터에 대한 입출력 작업을 수행한다.
  • 섹터 sector - 논리 블록이 저장된 물리적 위치
    • 논리블록과 섹터는 1대1 매핑
  • 디스크는 마그네틱 원판들로 구성되며 원판은 트랙, 트랙은 섹터로 나뉜다.
  • 원판의 동일한 위치의 트랙들을 실린더라고 부른다.
  • 디스크의 가장 바깥 실린더의 첫 트랙의 첫 섹터가 섹터 0 이다.
  • 데이터 입출력은 디스크의 암 arm이 섹터가 위치한 실린더로 이동하여 워판이 회전하고 디스크 헤드가 섹터 위치에 도달해야한다.

🌩 2. 디스크 스캐줄링

  • 디스크 접근시간 access time: 탐색 시간 seek time, 회전지연 시간 rotational latency, 전송시간 transfer time 으로 구분된다
    • 탐색시간 - 디스크 헤드를 해당 실린더 위치로 이동시키는 시간
    • 회전지연시간 - 디스크게 회전해서 읽으려고 쓰는 섹터가 헤드 위치에 도달하는 시간
    • 전송시간 - 섹터의 데이터가 실제로 섹터에 읽고 쓰는데 소요되는 시간
  • 디스크 입출력 효율 향상 - 디스크 입출력의 접근시간을 최소화
    • 회전지연시간과 전송시간은 수치가 작고 운영체제에서 통제하기 어려운 부분이다.
    • 따라서 탐색시간을 줄여야한다.
  • 디스크 스캐줄링 disk scheduling
    • 여러 섹터들의 입출력 요청을 어떠한 순서로 처리할지 결정하는 매커니즘
    • 가장 중요한 목표는 디스크 헤드의 이동거리를 줄이는 것

1) FCFS 스케줄링

  • 디스크에 먼저 들어온 요청을 먼저 처리하는 방식이다.
  • 효율성이 매우 떨어진다. 헤드가 긴 거리를 왕복하여 왔다갔다 할 수도 있다.

2) SSTF Shortest Seek Time First 스케줄링

  • 헤드의 현재 위치로 가장 가까운 위치의 요청을 먼저 처리하는 알고리즘
  • 디스크 입출력 효율성을 증가시키지만 기아 starvation 현상을 발생시킬 수 있다.
    • 현재 헤드에서 가까운 요청이 계속 들어오면 떨어진 곳 요청은 무한대기해야한다.
  • 그래도 이동거리 측면에서 가장 우수한 알고리즘은 아니다.

3) SCAN 알고리즘

  • 헤드가 디스크 원판 안쪽 끝과 바깥쪽 끝을 오가며 경로에 존재하는 모든 요청을 처리한다.
  • 디스크 어떤 위치에 요청이 오는지 상관없이 정해진 방향으로 이동하며 길에 있는 요청들을 처리한다.
  • 한쪽 방향 끝으로 가면 다린 쪽 끝으로 방향을 바꾸어 그 경로 요청들의 다 처리한다.
  • 엘리베이터와 비슷한 알고리즘이라서 엘리베이터 스캐줄링 알고리즘 elevator scheduling algorithm이라고 부르기도 한다.
  • 너무 오래 기다리게 하거나 불필요한 헤드의 이동이 발생하지 않으므로 효율성과 형평성을 모두 만족하는 알고리즘이다.
  • 하지만 가장 바깥쪽 실린더보다 가운데 위치한 실린더가 더 자주 서비스 받는 편차가 존재한다.

4) C-SCAN 알고리즘

  • Circular-scan 알고리즘은 한쪽끝에서 다른 쪽 끝으로 이동하며 길목의 모든 요청을 처리한다.
  • 하지만 헤드가 도달해 방향을 바꾸고 요청 처리보다 다시 출발점으로 이동만한다.
  • 이동거리는 조금 길어지지만 탐색시간의 편차를 줄일 수 있다.

5) LOOK과 C-LOOK 알고리즘

  • SCAN 알고리즘은 요청 존재 여부와 관계없이 헤드가 무조건 디스크 한쪽 끝에서 다른 쪽 끝으로 이동한다.

  • LOOK 알고리즘은 헤드가 한쪽으로 이동하다가 그 방향에 대기중인 요청이 없다면 방향을 바꾼다.

  • C-LOOK은 LOOK 알고리즘에서 한쪽 방향으로 이동할 때만 요청을 처리하는 것이다. -

  • SCAN, C-SCAN, LOOK, C-LOOK 등의 알고리즘이 디스크 입출력이 많은 시스템에서 FCFS나 SSTF에 비해 효울적이다.


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

  • 다중 디스크를 사용
    • 동일한 정보를 디스크에 중복 저장하여 인기있는 데이터를 여러 디스크에서 동시 서비스 할 수 있다.
    • 일부 디스크 오류에도 지속적 서비스가 가능하다.
    • 시스템 성능과 신뢰성을 동시에 향상시킨다.
  • 다중 디스크 시스템에서는 작업을 수행할 디스크를 결정하는 문제도 처리해야한다.
  • 스케줄링 목적에 따라 요청 처리 디스크를 결정하는 기준이 달라진다.
    • 탐색시간을 줄이면 헤드의 위치가 데이터와 가장 가까운 디스크를 선택
    • 거시적인 관점에서 디스크간의 부하균형 Load balancing 을 이루도록 스케줄링
  • 최근에는 전력 소모를 줄이는 것이 중요한 목표이다.
    • 일부 디스크에 요청을 집중시키고 나머지 디스크는 회전을 정지시키는 것이 효과적이다.
    • 일부 디스크만으로 요청 처리가 가능한 경우에서만 성립된다.

🌩 4. 디스크의 저전력 관리

1) 비활성화 기법

  • 전력 소모 기준으로 4가지 디스크의 상태
    • 활동 active
      • 현재 읽거나 쓰는 상태
    • 공회전 idle
      • 회전중이나 읽거나 쓰지는 않는 상태
    • 준비 standby
      • 회전하지 않지만 인터페이스가 활성화된 상태
    • 휴면 sleep
      • 회전하지도 않고 인터페이스도 비활성화된 상태
  • 활동과 공회전을 활성상태, 준비와 휴먼을 비활성 상태로 부른다.
  • 비활성 상태는 회전이 일어나지 않으므로 요청이 없다면 비활성 상태가 절감 측면에서 좋다.
  • 하지만 각 상태로 전환할 때 부가적인 전력 및 시간이 소모된다. 따라서 매번 비활성 상태로 바꾸는 것은 오히려 비효율적일 수 있다.
  • 후속 요청까지 일정 시간 이상인 경우에만 회전을 정지 시키는 것이 전력 소모 절감에 좋다.
    • 미래 요청 도착 시점과 간격을 잘 예측하는 것이 필요하다.
  • 디스크 비활성 시점 결정하는 방법
    • 시간기반 timeout based
    • 예측기반 prediction based
    • 확률기반 stochastic based

2) 회전속도 조절 기법

  • Rotation Per Minute RPM을 가변적으로 조절하여 디스크 전력 소모를 줄인다.

3) 디스크의 데이터 배치 기법

  • 디스크 내에 복제본 replica를 많이 만들어 헤드 위치에 가까운 복제본을 접근하도록 하여 응답시간과 전력 소모량을 절감한다.
  • 쓰기연산의 일관성 문제가 있을 수 있으나, 가까운 복제본에만 데이터를 쓰고, 나머지 복제본들은 주소 테이블에서 무효화 연산을 수행하여 쓰기연산 효율성을 높일 수 있다.

4) 버퍼캐싱 및 사전인출 기법

  • 디스크가 활성 상태일 때 헤드 위치로부터 가까운 데이터를 사전인출 prefetching 하여 디스크 비활성화 가능성을 높여 전력을 줄일 수 있다.
  • 데드라인을 꼭 지켜야하는 요청이 아니라면 디스크의 활성상태 여부에 따라 요청을 지연시키는 방식도 사용한다.
  • 통합하여, 디스크가 저전력 모드라면 입출력 처리를 최대한 지연시켰다가 디스크가 정상 전력 모드라면 사전인출을 공격적으로 해서 디스크의 상태 변화 횟수를 최소화하는 방법을 사용할 수 있다.

5) 쓰기전략을 통한 저전력 디스크 기법

  • 해당 디스크가 비활성 상태일 때는 쓰기를 하지 않고 디스크가 활성 상태일 때 쓰는 방식으로 전력 소모를 젉감한다.
  • 일단 블록들을 로그 디스크에 썼다가 디스크 활성 상태일 때 디스크에 쓰기연산을 수행하는 방식도 있다.