>일반적인 문제 >내부 단편화를 일으키지 않는 스토리지 관리란 무엇입니까?

내부 단편화를 일으키지 않는 스토리지 관리란 무엇입니까?

青灯夜游
青灯夜游원래의
2020-08-29 14:28:0513201검색

내부 단편화가 발생하지 않는 스토리지 관리는 세그먼트화된 스토리지 관리입니다. 분할된 저장소 관리 방법에서는 작업의 주소 공간을 여러 세그먼트로 나누고 각 세그먼트는 일련의 논리적 정보를 정의합니다. 각 세그먼트는 0부터 시작하여 주소가 지정되며 연속적인 주소 공간을 사용합니다. 전체 작업의 주소 공간은 여러 세그먼트로 나누어져 있기 때문에 2차원적입니다.

내부 단편화를 일으키지 않는 스토리지 관리란 무엇입니까?

내부 단편화가 발생하지 않는 스토리지 관리는 세그먼트화된 스토리지 관리입니다. 페이징된 저장소 관리에만 내부 조각화가 있고 세그먼트화된 저장소 관리에는 외부 조각화가 있습니다.

페이징 저장소 관리

페이징 저장소 관리는 프로세스의 논리 주소 공간을 페이지 또는 페이지라고 하는 여러 개의 동일한 크기의 조각으로 나누고, 페이지 0과 같이 0부터 시작하여 각 페이지에 번호를 매기는 것입니다. , 1페이지 등

이에 따라 메모리 공간도 (물리적) 블록 또는 페이지 프레임이라고 하는 페이지와 동일한 크기의 여러 저장 블록으로 분할되며, 0# 블록, 1# 블록 등과 같이 번호도 지정됩니다. 프로세스에 메모리를 할당할 때 프로세스의 여러 페이지가 연속되지 않을 수 있는 여러 물리적 블록에 블록 단위로 로드됩니다. 프로세스의 마지막 페이지가 한 조각에 맞지 않는 경우가 많기 때문에 사용할 수 없는 조각화가 형성되는데, 이를 "페이지 내 조각화"라고 합니다.

분할된 저장소 관리

분할된 저장소 관리를 도입하는 목적은 주로 프로그래밍 및 사용에 있어 사용자(프로그래머)의 다양한 요구 사항을 충족하는 것입니다. 그 중 일부는 다른 유형의 저장소 관리 방법이 필요하므로 만족하기 어렵습니다. 결과적으로 이러한 스토리지 관리 접근 방식은 오늘날 모든 스토리지 관리 접근 방식의 기초가 되었습니다.

세그먼트 스토리지 관리 방법에서는 작업의 주소 공간을 여러 세그먼트로 나누고 각 세그먼트는 일련의 논리적 정보를 정의합니다. 예를 들어, 메인 프로그램 세그먼트 MAIN, 서브프로그램 세그먼트 X, 데이터 세그먼트 D, 스택 세그먼트 S 등이 있습니다. 각 세그먼트에는 고유한 이름이 있습니다. 단순화를 위해 일반적으로 세그먼트 이름 대신 세그먼트 번호를 사용할 수 있습니다. 각 세그먼트는 0부터 시작하여 주소가 지정되며 연속적인 주소 공간을 사용합니다. 세그먼트의 길이는 해당 논리 정보 그룹의 길이에 따라 결정되므로 각 세그먼트의 길이가 다릅니다. 전체 작업의 주소 공간은 여러 개의 세그먼트로 나누어져 있으므로 2차원적입니다. 즉, 논리적 주소는 세그먼트 번호(세그먼트 이름)와 세그먼트 내의 주소로 구성됩니다.

분할된 주소의 주소는 다음과 같은 구조를 갖습니다.

내부 단편화를 일으키지 않는 스토리지 관리란 무엇입니까?

이 주소 구조에서 작업은 최대 64K 세그먼트를 가질 수 있으며 각 세그먼트의 최대 길이는 64KB입니다. 분할 방법은 많은 컴파일러에서 지원되었으며 컴파일러는 소스 프로그램을 기반으로 여러 세그먼트를 자동으로 생성할 수 있습니다. 예를 들어, 파스칼 컴파일러는 전역 변수, 해당 매개변수 및 반환 주소를 저장하는 데 사용되는 프로시저 호출 스택, 각 프로시저나 함수의 코드 부분, 각 프로시저나 함수의 지역 변수 등에 대해 별도의 섹션을 만들 수 있습니다. 마찬가지로 Fortran 컴파일러는 공통 블록에 대해 별도의 섹션을 생성하고 배열에 대해 별도의 섹션을 할당할 수 있습니다. 로더는 이러한 모든 세그먼트를 로드하고 각 세그먼트에 세그먼트 번호를 할당합니다.

분할된 스토리지 관리 방법은 주로 다음과 같은 사용자와 프로그래머의 요구를 충족시키기 위해 도입되었습니다.

1) 편리한 프로그래밍

일반적으로 사용자는 논리적 관계에 따라 작업을 여러 세그먼트로 나눕니다. 0부터 시작하며 고유한 이름과 길이를 갖습니다. 따라서 액세스하려는 논리 주소는 세그먼트 이름(세그먼트 번호)과 세그먼트 내의 오프셋(세그먼트 내 주소)에 의해 결정됩니다. 예를 들어 다음 두 명령은 세그먼트 내의 세그먼트 이름과 주소를 사용합니다.

LOAD 1, [A] |

STORE 1, [B] 〈C〉; 명령어의 의미는 세그먼트 A의 유닛 D에 있는 값을 레지스터 1로 읽는 것입니다. 후자의 명령어의 의미는 레지스터 1의 내용을 세그먼트 B의 유닛 C에 저장하는 것입니다.

2) 정보 공유

프로그램과 데이터의 공유를 실현할 때는 정보의 논리적 단위를 기반으로 합니다. 예를 들어 특정 루틴과 기능을 공유합니다. 페이징 시스템의 "페이지"는 정보를 저장하는 물리적 단위(블록)일 뿐이며 완전한 의미가 없으며 공유하기에 편리하지 않습니다. 그러나 세그먼트는 정보의 논리적 단위입니다. 이는 세그먼트 공유를 달성하기 위해 스토리지 관리가 사용자 프로그램 세그먼트의 구성 방법에 적응할 수 있기를 희망한다는 것을 알 수 있습니다.

3) 정보 보호

정보 보호는 정보의 논리적 단위도 보호하므로, 세분화된 관리 방식을 통해 정보 보호 기능을 보다 효과적이고 편리하게 구현할 수 있습니다.

4) 동적 성장

실제 응용 분야에서 일부 세그먼트, 특히 데이터 세그먼트는 사용 중에 계속 증가하며, 데이터 세그먼트가 얼마나 커질지 미리 아는 것은 불가능합니다. 위에서 언급한 다른 스토리지 관리 방법은 이러한 역동적인 성장 상황에 대처하기 어렵지만, 분할된 스토리지 관리 방법은 이 문제를 더 잘 해결할 수 있습니다.

5) 동적 링크

동적 연결은 작업이 실행되기 전에 여러 대상 프로그램 세그먼트가 함께 연결되지 않음을 의미합니다. 실행시키려면 먼저 주 프로그램에 해당하는 대상 프로그램을 메모리에 로드하고 실행을 시작합니다. 실행 과정 중 특정 섹션을 호출해야 할 경우 해당 섹션(대상 프로그램)을 메모리에 로드하여 연결합니다. . 동적 링크에도 관리 단위로 세그먼트가 필요하다는 것을 알 수 있습니다.

더 많은 관련 지식을 보려면 PHP 중국어 웹사이트를 방문하세요!

위 내용은 내부 단편화를 일으키지 않는 스토리지 관리란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.