추천 튜토리얼: FAQ
# 🎜 🎜#Introduction
메모리 관리에서 연속 할당 방법은 많은 "조각"을 형성합니다. "컴팩트" 접근 방식은 많은 조각을 사용 가능한 공간 덩어리로 연결하지만 상당한 비용이 듭니다.
프로세스를 인접하지 않은 여러 파티션에 직접 배포하고 로드할 수 있는 경우 "압축"할 필요가 없습니다. 이러한 아이디어를 바탕으로 이산배분방식이 탄생하였다.이산 할당의 기본 단위가 페이지라면 페이징 저장 관리 방법 이라고 합니다. 페이징 저장소 관리 방법 중 페이지 스왑 기능이 없으면 기본 페이징 저장소 관리 방법 이라고 부르거나, 페이지 스왑 기능이 없는 순수 페이징 저장소 관리 방법이라고 합니다. 각 작업을 실행하기 전에 메모리에 로드해야 하는 가상 메모리 구현을 지원하는 기능입니다.
왜 페이징 저장소가 필요한가요? 조각화는 "컴팩트"를 통해 정렬할 수 있지만 많은 오버헤드가 필요합니다. 따라서 연속된 논리적 메모리를 프로세스의 메모리 할당 중에 연결이 끊어질 수 있는 여러 개의 물리적 메모리에 분산하여 할당할 수 있다면 원래 낭비되었던 큰 블록을 활용하여 조각화를 줄일 수 있습니다. 사용할 수 없는 조각의 최대 크기(조각 크기가 페이지 크기를 초과하면 조각이 활용되기 때문에 페이지 크기에 맞춰), 메모리 활용도가 향상됩니다. 이러한 아이디어를 바탕으로 개별 할당의 기본 단위가 페이지인 경우 페이징 저장소 관리 방법, 페이지 스왑 기능이 없는 경우 기본 페이징 저장소 관리 방법이라고 합니다. .
기본 개념페이지 #🎜 🎜 # 페이징 저장 관리 방법은 프로세스의 연속적인 논리 주소 공간을 페이지 또는 페이지라고 하는 여러 개의 동일한 크기의 주소 조각으로 나눕니다. 그리고 페이지 0, 페이지 1과 같이 번호를 매깁니다. 논리적으로 이 페이지의 주소는 연속되어 있지만 해당 물리적 블록 주소는 불연속적일 수 있습니다. 해당 물리적 블록은 그에 따라 블록 0, 블록 1 등으로 명명됩니다. 프로세스가 메모리를 할당하면 해당 프로세스의 여러 페이지가 각각 해당 물리적 블록에 로드됩니다. 마지막 페이지가 가득 차지 않는 경우가 많기 때문에 활용할 수 없는 페이지 내 조각화가 형성됩니다.
페이징 저장소 관리 사용 이 방법의 목적은 메모리 조각화를 더 많이 활용하는 것입니다. 따라서 페이지 크기는 일반 프로세스에 필요한 주소 공간 크기보다 상대적으로 작습니다. 그렇다면 페이지의 적절한 크기는 얼마입니까? 페이지가 너무 작으면 메모리에서 사용할 수 없는 조각의 최대 크기를 줄이고 메모리 공간 활용도를 높일 수 있지만 프로세스가 너무 많은 페이지를 차지하게 되어 페이지 테이블이 너무 길어지고 효율성이 떨어집니다. 페이지 교환 효율성. 마찬가지로, 페이지가 너무 크면 페이지 교환의 효율성이 향상되지만 메모리 조각화도 증가합니다. 따라서 경험에 따르면 가장 좋은 페이지 크기는 약 512B~8KB입니다.
페이지 테이블페이지 테이블은 프로세스에서 유지되는 주소 공간의 한 섹션으로 페이지와 물리적 블록 간의 매핑 관계를 저장합니다. 페이지 이전 테이블 토론에서 먼저 페이징의 주소 구조를 명확히 합니다.
물리적 주소 공간의 경우 전체 메모리 주소 공간이 고정되어 있습니다. 프로세스의 경우 할당된 논리 메모리 공간도 고정적이고 연속적입니다. 논리 주소 공간은 0부터 시작합니다. 프로세스의 바이트 논리 주소는 1088B이고 페이지 크기는 512B라고 가정합니다. 페이지를 소개할 때 언급했듯이 논리 주소 공간은 여러 페이지로 나누어져 있지만 이들 페이지의 논리 주소는 여전히 연속되어 있습니다. 그러면 바이트가 속한 페이지 번호 P = 2(0부터 시작)와 페이지 주소 d = (1088 - 512 * 2) = 64를 알 수 있습니다. 즉, 페이지 길이를 알면 해당 주소 공간이 속하는 페이지 번호와 페이지 내 상대 주소를 논리 주소를 기반으로 간단히 알 수 있다. 이 두 매개변수와 페이지 테이블을 기반으로 해당 주소에 해당하는 물리적 주소를 알 수 있습니다.
페이지 테이블은 아래와 같이 페이지와 물리적 블록을 매핑하는 데 사용되는 테이블입니다.
페이지 테이블과 페이지 번호를 통해 물리 블록 번호를 알 수 있고, 해당 물리 블록 공간의 시작 주소도 알 수 있습니다. 인페이지 주소와 결합되어 해당 물리적 주소가 알려집니다. 이런 방식으로 논리 주소를 물리 주소로 변환할 수 있습니다.
주소 변환
위의 기본 개념 소개에서는 주소 변환의 원리를 간략하게 소개하고 구체적인 과정을 자세히 살펴보겠습니다.
위에서 언급했듯이 페이지 테이블을 조회하면 페이지 번호와 물리적 블록 번호의 매핑을 찾을 수 있습니다. 그러면 페이지 테이블은 어디에 저장되어 있으며 페이지 테이블을 찾는 방법은 무엇입니까? ?
페이지 테이블은 레지스터 집합을 통해 구현할 수 있습니다. 각 레지스터는 페이지 테이블 항목을 저장하므로 레지스터의 액세스 속도가 빠르므로 페이지 테이블 주소 변환 속도를 높일 수 있습니다. 그러나 레지스터 비용이 높고 페이지 테이블의 페이지 테이블 항목이 수백 또는 수천 개의 항목에 도달할 정도로 매우 클 수 있습니다. 따라서 시스템에서는 일반적으로 페이지 테이블의 시작 주소와 길이를 메모리에 저장하기 위해 하나의 페이지 테이블 레지스터 PTR만 설정합니다. 일반적으로 프로세스가 실행되지 않을 때 페이지 테이블의 시작 주소와 페이지 테이블 길이가 이 프로세스의 PCB에 저장됩니다. 스케줄러가 프로세스를 예약하면 이 두 데이터가 페이지 테이블 레지스터에 로드됩니다. 따라서 단일 프로세서 환경에서는 시스템에서 여러 프로세스를 실행할 수 있지만 페이지 테이블 레지스터는 하나만 필요합니다. 즉, 여러 프로세스가 동시에 실행되는 경우 여러 프로세스의 페이지 테이블 데이터를 저장해야 합니다. 별도로) .
프로세스가 특정 논리 주소의 데이터에 액세스하려고 하면 페이징 주소 변환 메커니즘은 자동으로 유효 주소(상대 주소)를 페이지 번호와 페이지 내 주소의 두 부분으로 나눈 다음 페이지 번호를 주소로 사용합니다. 페이지 테이블을 검색하기 위한 인덱스입니다. 검색을 수행하기 전에 페이지 번호와 페이지 테이블 길이를 비교하십시오. 페이지 번호가 페이지 테이블 길이보다 크거나 같으면 이번에 액세스한 주소가 프로세스의 주소 공간을 초과했음을 의미합니다. 그러면 이 오류가 시스템에 의해 감지되고 주소 범위를 벗어난 인터럽트가 생성됩니다. Out-of-bound 오류가 발생하지 않으면 페이지 테이블의 시작 주소를 페이지 번호와 페이지 테이블 항목의 길이에 더하여 페이지 테이블 내 항목의 위치를 구한 후 물리 주소를 구합니다. 페이지의 블록 번호를 물리적 주소 레지스터에 로드합니다. 동시에 유효 주소 레지스터의 페이지 주소가 물리 주소 레지스터의 블록 주소 필드로 전송됩니다. 이것으로 논리 주소에서 물리 주소로의 변환이 완료됩니다. 다음 그림은 페이징 시스템의 주소 변환 메커니즘을 보여줍니다.
Fast table
페이지 테이블은 레지스터가 아닌 메모리에 저장되므로 주소를 읽을 때마다 메모리에 두 번 액세스해야 합니다. 페이지 테이블에 한 번 액세스하여 물리적 블록 번호를 찾고, 두 번째로 실제 물리적 주소에 액세스하여 데이터를 얻습니다. 따라서 이 접근 방식을 채택하면 컴퓨터의 처리 속도가 거의 1/2로 줄어듭니다.
주소 변환의 효율성을 높이기 위해 "Associative Memory"(Associative Memory) 또는 "Fast Table"이라고도 알려진 병렬 검색 기능을 갖춘 특수 캐시 레지스터 세트가 주소 변환 메커니즘에 추가되어 저장됩니다. 현재 액세스된 페이지 테이블 항목 데이터(캐시와 유사, 이전에 검색된 페이지 테이블 항목을 저장, 페이지 번호에서 물리적 블록 번호로의 변환 효율성 향상) 이러한 방식으로 주소 변환 프로세스는 다음과 같습니다.
CPU가 논리 주소를 얻은 후 주소 변환 메커니즘은 페이지 번호를 빠른 테이블에 전달하여 해당 물리 블록 번호를 쿼리합니다. 페이지의 주소에 따라 데이터에 액세스하기 위해 물리적 주소를 직접 찾습니다. 그렇지 않은 경우 일반적인 방법으로 물리적 블록 번호를 검색하고 동시에 빠른 테이블에 저장합니다. 빠른 테이블이 가득 차면 시스템은 자동으로 페이지 테이블 항목을 제거하고 교체합니다.
간단히 말하면 빠른 테이블은 페이지 테이블 항목 캐시와 동일합니다.
위 내용은 기본적인 페이징 저장소 관리 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!