운영체제 강의노트 정리 - 대용량 저장 구조

대용량 저장 구조

디스크 구조

디스크는 논리적으로 매우 큰 일차원 블록의 배열로 간주된다. 블록은 전송의 최소 단위다. 블록의 크기는 보통 512KB이다.

이 블록들은 디스크의 섹터로 사상되나, 불량 섹터의 존재 가능성 및 트랙당 섹터의 개수가 다를 수 있으므로 논리적 순서를 물리적 순서로 사상하는 것은 쉽지 않다.

디스크 스케줄링

탐색 시간seek time이 디스크의 접근 시간에 가장 큰 영향을 준다.

디스크 입출력 요청은 다음과 같은 정보를 지정한다.

  • 연산의 유형 : 입력 또는 출력
  • 디스크 내의 위치 또는 주소
  • 주기억 장치 내의 위치
  • 전송할 바이트 수

디스크 드라이브와 컨트롤러가 모두 사용 가능하면 입출력 요청은 즉시 처리될 수 있으나, 둘 중 하나가 다른 것을 서비스하고 있으면 요청은 큐에서 대기해야 한다.

FCFS 스케줄링

First-Come-First-Served

가장 단순하며, 헤드 움직임을 최적화하지 않기 때문에 성능이 나쁠 수 있다.

SSTF 스케줄링

Shortest-Seek-Time-First

탐색 시간이 가장 작은 것부터 먼저 처리한다.

굶주림 현상이 발생할 수 있다.

SCAN 스케줄링

한 쪽 끝에서 다른 쪽 끝으로 이동하면서 처리한 다음, 방향을 바꾸어 처리하는 방식이다.

끝에 가까워질 수록 새롭게 도착하는 요청을 바로 처리해주지 못한다.

LOOK 스케줄링 알고리즘은 끝에서 끝으로 이동하나, 트랙의 범위 안에서 끝에서 끝으로 이동한다.

디스크 관리

디스크 포맷팅

물리적 포맷팅 : 디스크를 디스크 컨트롤러가 읽고 쓸 수 있도록 섹터 단위로 나누는 것을 말한다. 섹터는 헤더, 데이터 영역, 트레일러로 구성된다.

논리적 포맷팅 : 파티션을 만든 후 초기 파일 시스템을 적재하는 과정을 말한다.

부트 블록

컴퓨터의 전원을 켜면, 부트스트랩 프로그램이 시스템의 모든 구성 요소를 초기화하고, 디스크에서 운영체제 커널을 주기억 장치에 적재한 다음 커널을 실행한다.

부트스트랩 프로그램은 ROM에 적재되어 있다. 위치가 고정되어 있으므로 실행하기 쉽고, 읽기 전용 기억장치에 있어 바이러스에 감염되지 않는다.

부트스트랩 프로그램을 변경하기 어려우므로, 일부는 디스크에 유지한다. ROM에 있는 프로그램의 역할은 디스크에 있는 프로그램 일부를 주기억 장치에 적재하는 것이다.

부트스트랩 프로그램이 적재되어 있는 디스크 블록을 부트 블록이라 하며, 부트 블록이 있는 디스크를 루트 디스크 또는 시스템 디스크라고 한다.

불량 블록

MS-DOS의 경우 FAT 테이블에 불량 블록을 기록하여 사용하지 않도록 한다.

SCSI와 같은 복잡한 디스크는 여분 섹터를 유지하여 자동으로 교체하여 사용한다.

여분 섹터가 멀리 떨어져 있으면 디스크 스케줄링 알고리즘에 나쁜 영향을 미친다. 섹터 옮기기sector slipping 기법을 사용, 트랙마다 여분 섹터를 두어 불량 섹터 이후의 모든 섹터를 그것의 다음 섹터로 사상되도록 사용한다.