공부/CS 스터디

[운영체제] 디스크 관리와 스케줄링

규투리 2023. 3. 1. 15:25
반응형

1. 디스크의 구조

💡 디스크란?
-> 컴퓨터 시스템의 대표적인 2차저장장치(보조기억장치)이다.
메모리는 휘발성 저장장치이므로 전원이 나가면 내용이 모두 사라지기 때문에 작업의 결과를 영구히 보관하기 위해서는 디스크 같은 2차 저장장치를 이용해야 한다.

디스크의 구조

하드 디스크의 구조는 위 그림과 같다. 

더보기
  1. 플래터(Platter): 하드 디스크의 주요 구성 요소로, 회전하는 원판 형태, 데이터는 플래터의 표면에 저장
  2. 헤드(Head): 플래터 위의 데이터를 읽고 쓰는 역할, 헤드는 플래터의 표면에서 몇 나노미터 이내의 거리에 위치하며, 이러한 거리를 위해 공기 역학적인 방식으로 작동
  3. 암(Arm): 헤드를 지지하는 부분으로, 암은 헤드를 이동시켜 다양한 위치에 있는 데이터에 액세스할 수 있도록 한다.
  4. 스파인들(Spindles): 플래터를 회전시키는 모터
  5. 컨트롤러(Controller): 하드 디스크의 작동을 제어하는 부분으로, 헤드와 암의 이동, 데이터의 저장 및 읽기 등을 관리

일반적으로, 데이터는 디스크에 저장될 때 여러 섹터(Sector)로 나눠지며, 섹터 단위로 읽거나 쓰는 것이 가능하다. 섹터는 디스크 상에 일정한 간격으로 불규칙하게 분포되어 있다.

 

이때 디스크의 데이터 저장 구조 중에서 중요한 개념 두 가지가 있다.

  1. 논리적 블럭(Logical Block) : 디스크에 저장된 데이터의 논리적인 단위
  2. 섹터(Sector) : 물리적으로 디스크에 저장되는 데이터의 단위

디스크 외부에서는 디스크를 일정한 크기의 저장공간들로 이루어진 1차원 배열처럼 취급하게 된다. 이러한 일정크기의 저장공간을 논리적 블럭이라고 하며, 디스크에 데이터가 논리적 블럭 단위로 저장된다. 

논리적 블럭에 저장된 데이터에 접근하기 위해서는 해당 블럭의 인덱스 번호를 디스크에 전달한다. 번호를 전달받은 디스크 컨트롤러는 해당 논리적 블럭이 저장된 물리적 위치를 찾아 요청된 데이터에 대한 입출력 작업을 수행하게 된다. 이때 각 논리적 블록이 저장되는 디스크의 물리적 위치를 섹터라고 한다.

논리적 블럭 하나가 섹터 하나와 1:1로 매핑되어 저장되는 셈이다.

 

정리하자면, 논리적 블록파일 시스템의 관점에서 데이터를 식별하고 관리하며, 섹터는 하드디스크의 물리적인 구조에서 데이터를 저장하고 엑세스하는 데 사용된다.

 

2. 디스크 관리

디스크 접근 시간(access time) : 탐색시간 + 회전지연시간 + 전송시간
탐색시간(seek time) : 디스크 레드를 해당 실린더 위치로 이동시키는 데 걸리는 시간
회전지연시간(rotational latency) : 디스크가 회전해서 읽고 쓰려는 섹터가 헤드 위치에 도달하기까지의 시간
전송시간(transfer time) : 해당 섹터가 헤드 위치에 도달한 후 데이터를 실제로 섹터에 읽고 쓰는데 소요되는 시간

디스크 접근 시간 중 가장 큰 것은 탐색 시간이다.

그렇기 때문에 접근시간을 줄여야 디스크 입출력의 효율이 높아지는데, 회전 지연시간과 전송 시간은 상대적으로 수치가 작을 뿐만 아니라, 운영체제 입장에서도 통제하기 힘든 부분이다. 따라서 운영체제는 탐색시간을 줄이기 위한 스케줄링 작업을 한다.

 

디스크 스케줄링이란 여러 섹터들에 대한 입출력 요청이 들어왔을 때 처리 순서를 결정하는 메커니즘이다.

가장 중요한 목표는 디스크 헤드의 이동거리를 줄이는 것이다.

 

3. 디스크 스케줄링

디스크 헤드

💡 디스크 스케줄링이란?
-> 데이터를 엑세스하기 위해 디스크 헤드를 움직이는 경로를 결정하는 기법이다.

 

그렇다면 디스크 스케줄링의 목적은 무엇일까?

디스크 스케줄링의 목적으로는 4가지를 들 수 있다.

  1. 하드디스크 검색으로 낭비되는 시간 최소화
  2. 특정한 프로세스의 입출력 요청의 우선순위를 결정
  3. 디스크 대역을 실행 중인 각 프로세스에 할당
  4. 정해진 시간까지 요청 처리

 

컴퓨터의 성능을 위해 요청들을 효율적으로 처리해야 한다. 디스크를 읽는 시간은 매우 오래 걸리는 작업이고, 특히 탐색 시간이 오래걸리므로 최대한 이 시간을 줄이는 것이 중요하다.

 

4. 디스크 스케줄링 기법

디스크 스케줄링 알고리즘은 정말 많다.

  1. FCFS
  2. SSTF
  3. SCAN
  4. C-SCAN
  5. C-LOOK
  6. N단계 SCAN
  7. 에센바흐 기법
  8. SLTF

등 굉장히 많은 기법들이 존재한다. 이번 포스팅에서는 위 네 가지 스케줄링 기법에 대해서 다뤄보겠다.

 

4-1. FCFS(First Come First Served)

FCFS 기법은 여러 스케줄링과 마찬가지로 디스크 큐에 요청이 들어온 순서대로 작업을 처리한다.

매우 단순하며 공정한 알고리즘이지만, 효율성이 많이 떨어진다.

최악의 경우 입출력 요청이 디스크의 한쪽 끝과 단대쪽 끝에 번갈아 도착한다면 헤드는 디스크를 왕복하며 일을 처리해야 한다.

 

예를 들어, 다음과 같은 디스크 큐가 있다 가정해보자.

FCFS 알고리즘으로 해당 요청을 처리하게 된다면

6 -> 14 -> 45 -> 27 -> 13 -> 30

의 순서로 총 이동거리는 135가 된다.

 

4-2. SSTF(Shortest Seek Time First)

SSTF 기법 헤드의 현재 위치로부터 가장 가까운 위치에 있는 요청을 먼저 처리하는 방식이다.

이 알고리즘은 헤드의 이동거리를 줄여 입출력 효율성을 증가시키지만, 자칫 기아 현상이 발생할 수 있다. 가까운 곳에서 지속적인 요청이 들어오게 된다면, 먼 곳의 요청은 무한히 기다려야 한다.

 

아까와 같은 큐에서 현재 위치가 10이라고 가정해본다면, 가장 먼저 처리되는 것은 13일 것이다. (헤드의 현재 위치에서 탐색거리가 가장 짧은 요청임) 이러한 로직으로 해당 요청을 처리하면

10(가정) -> 13 -> 14 -> 6 -> 27 -> 30 -> 45
의 순서로 총 이동거리는 38이 된다.

 

4-3. SCAN (엘레베이터 알고리즘)

SCAN 기법은 헤드가 현재 진행 중인 방향으로 가장 짧은 탐색 거리에 있는 요청을 처리하는 알고리즘이다. 현재 진행 방향에서 더 이상 처리할 요청이 없으면 방향을 바꾼다.

SCAN 알고리즘에서는 FCFS처럼 불필요한 헤드의 이동이 발생하거나 SSTF처럼 일부 지역이 지나치게 오래 기다리는 현상이 발생하지 않아 효율성, 형평성을 모두 만족하는 알고리즘이다.

하지만, SCAN 기법에서는 모든 실린더 위치의 기다리는 시간이 공평한 것은 아니다. 제일 안쪽이나 바깥쪽 위치보다는 가운데 위치가 기다리는 평균시간이 더 짧기 때문이다.

 

아까와 같은 큐에서 현재 진행방향이 10에서 50 방향이라고 한다면 처리 순서는

10(가정) -> 13 -> 14 -> 27 -> 30 -> 45 -> 6

의 순서가 된다.

10에서 50 방향으로 움직이는데 45까지 처리하고 나면 이제 더 이상 그 방향으로 처리할 요청이 남아있지 않기 때문에 6을 처리한다.

총 이동거리는 74가 된다.

 

4-4. C-SCAN

C-SCAN 기법은 항상 바깥쪽에서 안쪽으로 움직이고, 가장 짧은 탐색 거리를 갖는다. 

SCAN과 다르게 헤드가 다른쪽 끝에 도달해 방향을 바꾼 후에는 요청을 처리하지 않고 곧바로 출발점으로 이동만 한다. 이 방식은 기존보다 더 균일한 탐색시간을 제공한다. 즉 SCAN보다 헤드의 이동거리는 조금 길어지지만 탐색시간의 편차를 줄일 수 있다는 것이 C-SCAN의 장점이다.

 

이 큐에서 현재 위치가 20이라면, 20을 기준으로 안쪽, 즉 왼쪽으로 움직인다. 그러므로 20 다음에 처리되는 것은 14이고, 가장 왼쪽에 있는 6까지 처리했다면 가장 바깥쪽에 있는 45부터 안쪽으로 처리한다.

20(가정) -> 14 -> 13 -> 6 -> 40 -> 30 -> 27

총 이동거리는 61이 된다.

반응형