[운영체제] 27. Disk Management & Scheduling 1

이건회·2022년 3월 27일
0

운영체제

목록 보기
26/27

  • 디스크 관리와 스케줄링이다

  • 디스크를 관리하는 최소단위는 섹터다
  • 디스크 외부에서는 논리적 블록 단위로 디스크를 바라본다. 이 블록이 섹터에 매핑 되어 들어간다. 컴퓨터 호스트의 내부에서는 디스크를 접근할때 논리적 블록 단위로 저장하고, 이 주소는 1차원 배열에서 배열의 몇 번째 원소는 달라는 식으로 내용을 요청한다. 따라서 어떤 섹터에 내용을 위치시킬 것인지가 중요하다.
  • 섹터 0번은 가장 바깥쪽 실린더의 첫 트랙의 첫 섹터로 약속되어 있고 부팅과 관련된 정보를 저장한다.

  • 디스크는 원판과 조각으로 나눠진 동심원이 있는데, 각각의 조각이 섹터다.
  • 섹터가 데이터를 읽고 쓰는 요청은 디스크 컨트롤러가 담당한다.

  • 디스크를 처음 만들면 디스크를 컨트롤러가 읽고 쓸수 있는 섹터 단위로 나누는 과정을 피지컬 포매팅(=로우 레벨 포매팅)이라 한다.
  • 각각의 섹터는 로지컬 블록(보통 512bytes)과 부가적 정보를 저장하는데 헤더와 트레일러다. 이에는 제대로 저장이 되었는지 확인하는 ECC나 주소 매핑을 위한 섹터 번호를 저장한다. ECC는 데이터를 아주 작게 요약한 코드다. 해시 함수 등을 저장하여 나중에 데이터를 꺼내 갈 때 ECC값과 저장된 데이터에 대해 ECC를 만든 값을 비교해 같은 값이면 저장 과정에서 문제가 없음을 판단한다. 축약본이므로 모든 오류를 잡지는 못하지만 상당한 에러를 검출할 수 있으며, ECC의 규모에 따라 에러의 수정도 가능하다.
  • 피지컬 포매팅 후 섹터 영역을 하나의 독립적 디스크로 묶어주는 과정을 파티션이라 한다. 파티션 후 각각이 서로 다른 로지컬 디스크가 된다.
  • 파티션 후 각각의 파티션을 파일 시스템이나 스왑 에리어 용도로 쓸수 있는데, 해당 파티션에 파일 시스템을 설치하는 것을 로지컬 포매팅이라 한다. FAT이나 아이노드, free space 등을 구성할 수 있다.
  • 파일 시스템 설치 후 컴퓨터 전원을 켰을 때 파일 시스템의 운영체제가 메모리에 올라와 부팅이 된다. 부팅의 절차는 위와 같다. 메모리 영역 중 전원이 나가도 내용이 유지되는 부분이 ROM이다. 이곳에 부팅을 위한 로더가 저장되어 있다. 컴퓨터 전원을 켜면 cpu 제어권이 ROM 주소를 가리키고, 로더가 실행되어 하드디스크에서 0번 섹터를 메모리에 올리고 실행하라는 지시를 한다. 파일 시스템에서 운영체제 커널의 위치를 찾아 메모리에 올려 실행하면 부팅이 이루어진다.

  • 디스크를 접근하는 접근시간은 어떻게 될까. 액세스 타임은 세 가지 요소로 구성된다.
  • 첫 번째는 seek 타임으로 디스크 헤드가 읽고 쓰는 요청을 한 트랙으로 이동하는데 걸리는 시간이다. 이는 디스크를 접근하는 시간에서 가장 큰 부분을 차지한다.
  • 트랙으로 디스크 헤드가 이동한 후에는 디스크가 항상 회전하므로 원판의 섹터가 헤드에게 와야 데이터를 전달할 수 있다. 따라서 원판이 회전해 섹터가 헤더로 오는 시간을 rotational latency라 한다. 이는 seek보다 짧다.
  • 실제로 헤드가 데이터를 읽고 쓰는 시간을 transfer 타임이라 한다. 매우 작은 시간을 차지한다.
  • 따라서 한 번의 seek로 많은 양을 transfer해야 효율적이다.
  • disk bandwidth는 단위 시간 동안 전송되는 바이트의 수다. 이것이 요청할라면 seek 타임을 줄여야 한다. 이를 위해 디스크 스케줄링이 필요하다. 요청의 순서를 어떻게 처리할지 결정하는 것이다.

  • 스케줄링 알고리즘은 다음과 같다. 디스크 스케줄러는 로지컬 블록 정보를 보고 스케줄링을 한다.

  • FCFS는 들어온 순서대로 처리하는 방법이다. 다음과 같이 바깥쪽 안쪽 트랙이 번갈아 요청이 오면 헤드의 이동거리가 길어져 비효율적이다.

  • SSTF는 현재 헤드 위치에서 가장 가까운 요청을 처리한다. 이러면 헤드의 이동거리가 FCFS에 비해 줄어든다. 그러나 멀리 있는 주소 영역의 요청에 대한 기아 문제가 발생할 수 있다.

  • SCAN은 엘리베이터 스케줄링이라고도 부른다. 큐의 어떤 요청이 들어왔는지에 대해 상관없이, 한 쪽 방향으로 움직일때 가는 길목으로 가는 요청만 처리하는 것이다. 마치 엘레베이터가 올라갈때는 올라가는 요청만 받아들이는 것과 같다. 디스크 헤드의 이동거리가 짧으면서 기아 문제도 발생하지 않는다. 그러나 실린더의 위치에 따라 대기 시간이 다른 문제가 있다. 예를 들어 가운데 부분은 기다리는 시간의 예상치가 짧다. 그러나 가장자리는 막 도착을 했을 때 이미 헤드가 떠나면 갔다 올때까지 기다려야 하므로 최악의 경우 한 바퀴를 기다릴 수도 있다.
  • 기본적으로 SCAN에 기반한 스케줄링 알고리즘을 사용한다.

  • C-SCAN 방법은 헤더가 이동하며 가는 길목에 있는 모든 요청을 다 처리한다. 그러고 반대쪽 끝으로 도달하면 다시 출발점으로 돌아온다. 돌아올 때 마주치는 요청은 모두 무시한다. 이 경우 이동거리는 다소 길어지지만 큐에 들어온 요청들의 대기시간은 균일하게 보장한다.

  • 변형 알고리즘으로 N-SCAN이 있다. 디스크 헤드가 출발할때 이미 큐에 들어온 요청만 처리하고 출발 후 들어온 요청은 끝에 도달하고 다시 돌아올 때 처리하는 것이다.
  • Scan과 C-Scan에서는 무조건 끝에서 끝으로 이동하지만, Look 과 C-Look는현재 이동하는 방향에서 더 이상 요청이 없으면 바로 방향을 바꿔 버린다.

  • 헤드가 이동하다가 183~199사이의 요청이 없으므로 바로 반대 방향으로 이동하는 모습을 볼 수 있다. 또 14번 전에는 요청이 없으므로 바로 방향을 바꾼다.

  • SCAN에 기반한 알고리즘을 현대에는 많이 쓴다. 또 파일의 할당 방법에 따라 디스크 스케줄링의 성능에 영향을 준다.
  • 또 merge를 하여 그때그때 개별적이 아닌 여러 요청을 묶어 한꺼번에 처리하는 것도 최근 많이 쓰는 방법이다.
profile
하마드

0개의 댓글