운영 체제 17: 외부 메모리 구성 및 파일 스토리지 관리

목차

1. 외부 저장소 구성

(1) 지속적인 조직

(2) 링크 조직

2.1 - 암시적 연결

2.2 - 명시적 연결

(3) 인덱스 구성 방법

3.1 - 단일 수준 색인 구성

3.2 - 다단계 색인 구성

3.3 - 증분 색인 구성

2. 파일 저장공간 관리

(1) 자유 목록 방식과 자유 연결 목록 방식

1.1 - 무료 목록 방법

1.2 - 무료 목록 방법

(2) 비트맵 방식

(3) 그룹 링크 방식

3.1 - 자유 블록 구성

3.2 - 사용 가능한 디스크 블록의 할당 및 회수


1. 외부 저장소 구성

        파일의 물리적 구조는 외부 저장소의 구성과 직접적으로 관련됩니다. 다른 스토리지 구성 방법의 경우 다른 파일 물리적 구조가 형성됩니다. 현재 일반적으로 사용되는 외부 저장소 구성 방법은 다음과 같습니다.

  • 지속적인 조직 . 파일이 연속적으로 구성되면 파일마다 연속적인 디스크 공간이 할당되며 이렇게 형성된 파일의 물리적 구조는 순차적인 파일 구조가 됩니다.
  • 링크가 구성되는 방식 . 파일에 대해 링크 구성 방식을 사용하면 파일마다 불연속적인 디스크 공간을 할당할 수 있으며 파일의 모든 디스크 블록이 링크 포인터를 통해 서로 연결되어 링크된 파일 구조를 형성합니다.
  • 색인 조직 . 파일에 색인 구성 방법을 채택하면 색인 파일 구조가 형성됩니다.

//다양한 파일 구성 방법의 장단점을 배열, 연결 목록, 해시 테이블 등과 같은 해당 데이터 구조 성능의 장단점과 비교할 수 있습니다.

(1) 지속적인 조직

        연속 구성 방법은 연속 할당 방법이라고도 하며 각 파일에 대해 인접한 디스크 블록 그룹을 할당해야 합니다 . 일반적으로 그들은 모두 한 트랙에 있으며 읽기/쓰기 중에 머리를 움직일 필요가 없습니다 . 순차 구성 방식을 사용하면 논리 파일의 레코드를 인접한 물리 디스크 블록에 순차적으로 저장할 수 있는데, 이렇게 형성된 파일 구조를 순차 파일 구조라고 하고 이때의 물리 파일을 순차 파일 이라고 한다 . //논리적 레코드 순서가 디스크 블록의 순서와 일치하도록 순차 파일을 생성합니다.

        이 구성 모드는 논리 파일의 레코드 순서가 파일이 저장소의 디스크 블록을 차지하는 순서 와 일치하도록 합니다 . 시스템이 파일이 저장된 주소를 찾기 위해서는 파일의 첫 번째 레코드가 위치한 디스크 블록 번호와 파일 길이(디스크 블록 단위)를 "파일 물리적 주소" 필드에 기록해야 합니다. 디렉토리 항목.

        직렬 구성 방법의 주요 이점: 시퀀스에 대한 쉽고 빠른 액세스 . 연속 할당에 의해 로드된 파일이 차지하는 디스크 블록은 하나 또는 여러 개의 인접한 트랙에 위치할 수 있으며 자기 헤드의 이동 거리가 가장 작기 때문에 이러한 파일 액세스 속도는 여러 저장 공간 할당 방법 중 하나입니다. 가장 키가 큰 것. //가장 빠름

        직렬 구성 방법의 주요 단점:

  • 연속 저장 공간을 할당하면 많은 외부 조각이 생성되어 외부 저장 공간의 활용도가 크게 떨어집니다. 이물질을 제거하기 위해 콤팩트 방법을 정기적으로 사용하면 기계 시간이 많이 걸립니다.
  • 파일의 길이는 미리 알고 있어야 합니다 . 간혹 파일의 크기를 추정할 수 밖에 없는데, 일반적으로 파일 길이가 실제보다 크게 추정되어(미흡한 예방) 낭비가 발생합니다.
  • 레코드를 삭제하고 삽입할 수 있는 유연성이 없습니다 . 파일의 순서를 유지하기 위해 레코드 삭제 및 삽입 시 인접한 레코드를 물리적으로 이동하고 파일 크기를 동적으로 변경해야 합니다.

(2) 링크 조직

        링크 구성 방식을 사용하면 파일에 여러 개의 불연속적인 디스크 블록을 할당할 수 있으며 , 동일한 파일에 속한 여러 개의 개별 디스크 블록을 각 디스크 블록의 링크 포인터를 통해 연결 목록으로 연결하여 물리적 파일을 구성합니다. 링크된 파일이라고 합니다.

        링크 구성 방식의 주요 장점은 다음과 같습니다. //지속 할당 방식의 단점 해결

  • 디스크의 외부 조각화가 제거되고 외부 메모리의 사용률이 향상됩니다.
  • 레코드를 삽입, 삭제 및 수정하는 것은 매우 쉽습니다.
  • 파일 크기를 미리 알지 않고도 파일의 동적 증가에 적응할 수 있습니다.

연결 방법은 암시적 연결명시적 연결의 두 가지 형태         로 나눌 수 있습니다 .

2.1 - 암시적 연결

        묵시적 링크 구성 방법을 사용할 때 파일 디렉토리의 각 디렉토리 항목에는 링크된 파일의 첫 번째 및 마지막 디스크 블록에 대한 포인터가 포함되어야 하며 각 디스크 블록에는 해당 블록에 대한 다음 A 포인터에 대한 포인터가 포함되어야 합니다. 아래 그림과 같이:

// 위 그림의 링크 순서는 9->16->1->10->25, 총 5개의 디스크 블록 사용

        포인터가 4바이트를 차지하는 경우 사용자는 블록 크기가 512바이트인 디스크에 대해 블록당 508바이트만 사용할 수 있습니다. // 포인터가 너무 많아 디스크 공간 낭비

        암시적 링크 구성의 주요 문제는 순차 액세스 에만 . 또한 링크 포인터를 통해서만 많은 수의 개별 디스크 블록을 연결하는 것은 포인터 중 하나가 실패하는 한 전체 체인의 연결이 끊어지기 때문에 안정성이 떨어 집니다. //무작위 액세스는 비효율적임 + 낮은 신뢰성

        포인터가 차지하는 디스크 공간을 개선하기 위한 아이디어:

        검색 속도를 높이고 포인터가 차지하는 저장 공간을 줄이기 위해 여러 개의 디스크 블록을 클러스터로 구성하고 디스크 블록 을 클러스터 단위로 할당 하지만 이 방법은 내부 단편화를 증가시킵니다 . //여러 개의 디스크를 묶고 연속 할당과 체인 할당의 타협 버전인 포인터를 사용하는 것입니다.

2.2 - 명시적 연결

        파일의 각 물리적 블록을 연결하는 데 사용되는 포인터는 메모리 의 연결 테이블 에 명시적으로 저장되며 전체 디스크에는 하나의 테이블만 설정됩니다. //포인터는 더 이상 물리적 디스크 블록에 암시적으로 배치되지 않고 메모리의 테이블에 배치됩니다.

        위의 그림과 같이 테이블의 일련 번호는 물리 디스크 블록 번호이며 0에서 시작하여 N - 1(N은 총 디스크 블록 수)입니다. 각 테이블 항목, 즉 다음 디스크 블록 번호에 링크 포인터를 저장합니다. //링크 시퀀스: 2->4->5->1

        이 표에서 파일의 FCB의 "물리적 주소" 필드에는 특정 파일에 속하는 첫 번째 디스크 블록 번호가 파일 주소로 채워져 있습니다. 레코드를 찾는 과정이 메모리에서 이루어지므로 검색 속도가 크게 향상될 뿐만 아니라 디스크 액세스 횟수도 크게 줄어듭니다 . //주소 속도 업

        파일에 할당된 모든 디스크 블록 번호가 테이블에 있으므로 이 테이블을 파일 할당 테이블 FAT(File Allocation Table)라고 합니다.

//파일 할당 테이블의 실제 적용 과정에서 FAT와 디스크 크기 및 사용률 사이에는 항상 모순이 있음을 알 수 있습니다.

Windows 시스템의 FAT12 -> FAT16 -> FAT32 -> NTFS:

        FAT12는 디스크 블록을 기본 할당 단위로 사용하며 각 FAT 항목은 12비트를 차지하므로 테이블에 최대 4096(2^12)개의 항목이 있습니다. //디스크 블록의 크기가 고정되어 있으면 저장 공간의 크기가 제한되므로 클러스터(여러 디스크 블록의 조합)를 사용한다.

        FAT16은  테이블 항목 수를 16개로 늘리고 최대 테이블 항목 수를 65536(2^16)으로 늘려 하드 디스크 용량 증가를 지원합니다. //테이블 항목이 고정되어 있고 디스크 용량이 너무 큰 경우 클러스터가 클수록(여러 디스크 블록의 조합) 클러스터가 클수록 내부 조각이 많아집니다.

        FAT32는 테이블 항목의 수를 32비트로 늘려 더 작은 클러스터를 지원하고 디스크의 메모리 사용률을 높일 수 있습니다. // FAT32가 FAT16 파일보다 크기 때문에 액세스 효율이 FAT16보다 느리기 때문에 디스크 공간이 증가함에 따라 과도한 내부 조각화 문제를 해결하는 것이 주된 이유입니다  .

        NTFS는 클러스터를 디스크 공간 할당 및 복구의 기본 단위로 사용합니다 . 파일은 여러 클러스터를 점유하고 클러스터는 하나의 파일에만 속합니다. 이렇게 하면 파일에 대한 디스크 공간을 할당할 때 디스크 블록의 크기를 알 필요가 없으며 서로 다른 디스크 용량에 따라 해당 크기의 클러스터를 선택하기만 하면 NTFS가 물리적 블록 크기와 독립적입니다. 디스크. //  NTFS (New Technology File System)는 클러스터를 기본 단위로 합니다.

(3) 인덱스 구성 방법

        링크 구성 방법이 연속 구성 방법에 존재하는 문제를 해결하지만 다음과 같은 두 가지 다른 문제가 있습니다.

  • 효율적인 직접접속을 지원할 수 없으며 , 대용량 파일에 접근하기 위해서는 FAT에서 많은 디스크 블록 번호를 순차적으로 검색해야 합니다.
  • FAT는 많은 메모리 공간을 차지해야 하며 , 디스크 용량이 큰 경우 FAT는 수 MB 이상의 메모리 공간을 차지할 수 있습니다.

3.1 - 단일 수준 색인 구성

        생각: 사실 특정 파일을 열 때 파일이 차지하는 디스크 블록의 수만 메모리에 로드하면 되고 전체 FAT를 메모리에 로드할 필요는 없습니다 .

        인덱스 할당 방식은 각 파일에 인덱스 블록(테이블)을 할당 하고 파일에 할당된 모든 디스크 블록 번호를 인덱스 블록에 기록하는 것이다 . 파일을 생성할 때 생성된 디렉토리 항목의 인덱스 블록에 대한 포인터만 채우면 됩니다.

        인덱스 구성의 주요 이점은 직접 액세스를 지원한다는 것입니다 . 파일의 i 번째 디스크 블록을 읽을 때 i 번째 디스크 블록의 디스크 블록 번호는 파일의 인덱스 블록에서 직접 찾을 수 있으며 인덱스 할당 방법은 외부 조각을 생성하지 않습니다 . . 파일이 크면 인덱스 할당 방법이 링크 할당 방법보다 확실히 낫습니다. // 중간 및 큰 파일에 적합

        인덱스 구성 방식의 가장 큰 문제점은 인덱스 파일이 생성될 때마다 파일에 대한 인덱스 블록을 할당하고 파일에 할당된 모든 디스크 블록 번호를 기록해야 한다는 점입니다. 각 인덱스 블록에는 수백 개의 블록 번호를 저장할 수 있습니다. 그러나 중소형 파일의 경우 일반적으로 디스크 블록의 수에서 수십 개 또는 그 이하만 차지하지만 여전히 인덱스 블록을 할당해야 합니다. 작은 파일에 인덱스 할당 방법을 사용하면 인덱스 블록의 활용률이 매우 낮아지는 것을 볼 수 있습니다 . //작은 파일의 경우 인덱스 블록 공간 낭비

3.2 - 다단계 색인 구성

        파일이 너무 크고 인덱스 블록이 너무 많으면 이러한 인덱스 블록에 대해 다른 수준의 인덱스를 설정해야 합니다. 이를 1단계 인덱스라고 합니다. 즉, 시스템은 다른 인덱스 블록을 파일의 인덱스 블록으로 할당합니다. 이 인덱스 테이블에는 1차 인덱스. , 2차 블록, ... 및 기타 인덱스 블록 디스크 블록 번호가 채워져 2단계 인덱스 할당 방식을 형성합니다. 파일이 매우 크면 3단계 및 4단계 인덱스 할당 방법도 사용할 수 있습니다. //인덱스 블록에 대한 인덱스 생성

        다단계 인덱싱의 주요 장점은 대용량 파일의 조회 속도를 크게 높일 수 있다는 것입니다 . 주요 단점은 디스크 블록에 액세스할 때 작은 파일의 경우에도 인덱스 수준의 수에 따라 디스크를 시작해야 하는 횟수가 증가한다는 것입니다. 실제 상황은 일반적으로 대부분의 중간 및 작은 파일이 있는 반면 큰 파일은 드뭅니다. 따라서 파일 시스템에 다단계 인덱스 구성 방식만 채택한다면 이상적인 효과를 얻을 수 없음을 알 수 있다. //다단계 인덱스 방식은 대용량 파일 검색에 적합

3.3 - 증분 색인 구성

        아이디어: 소형, 중형, 대형 및 초대형 작업을 보다 포괄적으로 처리하기 위해 다양한 구성 방법을 채택하여 파일의 물리적 구조를 형성할 수 있습니다 . //작은 파일은 직접 주소 지정을 사용하고 중간 파일은 단일 수준 인덱스를 사용하며 큰 파일은 다단계 인덱스를 사용합니다.

        소위 증 분식 인덱스 구성 방식은 위에서 언급한 기본 아이디어를 기반으로 구성 되며 직접 주소 지정 방식을 채택할 뿐만 아니라 단일 수준 및 다중 수준 지표 구성 방식(간접 주소 지정)을 채택합니다 . 이러한 유형의 조직을 종종 하이브리드 조직 이라고 합니다 . UNIX 시스템에서 사용되는 조직입니다.

        UNIX System V의 인덱스 노드에는 13개의 주소 항목 즉, addr-0 ~ addr-12가 있으며 시스템의 외부 메모리 구성은 다음과 같습니다.

  1. 직접 주소 . 파일의 검색 속도를 향상시키기 위해 인덱스 노드에 직접 주소 항목(일반적으로 10, addr-1 ~ addr-9 )을 설정하여 직접 주소(디스크 블록 번호)를 저장하여 직접 가져올 수 있도록 합니다. 파일의 디스크 블록 주소 . 이 주소 지정 방법을 일반적으로 직접 주소 지정 이라고 합니다 .
  2. 간접 주소 . 대형 및 중형 파일의 경우 직접 주소만 사용하는 것은 비현실적입니다. 이러한 이유로 인덱스 노드에서 주소 항목 addr-10을 사용하여 간접 주소(단일 간접)를 제공 해야 합니다 . 이 방법의 핵심은 단일 수준 인덱스 할당 방법입니다.
  3. 다중 간접 주소 . 파일 길이가 너무 크면 하나의 간접 주소와 10개의 직접 주소 항목을 사용할 때 주소 공간이 여전히 부족하므로 시스템은 두 번째 간접 주소 할당 방법을 채택해야 합니다. 이때 주소 항목 addr-11을 이용하여 2차 간접 주소 (double indirect)를 제공한다. 이 방식의 핵심은 2단계 인덱스 할당 방식이다. 마찬가지로 주소 항목 addr-12는 삼중 간접 주소로 사용됩니다.

2. 파일 저장공간 관리

        위의 파일 구성 방법 중 하나를 구현하려면 파일에 대한 디스크 블록을 할당해야 하므로 디스크에서 할당할 수 있는 디스크 블록을 알아야 합니다. 따라서 파일에 디스크를 할당할 때 파일 할당 테이블 외에 시스템 할당 가능한 저장 공간에 해당하는 데이터 구조도 설정해야 합니다. 할당 가능 공간 상황. //파일 할당 디스크 -> 파일 할당 테이블 + 디스크 할당 테이블

        또한 디스크 블록을 할당하고 회수하기 위한 수단도 제공되어야 합니다. 할당 및 복구 방법에 관계없이 저장 공간의 기본 할당 단위는 바이트가 아닌 디스크 블록 입니다 .

        다음은 일반적으로 사용되는 몇 가지 파일 저장 공간 관리 방법을 소개합니다.

(1) 자유 목록 방식과 자유 연결 목록 방식

1.1 - 무료 목록 방법

        무료 목록이란 무엇입니까?

        시스템은 외부 저장소의 모든 여유 영역 에 대한 여유 목록을 생성하고 각 여유 영역은 여유 항목 에 해당하며 항목에는 항목 번호 , 여유 영역의 첫 번째 디스크 블록 번호 및 해당 영역의 여유 블록 번호가 포함됩니다. . 번호 및 기타 정보. 그런 다음 아래 그림과 같이 모든 여유 영역을 시작 디스크 블록 번호의 오름차순으로 정렬하여 여유 디스크 블록 테이블을 형성합니다. //사용 가능한 목록은 파일의 지속적인 할당에 사용됩니다.

        저장 공간 할당 및 복구

        여유 익스텐트의 할당은 메모리의 파티션(동적) 할당과 유사합니다 . 최초 적합 알고리즘과 최적 알고리즘을 채택합니다 .저장 공간의 활용률은 거의 동일하며 최악 적합보다 우수합니다. 연산.

        시스템이 새로 생성된 파일에 대해 여유 디스크 블록을 할당할 때 먼저 여유 목록의 항목을 순차적으로 검색하여 요구 사항을 충족할 수 있는 크기의 첫 번째 여유 영역을 찾은 다음 디스크 영역을 사용자에게 할당합니다(프로세스). 무료 목록을 수정하는 동안. //적응 알고리즘 할당

        시스템이 사용자가 해제한 저장 공간을 회수할 때도 메모리 회수와 유사한 방식을 채택한다. free list와 인접 목록을 결합해야 합니다. //사용 가능한 영역 병합 재활용

        연속할당 방식은 메모리 할당에 거의 사용되지 않으나 외부 메모리 관리에 있어서는 할당 속도가 빠르고 디스크에 접근하는 I/O 빈도를 줄일 수 있기 때문에 주로 사용 된다. 많은 할당 방법은 여전히 ​​그 자리를 가지고 있습니다.

1.2 - 무료 목록 방법

        자유 연결 목록 방법은 모든 자유 익스텐트를 자유 체인으로 끌어오는 것 입니다 . 체인을 형성하는 데 사용되는 다양한 기본 요소에 따라 연결 목록은 자유 디스크 블록 체인자유 디스크 영역 체인의 두 가지 형식으로 나눌 수 있습니다 . //체인을 구성하는 단위가 다름

        무료 디스크 체인

        자유 디스크 블록 체인은 디스크의 모든 여유 공간을 디스크 블록 단위의 체인으로 끌어 오고 각 디스크 블록에는 후속 디스크 블록에 대한 포인터가 있습니다.

        사용자가 파일 생성을 위한 저장 공간 할당을 요청하면 시스템은 체인의 선두부터 시작하여 순차적으로 여유 디스크 블록을 적절한 수만큼 제거하여 사용자에게 할당합니다. 사용자가 파일 삭제로 인해 저장 공간을 해제하면 시스템은 회수된 디스크 블록을 여유 디스크 블록 체인 끝에 차례로 걸어둡니다. //디스크 할당 및 재활용

        이 방법의 장점은 디스크 블록을 할당하고 회수하는 과정이 매우 간단하지만 파일에 디스크 블록을 할당할 때 그 작업을 여러 번 반복해야 할 수 있고 할당 및 회수의 효율성이 낮다는 점이다. 그리고 디스크 블록을 기반으로 하기 때문에 해당 자유 디스크 블록 체인이 매우 길어질 것입니다. //여러 디스크 블록을 할당하고 회수할 때 효율성이 낮음

        무료 익스텐트 체인

        여유 익스텐트 체인은 디스크 의 모든 여유 익스텐트 (각 익스텐트는 여러 디스크 블록을 포함할 수 있음)를 체인으로 가져옵니다. 다음 여유 익스텐트를 나타내는 포인터를 포함하는 것 외에도 각 익스텐트에는 익스텐트의 크기(디스크 블록 수)를 나타낼 수 있는 정보도 있어야 합니다.

        익스텐트를 할당하는 방법은 메모리의 동적 파티션 할당과 유사하며 일반적으로 최초 적합 알고리즘을 채택합니다. 익스텐트를 재확보할 때 재확보된 영역도 인접한 여유 익스텐트와 병합해야 합니다. 첫 번째 적응 알고리즘을 사용할 때 여유 범위의 검색 속도를 향상시키기 위해 명시적 연결 방법을 사용할 수 있습니다. 즉, 메모리의 여유 범위에 대해 연결 목록을 설정합니다.

         무료 블록체인의 장점과 단점은 무료 블록체인과 정반대입니다 . 즉, 할당 및 복구 프로세스가 더 복잡하지만 할당 및 수집 효율성이 더 높을 수 있으며 여러 개의 연속 블록이 할당됩니다. 매번 파일에 대해 그리고 여유 익스텐트 체인이 짧습니다.

(2) 비트맵 방식

        비트뷰란?

        비트맵은 이진 비트를 사용하여 디스크의 디스크 블록 사용량을 나타냅니다 . 값이 "0"이면 해당 디스크 블록이 비어 있음을 의미하고 "1"이면 할당되었음을 의미합니다. 핵심은 1비트의 두 상태를 사용하여 자유 및 할당의 두 가지 상황을 표시하는 것입니다 .

        디스크의 모든 디스크 블록에는 해당하는 이진 비트가 있으므로 모든 디스크 블록에 해당하는 비트 집합을 비트 맵 이라고 합니다 . 일반적으로 mxn 숫자는 비트맵을 형성하는 데 사용할 수 있으며 mxn은 다음 그림과 같이 디스크의 총 블록 수와 같습니다. 비트맵은 2차원 배열 맵 [ m, n ]으로 설명할 수도 있습니다. //이진 비트는 디스크 블록을 나타냅니다.

        디스크 할당

비트맵에 따라 디스크 블록을 할당할 때 //검색->변환->수정의         세 단계로 나눌 수 있습니다.

  1. 비트맵은 값이 "0"인 이진 비트를 찾기 위해 순차적으로 스캔됩니다.
  2. 찾은 이진 비트를 해당 디스크 블록 번호로 변환합니다.
  3. map[i, j] = 1이 되도록 비트맵을 수정합니다.

        디스크 재활용

        디스크 블록의 복구는 두 단계로 나뉩니다: // 변환 -> 수정

  1. 회수된 블록의 블록 번호를 비트맵의 행 및 열 번호로 변환합니다.
  2. 비트맵을 수정합니다. 맵[i, j] = 0으로 둡니다.

        비트 보기의 가장 큰 장점은 맵에서 인접한 빈 디스크 블록 또는 빈 디스크 블록 그룹을 쉽게 찾을 수 있다는 것입니다 . 예를 들어, 6개의 인접한 여유 디스크 블록을 찾아야 하는 경우 비트맵에서 연속적으로 값이 "0"인 6비트만 찾으면 됩니다.

        또한 비트맵이 작고 공간을 덜 차지하기 때문에 메모리에 저장할 수 있어 익스텐트가 할당될 때마다 익스텐트 할당 테이블을 메모리로 읽어들일 필요가 없어 많은 디스크를 절약할 수 있다. 작업을 시작합니다.

//비트 뷰가 차지하는 공간 아래에서 검색 속도가 빠름

        따라서 비트맵은 CP/M, Apple-DOS 및 기타 OS와 같은 마이크로컴퓨터 및 미니컴퓨터에서 자주 사용됩니다 .

(3) 그룹 링크 방식

자유 목록 방법이나 자유 연결 목록 방법은 모두 대형 파일 시스템에 적합하지 않습니다. 이렇게 하면 자유 목록이나 자유 연결 목록이 너무 길어         지기 때문입니다 . UNIX 시스템에서는 위의 두 가지 방식을 결합하여 형성한 여유 디스크 블록 관리 방식인 그룹 체이닝 방식을 채택하고 있는데, 이는 위 두 방식의 장점을 모두 가지고 있으면서도 두 방식의 단점을 모두 극복한 방식이다. 테이블이 너무 길다. // 자유 목록 + 자유 연결 목록

3.1 - 자유 블록 구성

        사용 가능한 디스크 블록 번호 스택: 현재 사용 가능한 사용 가능한 디스크 블록 그룹의 디스크 블록 번호(최대 100개 숫자) 와 스택에 남아 있는 사용 가능한 디스크 블록(숫자)의 N개를 저장하는 데 사용됩니다. 그런데 N은 스택의 최상위 포인터로도 두 배로 사용됩니다. 예를 들어 N = 100 이면 S.free(99) 를 가리킵니다 . //스택을 사용하여 디스크 블록 번호를 저장합니다. 각 스택은 100개의 디스크 블록을 저장합니다.

        스택은 중요한 리소스이므로 한 번에 하나의 프로세스만 액세스할 수 있으므로 시스템은 스택에 대한 잠금을 설정합니다 . 아래 그림은 여유 디스크 블록 번호 스택의 구조를 보여줍니다. 그 중 S.free(0) 은 스택의 맨 아래이고, 스택이 가득 찼을 때 스택의 맨 위는 S.free(99) 입니다 .

        파일 영역: 파일 영역의 모든 여유 디스크 블록은 여러 그룹으로 나뉩니다. 예를 들어, 100개의 디스크 블록마다 하나의 그룹으로 간주됩니다. 디스크에 10,000개의 디스크 블록이 있고 각 블록의 크기는 1KB라고 가정하고 그 중 201번 ~ 7999번 디스크 블록은 파일을 저장하는 데 사용되는 즉, 파일 영역으로 사용됩니다. 이 영역의 마지막 블록 번호 그룹은 7901 ~ 7999 , 마지막 그룹은 7801 ~ 7900 , 끝에서 두 번째 그룹의 블록 번호는 301 ~ 400 , 첫 번째 그룹은 위 그림과 같이 201 ~ 300이어야 합니다.

        디스크 블록 체인: 각 그룹에 포함된 총 디스크 블록 수 N이 그룹의 모든 디스크 블록 번호를 이전 그룹의 첫 번째 디스크 블록의 S.free(0) ~ S.free(99) 에 기록합니다 . 이러한 방식으로 각 그룹의 첫 번째 디스크 블록을 체인으로 연결할 수 있습니다.

        여유 디스크 블록 번호: 총 디스크 블록 수 와 첫 번째 그룹의 모든 디스크 블록 번호를 현재 할당 가능한 여유 디스크 블록 수로 여유 디스크 블록 번호 스택에 기록합니다 .

        End sign: 마지막 그룹은 디스크 블록이 99 개 뿐이고 디스크 블록 번호는 이전 그룹의 S.free(1) ~ Sfree(99) 에 각각 기록되고 S.free(0) 에는 "0" 이 저장된다 . ”, 자유 디스크 블록 체인의 끝 기호로 . (참고: 마지막 그룹의 디스크 블록 수는 가용 디스크 블록을 의미하므로 100이 아닌 99여야 합니다. 그 수는 (1 ~ 99)여야 하며, 여유 디스크 블록 체인 끝의 숫자는 0입니다. 징후.)

3.2 - 사용 가능한 디스크 블록의 할당 및 회수

        시스템이 사용자를 위해 파일에 필요한 디스크 블록을 할당하려면 디스크 블록 할당 프로세스를 호출하여 완료해야 합니다.

        프로세스는 먼저 free 디스크 블록 번호 스택이 잠겨 있는지 확인하고 그렇지 않은 경우 스택의 맨 위에서 free 디스크 블록 번호를 가져와 해당 디스크 블록을 사용자에게 할당한 다음 포인터를 맨 위로 이동합니다. 한 칸씩 쌓습니다.

        블록 번호가 이미 스택의 맨 아래에 있는 경우, 즉 S.free(0) 현재 스택에서 할당할 수 있는 마지막 블록 번호입니다. 사용 가능한 디스크 블록 번호의 다음 그룹은 디스크 블록 번호에 해당하는 디스크 블록에 기록되므로 스택 맨 아래 디스크 블록 번호에 해당하는 디스크 블록의 내용을 스택으로 읽기 위해 디스크 읽기 프로세스를 호출해야 합니다. 새로운 디스크 블록 번호 블록 번호 스택의 내용 및 원래 스택의 맨 아래에 해당하는 디스크 블록을 할당합니다(그 안의 유용한 데이터는 스택으로 읽어 들였습니다). 그런 다음 해당 버퍼를 할당합니다(디스크 블록의 버퍼로). 마지막으로 스택의 여유 디스크 블록 수를 1씩 줄이고 반환합니다. // S.free(0) 에는 특수 처리가 필요합니다 . 이 디스크 블록에는 사용 가능한 다음 디스크 블록 번호 세트가 있기 때문입니다.

        시스템이 사용 가능한 디스크 블록을 회수할 때 디스크 블록 복구 프로세스를 호출하여 회수해야 합니다. 여유 디스크 블록 번호 스택의 맨 위에 재확보된 디스크 블록의 디스크 블록 번호를 기록하고, 여유 디스크 블록 수에 1을 더하는 연산을 수행합니다. 스택의 여유 디스크 블록 수가 100개에 도달하면 스택이 가득 찼음을 의미하며 기존 스택의 100개 디스크 블록 번호가 새로 복구된 디스크 블록에 기록되고 디스크 블록 번호가 사용됩니다. 새 스택의 맨 아래로.

추천

출처blog.csdn.net/swadian2008/article/details/131706926