디스크 할당 방법과 디스크 빈 공간 관리

minhee·2020년 11월 17일
0

디스크 할당 방법

동일한 디스크에 많은 파일들을 효율적으로 저장하는 방법이 무엇일까
운영체제에서는 이러한 파일들을 공간에 배치하고 빠르게 엑세스 할 수 있는 최적의 방법을 선택한다.

디스크를 할당할 때 널리 사용되는 방법은 3가지가 있다.
1. 연속
2. 연결
3. 인덱스 할당 이다.

연속할당

연속할당

  • 파일을 디스크의 연속된 기억공간에 할당하는 방법으로 생성된 파일 크기만큼의 공간이 있어야한
    다.
  • 파일들을 디스크의 연속적인 주소들의 집합에 할당하는 방식이다.
  • 메인 메모리의 동적 분할방식과 유사한 파일의 연속 할당은 주소와 첫 번째 블록의 갯수에 의해 정의된다.

문제점

  1. 외부 단편화 발생
  • 파일들이 할당되고 삭제되면서 디스크 공간들이 조그만 조각들로 나누어진다.
  • 전체 디스크 공간이 요규량을 만족시킬 때에도 연속된 공간이 아니면 외부 단편화가 발생한다.
  • 외부 단편화는 디스크 전체 크기와 평균 파일 크기에 따라 다르게 나타난다
해결법

사용자가 전체 파일 시스템을 다른 플로피 디스크 혹은 테이프에 복사하는 재포장 루틴을 수행하여 플로피 디스크를 완전히 비워 커다란 연속 사용가능 공간으로 생성한다.

  1. 파일 공간 크기 결정
  • 파일을 위해서 얼마나 많은 공간이 필요한지 결정하는 것으로 생성자는 파일 복사 등의 과정을 통하여 생성할 파일의 크기를 알 수 있다.
  • 일반적으로 출력되는 파일읭 크기를 평가하긴 어렵다.
해결법
  • 사용자 프로그램이 오류 메시지를 출력하고 종료되면 사용자가 더 많은 공간을 할당하여 프로그램을 다시 수행시키는 방법
    But 더 많은 비용이 들 수 있다.
  • 아주 큰 공간을 찾아서 파일의 항목들을 새로운 공간에 복사하고 이전 공간을 해제시키는 방법
    But 시간 제약이 있다.

불연속 할당

연결할당

  • 각 파일은 디스크 블록들의 리스트에 연결되는데 디스크 블록들은 디스크 내의 어느 곳에 흩어져 있어도 된다.
  • 디렉터리는 파일의 첫 번째와 마지막 블록들의 포인터를 가지고 있다. -> 연결리스트와 같다

특징

  1. 순차 엑세스 파일에 적합하다.
  • 디스크 공간의 압축과정은 없으나 순차적 엑세스 파일에만 효과적으로 사용 가능하다.
  • 파일의 i번째 블록을 찾으려면 파일의 처음부터 시작해야해서 i번째 블록을 얻기 위해선 포인터들을 따라가야한다. -> 직접 엑세스 기능을 지원할 수 없다
  1. 포인터들을 위한 공간이 필요하다.
  • 포인터가 512워드의 블록 중에 2워드를 필요로 한다면 디스크의 나머지가 포인터로 사용되기 때문에 많은 공간을 필요로 하게 됨
  • 한개 두개라면 부담이 되지 않지만 수천개 수만개가 되면 무시할 수 없는 크기겠
    죠.?
  1. 신뢰성
  • 각 파일이 포인터로 연결되기 때문에 포인터를 잃어버리거나 파괴되면 파일을 찾아갈 수 없다.
  1. 탐색 시간 증가
  • 파일들이 디스크 블록 위치로 흩어져 파일에 대한 탐색시간이 증가한다.

인덱스 할당


1. 각 파일들은 디스크 블록 주소를 모아 놓은 배열인 인덱스 블록을 가진다.
2. 인덱스 블록의 i번째 항목은 파일의 i번째 블록을 가리킨다.
3. 디렉토리는 인덱스 블록의 주소를 가지고 있다.
4. i번째 블록을 읽기 위해서는 인덱스 블록 항목에 있는 i번째 항목에서 포인터를 얻어서 그 블록을 읽는다.

문제점

공간 낭비 -> 연결 할당의 포인터 공간보다 인덱스 할당이 더 크다.

디스크 빈 공간 관리

  1. 비트벡터
  • 빈 공간 리스트는 비트맵 또는 비트벡터로 구현할 수 있다.
  • 각 블록의 사용여부를 1비트로 표현한다. -> 비트가 비어있다면 0 할당되어 있다면 1
  • 액세스가 간편하고 디스크 내에 연속적인 n개의 빈 블록을 찾을 때 효율적이다.
  • 대형컴퓨터보다 마이크로 컴퓨터 환경에 알맞다.
  1. 연결리스트
  • 모든 빈 디스크 블록들을 연결시키는 것이다.
  • 첫 번째 빈 블록 안에 다음의 빈 디스크 블록의 포인터를 갖고 있도록 구현하는 방법이다.
  • 리스트를 탐색하는데 있어 각 블록을 모두 읽어야하기 때문에 비효율적이다 -> 실질적인 입출력 필요
  1. 인덱스 블록(그룹핑)
  • 인덱스 블록은 빈 리스트 액세스가 변경된 것이다.
  • 다수 개의 사용 가능 블록들의 주소를 쉽게 찾을 수 있다.

0개의 댓글