메모리 관리 장치

Memory management unit
68451 MMU는 Motorola 68010과 함께 사용할 수 있습니다.

MMU([1]메모리 관리 장치)메모리 버스의 모든 메모리 참조를 검사하여 가상 메모리 주소로 알려진 이러한 요청을 메인 메모리물리적 주소로 변환하는 컴퓨터 하드웨어 장치입니다.

현대 시스템에서 프로그램은 일반적으로 32비트 또는 64비트 컴퓨터 아키텍처의 이론적 최대 메모리에 액세스하는 주소를 가집니다.MMU는 각 프로그램의 주소를 물리적 메모리의 개별 영역에 매핑합니다. 이는 일반적으로 이론적 최대값보다 훨씬 작습니다.프로그램이 한 번에 많은 양의 메모리를 사용하는 경우는 거의 없기 때문에 가능합니다.

대부분의 최신 운영 체제(OS)는 MMU와 함께 작동하여 가상 메모리(VM) 지원을 제공합니다.MMU는 "페이지"라고 알려진 고정 크기 블록에서 메모리 사용을 추적하며, 프로그램이 실제 메모리에 없는 페이지의 위치를 참조하는 경우 MMU는 운영 체제에 인터럽트를 발생시킵니다.그런 다음 OS는 메모리에서 덜 사용되는 블록을 선택하고, 읽기 시작한 이후 수정된 경우 하드 드라이브와 같은 백업 스토리지에 쓰고, 백업 스토리지에서 해당 블록으로 페이지를 읽은 다음, 프로그램이 원래 요청한 페이지에 블록을 매핑하도록 MMU를 설정합니다.이를 수요 페이징이라고 합니다.

현대의 MMU는 일반적으로 추가적인 메모리 관련 작업도 수행합니다.메모리 보호는 프로그램이 이전에 요청하지 않은 메모리에 액세스하려는 시도를 차단하여 잘못된 프로그램이 다른 프로그램의 데이터를 읽지 못하도록 모든 메모리를 사용하거나 악성 코드를 방지합니다.또한 프로세서 캐시를 관리하는 경우가 많습니다. 프로세서 캐시는 최근 액세스한 데이터를 매우 빠른 메모리에 저장하므로 느린 메인 메모리와 통신할 필요가 줄어듭니다.일부 구현에서는 액세스를 원하는 컴퓨터의 여러 부분에서 메모리 버스에 대한 액세스를 제어하는 버스 조정도 담당합니다.

1990년대에 VM 시스템이 널리 보급되기 전에는 초기 MMU 설계가 더 다양했습니다.이 중 공통적인 것은 페이지 변환으로, 고정 크기의 블록을 사용한다는 점에서 현대의 수요 페이징과 유사하지만 메모리를 분할하는 고정 크기의 페이지 목록을 가지고 있었습니다. 즉, 블록 크기는 페이지 수와 설치된 메모리의 함수입니다.대형 컴퓨터에서 주로 볼 수 있는 또 다른 일반적인 기술은 프로그램 요청에 더 잘 매핑되는 가변 크기 메모리 블록을 허용하는 세그먼트 변환이었습니다.이는 효율적이었지만 가상 메모리에 매핑되지는 않았습니다.일부 초기 시스템, 특히 8비트 시스템은 뱅크 스위칭을 수행하기 위해 매우 간단한 MMU를 사용했습니다.

개요

MMU[2]: 186 ff. 작동 개략도

현대의 MMU는 일반적으로 가상 주소 공간(프로세서에서 사용하는 주소 범위)을 페이지로 나누고, 각각의 크기는 2배(일반적으로 몇 킬로바이트)이지만 훨씬 더 클 수 있습니다.기계의 자연 주소 크기(일반적으로 최신 시스템의 경우 32비트 또는 64비트)를 사용하여 참조 메모리를 프로그래밍합니다.주소의 아래쪽 비트(페이지 내 오프셋)는 변경되지 않은 상태로 유지됩니다.상위 주소 비트는 가상 페이지 [3]번호입니다.

대부분의 MMU는 가상 페이지 번호를 메인 메모리의 실제 페이지 번호에 매핑하기 위해 페이지 당 하나의[dubious ] "페이지 테이블 항목"(PTE)을 포함하는 "페이지 테이블"이라고 하는 항목의 메모리 내 테이블을 사용합니다.PTE의 연관 캐쉬는 TLB(Translation Look Side Buffer)라고 하며, 가상 주소가 [4]매핑될 때마다 메인 메모리에 액세스할 필요를 피하기 위해 사용됩니다.

다른 MMU에는 매핑 정보 집합을 포함하는 메모리,[5] [6]레지스터 또는 정적[7] RAM의 개인 배열이 있을 수 있습니다.

가상 페이지 번호는 페이지 테이블 또는 기타 매핑 정보의 인덱스로 직접 사용될 수도 있고, 지정된 레벨의 비트를 인덱스로 사용하여 하위 레벨의 테이블로 더 분할할 수도 있으며, 하위 레벨의 비트는 인덱스로 사용되며, 두 개 이상의 레벨의 인덱싱이 있습니다.

실제 페이지 번호는 페이지 오프셋과 결합되어 전체 실제 [3]주소를 제공합니다.

페이지 테이블 항목 또는 다른 페이지별 정보는 페이지가 마지막으로 사용되었을 때("더티 비트"), 페이지가 마지막으로 사용되었을 때("액세스 비트", 가장 최근에 사용된 (LRU) 페이지 대체 알고리즘), 어떤 종류의 프로세스(사용자 모드 또는 감독자 모드)에 읽고 쓸 수 있는지에 대한 정보를 포함할 수 있습니다.캐시 여부를 확인할 수 있습니다.

특정 가상 페이지에 물리적 RAM(Random-Access Memory)이 할당되지 않았기 때문에 페이지 테이블 항목 또는 페이지별 기타 정보가 해당 가상 페이지에 대한 액세스를 금지하는 경우가 있습니다.이 경우 MMU는 CPU에 페이지 결함 신호를 보냅니다.그런 다음 운영 체제(OS)는 RAM의 예비 프레임을 찾고 요청된 가상 주소에 매핑하도록 페이지 맵을 설정하여 상황을 처리합니다.RAM이 비어 있지 않은 경우, 일부 대체 알고리즘을 사용하여 기존 페이지("피해자")를 선택하고 디스크에 저장해야 할 수도 있습니다("페이징"이라고 함).일부 MMU의 경우 PTE가 부족할 수 있으며, 이 경우 OS는 [3]새 매핑을 위해 PTE를 해제해야 합니다.

또한 MMU는 잘못된 액세스 오류 조건이나 잘못된 페이지 오류 조건을 각각 생성하여 운영 체제에서 처리할 때 분할 오류 또는 버스 오류 조건을 초래할 수 있습니다.

혜택들

VLSI VI475 MMU "애플 HMMU"
매킨토시 II에서
Motorola 68020과 함께 사용됩니다.

경우에 따라 페이지 결함은 MMU의 주요 이점 중 하나로 메모리 보호를 사용하여 방지할 수 있는 소프트웨어 버그를 나타낼 수 있습니다. 운영 체제는 이 버그를 사용하여 특정 프로그램이 액세스해서는 안 되는 메모리에 대한 액세스를 허용하지 않음으로써 잘못된 프로그램으로부터 보호할 수 있습니다.일반적으로 운영 체제는 각 프로그램에 자체 가상 주소 [3]공간을 할당합니다.

페이징된 MMU는 또한 메모리의 외부 조각화 문제를 완화합니다.메모리 블록이 할당 및 해제된 후에는 사용 가능한 메모리가 단편화(불연속)되어 사용 가능한 메모리의 최대 연속 블록이 전체 양보다 훨씬 작을 수 있습니다.가상 메모리를 사용하면 연속된 범위의 가상 주소를 물리적 메모리의 비연속 블록에 매핑할 수 있습니다. 이러한 비연속 할당은 [3]페이징의 이점 중 하나입니다.

그러나 페이징 매핑은 내부 조각화라는 또 다른 문제를 야기합니다.이 문제는 프로그램이 파일 작업을 수행하기 위해 1KB 버퍼를 요청하는 경우와 같이 페이지에 제대로 매핑되지 않는 메모리 블록을 요청할 때 발생합니다.이 경우 페이지의 1KB만 사용되더라도 전체 페이지가 삭제됩니다. 페이지가 1KB보다 크면 페이지의 나머지 부분이 낭비됩니다.이러한 종류의 작은 할당이 많이 이루어지면 메모리의 대부분이 [4]비어 있더라도 메모리를 모두 사용할 수 있습니다.

일부 초기 마이크로프로세서 설계에서 메모리 관리VLSI 기술 VI475(1986), 매킨토시 II에서 모토로라 68020 CPU와 함께 사용된 모토로라 68851(1984), Z8010[8] 및 Z8015(1985)[9][10]와 같은 별도의 집적 회로에 의해 수행되었습니다.이후의 마이크로프로세서(모토로라 68030, Zilog Z280 등)는 인텔 80286이후의 x86 마이크로프로세서와 마찬가지로 MMU를 CPU와 함께 동일한 집적 회로에 배치했습니다.

오래된 개념

이 기사는 일반적으로 수요 페이징을 기반으로 하는 현대의 MMU에 초점을 맞추고 있지만, 초기 시스템은 세분화로 발전기본 및 경계 주소를 사용하거나 요구 시 로드하는 대신 고정된 블록 세트를 사용했습니다.이 두 접근 방식의 차이는 연속된 메모리 블록의 크기입니다. 페이징 시스템은 기본 메모리를 일련의 동일한 크기의 블록으로 분할하는 반면, 세그먼트 시스템은 일반적으로 다양한 [4]크기를 허용합니다.

세그먼트화된 번역

종종 소프트웨어에 구현되는 초기 메모리 관리 시스템은 일련의 매핑을 저장하기 위해 메모리의 일부를 따로 둡니다.여기에는 여러 다른 용어가 사용되었지만 기본값과 한계값의 쌍으로 구성되었습니다.예를 들어 운영 체제가 프로그램을 로드하기 위해 메모리를 요청하거나 파일의 데이터를 저장하기 위해 더 많은 메모리를 요청하면 메모리 처리 라이브러리를 호출합니다.요청을 저장할 수 있을 정도로 큰 메인 메모리 영역을 찾기 위해 매핑을 검사했습니다.이러한 블록이 발견되면 새 항목이 테이블에 입력되었습니다.그때부터 프로그램이 메모리에 액세스할 때 모든 주소가 기본값으로 오프셋되었습니다.프로그램이 요청한 메모리로 완료되어 해제되거나 프로그램이 종료되면 관련 항목이 [4]해제됩니다.

이러한 액세스 방식은 시간이 지남에 따라[citation needed] 메인프레임 시장에서 일반화되었으며 세분화된 번역이라고도 합니다. 여기서도 다양한 용어가 사용되고 있습니다.이 스타일은 메모리 블록이 연속적이므로 기본값과 제한값 두 값만 저장하면 되므로 단순하다는 장점이 있습니다.각 항목은 단일 프로그램에서 사용하는 메모리 블록에 해당하며, 변환은 주소 0에서 시작하여 일정한 [4]값으로 확장되는 주 메모리를 프로그램에서 볼 수 없습니다.

이 접근 방식의 단점은 외부 조각화로 알려진 효과로 이어진다는 것입니다.이 문제는 메모리 할당이 해제되었지만 연속되지 않을 때 발생합니다.이 경우 요청을 처리할 수 있는 메모리가 충분할 수 있지만 이 메모리는 분산되어 있으므로 할당할 수 없습니다.시간이 지남에 따라 프로그램이 시작되고 중지되는 시스템에서는 결국 메모리가 심하게 조각나며 큰 블록이 남아 있지 않을 수 있습니다.[4]문제를 해결하기 위해 많은 알고리즘이 개발되었습니다.

세그멘테이션은 1980년대의 마이크로컴퓨터 플랫폼에서 널리 사용되었습니다.이 개념을 사용한 MMU 중에는 Motorola 68451과 Signetics [4]68905가 있지만, 다른 많은 예가 있습니다.소프트웨어 구현에서도 지원되었으며, 1987년 매킨토시 플랫폼용으로 출시된 애플의 멀티파인더가 그 예입니다.각 프로그램에는 파인더에서 미리 선택한 메모리 양이 할당되었으며 가상에서 실제로 [11]변환은 핸들을 사용하여 프로그램 내에서 수행되었습니다.

더 일반적인 예는 IBM PC에 사용되는 Intel 8088입니다.이것은 CPU 내부에 매우 간단한 MMU를 구현했으며, 4개의 프로세서 레지스터는 프로그램에 의해 직접 액세스되는 기본값을 보유하고 있습니다.이것들은 20비트 주소의 상위 4비트만 매핑했고, 제한에 해당하는 것은 없었고, 단순히 주소의 하위 16비트와 고정된 [12]64kB였습니다.x86 아키텍처 시리즈의 이후 항목에서는 서로 다른 접근 방식을 사용했습니다.

분할 및 페이징

GE 645와 그 후속 모델과 같은 일부 시스템은 분할과 페이징을 모두 사용했습니다.세그먼트 테이블에는 세그먼트의 물리적 기본 주소와 길이를 제공하는 세그먼트별 항목이 포함되지 않고 세그먼트의 길이와 더불어 세그먼트에 대한 페이지 테이블의 물리적 기본 주소를 제공하는 항목이 포함됩니다.물리적 메모리는 고정 크기의 페이지로 나뉘며, 순수하게 페이지 기반 수요 페이징에 사용되는 것과 동일한 기술이 세그먼트 및 페이지 기반 수요 페이징에 사용됩니다.

페이징 번역

메모리 처리에 대한 또 다른 접근 방식은 메인 메모리를 일련의 고정 크기 블록으로 분할하는 것입니다.이는 일련의 페이지를 생성한다는 점에서 현대의 수요 페이징 시스템과 유사하지만, 이러한 초기 시스템에서 페이지 목록은 크기가 고정되어 있으며 일반적으로 정적 RAM과 같은 빠른 메모리 형태로 저장되어 성능을 향상시킵니다.이 경우 MMU에 의해 저장된 주소의 두 부분을 세그먼트 번호와 페이지 [4]인덱스라고 합니다.

오리지널 Motorola 68000과 같이 24비트 주소 지정이 가능한 프로세서 설계를 생각해 보십시오.이러한 시스템에서 MMU는 가상 주소를 부분으로 나눕니다. 예를 들어 페이지 인덱스의 최하위 13비트와 최상위 11비트를 세그먼트 번호로 나눕니다.이렇게 하면 각각 8kB씩 [4]2048페이지의 목록이 생성됩니다.이 접근 방식에서 메모리 요청은 하나 이상의 페이지를 해당 프로그램에 부여하는 결과를 초래하며, 이 페이지는 메인 메모리에 연속되지 않을 수 있습니다.MMU는 원래 프로그램에 의해 표시된 페이지 번호와 실제 페이지 번호의 목록을 메인 메모리에 유지합니다.메모리에 액세스하려고 하면 MMU는 프로세서의 메모리 버스에서 세그먼트 번호를 읽고 내부 메모리에서 해당 프로그램에 해당하는 항목을 찾은 다음 메모리 버스에서 값의 매핑된 버전을 표시합니다.분할된 경우와 마찬가지로 프로그램은 메모리를 하나의 연속된 [4]블록으로 봅니다.

이 방법에는 두 가지 단점이 있습니다.첫 번째는 가상 주소 공간이 확장됨에 따라 매핑을 유지하는 데 필요한 메모리 양도 증가한다는 것입니다.예를 들어, 68020에서 주소는 32비트 폭입니다. 즉, 동일한 8kB 페이지 크기에 대한 세그먼트 번호는 현재 상위 19비트이며 매핑 테이블의 [4]크기는 1980년대 합리적인 비용으로 하드웨어에 구현할 수 있었던 것을 훨씬 뛰어넘는 512kB로 확장됩니다.이 문제는 페이지를 더 크게 만들면 줄일 수 있습니다. 예를 들어 8kB가 아니라 64kB입니다.이제 페이지 인덱스는 16비트를 사용하며 결과 페이지 테이블은 64KB로 더 다루기 쉽습니다.더 큰 페이지 크기로 이동하면 두 번째 문제인 내부 조각화가 증가합니다.작은 블록에 대한 일련의 요청을 생성하는 프로그램에는 큰 블록이 할당되어 많은 [4]양의 메모리가 낭비됩니다.

페이지 변환 접근법은 1970년대와 80년대 초에 시그네틱스 68905(어느 모드에서도 작동 가능)를 포함한 마이크로프로세서 MMU에 의해 널리 사용되었습니다.시그네틱스와 필립스는 68905를 동일한 물리적 칩인 [4]68070에 결합한 68000 버전을 생산했습니다.

이 기술의 또 다른 용도는 가상 주소가 너무 작을 때 물리적 주소의 크기를 확장하는 것입니다.예를 들어, PDP-11은 원래 16비트 주소를 가지고 있어서 1970년대에 메모리 크기가 증가함에 따라 너무 작아졌습니다.이 문제는 물리적 메모리 버스를 18비트로 확장하고 MMU를 사용하여 프로세서 버스의 다른 핀을 기반으로 2비트를 추가하여 [13]메모리에 액세스하는 프로그램을 나타냅니다.

페이징이 아닌 뱅크 스위칭으로 불리는 이 같은 기술의 또 다른 사용은 MOS 6502와 같은 초기 8비트 마이크로프로세서에서 널리 사용되었습니다.예를 들어, 아타리 MMU는 주소 버스에서 추가 비트를 표현하여 일반적으로 CPU 또는 ANTIC 중 어떤 칩이 현재 활성 상태인지에 따라 DRAM 메모리의 여러 뱅크 중에서 선택합니다.이것은 아타리 130XE에서 사용 가능한 메모리를 128kB로 [14]확장하는 데 사용되었습니다.코모도어 128은 비슷한 접근법을 사용했습니다.

대부분의 현대 시스템은 메모리를 4-64KB 크기의 페이지로 나누며, 종종 2MB 또는 1GB 크기의 거대한 페이지를 사용할 수 있습니다(종종 두 가지 변형 모두 가능).페이지 변환은 TLB(Translation Look Side Buffer)에 캐시됩니다.일부 시스템(주로 오래된 RISC 설계)은 TLB에서 페이지 변환을 찾을 수 없을 때 OS에 트랩합니다.대부분의 시스템은 하드웨어 기반 트리 워커를 사용합니다.대부분의 시스템은 MMU를 비활성화할 수 있지만 일부 시스템은 OS 코드에 트래핑할 때 MMU를 비활성화합니다.

IBM System/360 모델 67, IBM System/370 및 후속 제품

1965년 8월에 소개된 IBM System/360 모델 67에는 동적 주소 변환([15][16]DAT) 상자라는 MMU가 포함되어 있었습니다.액세스 및 더티 비트를 페이지 테이블 외부(모든 S/360 프로세서용 4비트 보호 키와 함께)에 저장하는 특이한 기능이 있습니다.가상 메모리가 아닌 물리적 메모리를 가리키며 특수 목적의 [16]지침에 의해 액세스됩니다.이를 통해 OS의 오버헤드를 줄일 수 있습니다. 그렇지 않으면 액세스 및 더티 비트를 페이지 테이블에서 보다 물리적인 방향의 데이터 구조로 전파해야 합니다.따라서 나중에 반가상화라고 하는 OS 레벨 가상화를 더 쉽게 수행할 수 있습니다.

1972년 8월부터 IBM System/370은 시스템/360 모델 67의 32비트 가상 주소 공간이 아닌 24비트 가상 주소 공간만 지원했지만 유사한 MMU를 갖추고 있습니다.또한 액세스된 비트와 더티 비트를 페이지 테이블 외부에 저장합니다.1983년 초, System/370-XA 아키텍처는 가상 주소 공간을 31비트로 확장했고, 2000년에는 64비트 z/Architecture가 도입되었으며, 주소 공간은 64비트로 확장되었습니다. 이러한 아키텍처는 액세스되고 더티 비트를 페이지 테이블 외부에 계속 저장합니다.

VAX

VAX 페이지는 512바이트로 [17]: 199 매우 작습니다.OS는 여러 페이지를 하나의 큰 페이지처럼 처리할 수 있습니다.예를 들어 VAX의 Linux는 8페이지를 함께 그룹화합니다.따라서 시스템은 4KB 페이지로 표시됩니다.VAX는 메모리를 4개의 고정 목적 영역으로 나누고 각 영역의 크기는 1GB입니다.다음과 같습니다.[17]: 200–201

P0 공간
힙과 같은 범용 프로세스별 메모리에 사용됩니다.
P1 공간
(또는 제어 공간) 또한 프로세스별이며 일반적으로 운영 체제에서 관리하는 감독자, 임원, 커널, 사용자 스택 및 기타 프로세스별 제어 구조에 사용됩니다.
S0 공간
(또는 시스템 공간) 페이지 테이블을 포함하여 페이징 여부에 관계없이 모든 프로세스에 전역적이며 운영 체제 코드와 데이터를 저장합니다.
에스원 공간
사용되지 않고 "[17]: 200–201 디지털로 예약"됩니다.

페이지 테이블은 큰 선형 [17]: 209–215 배열입니다.일반적으로 주소가 가능한 범위의 양쪽 끝에서 사용되는 경우 매우 낭비적이지만 P0 및 P1 공간에 대한 페이지 테이블은 페이지 S0 [17]: 211–212 공간에 저장됩니다.따라서 응용프로그램이 사용되지 않는 페이지 테이블 항목에 많은 공간을 낭비하지 않고 희소 메모리 레이아웃을 가질 수 있도록 하는 효과적인 2단계 트리가 있습니다.대부분의 MMU의 페이지 테이블 항목과 달리 VAX MMU의 페이지 테이블 항목에는 액세스 [17]: 203–205 비트가 없습니다.페이징을 구현하는 OS는 효율적으로 작동하려면 액세스된 비트를 에뮬레이트할 수 있는 방법을 찾아야 합니다.일반적으로 OS는 페이지가 존재하지 않는 결함을 사용하여 액세스 비트를 설정할 수 있도록 주기적으로 페이지 매핑을 해제합니다.

ARM 아키텍처 기반 애플리케이션 프로세서는 ARM의 가상 메모리 시스템 아키텍처에 의해 정의된 MMU를 구현합니다.현재 아키텍처는 4KB 64KB 페이지, 1MB 섹션 및 16MB 수퍼 섹션을 설명하기 위한 PTE를 정의합니다. 레거시 버전도 1KB 작은 페이지를 정의했습니다.ARM은 4KB 64KB 페이지를 사용하는 경우 2단계 페이지 테이블을 사용하거나 1MB 섹션 및 16MB 섹션에 대해 1단계 페이지 테이블만 사용합니다.

TLB 업데이트는 페이지 테이블 걷기 하드웨어에 의해 자동으로 수행됩니다.PTE에는 권한, 캐시 가능성 정보, NX 비트 및 비보안 [18]비트를 기반으로 하는 읽기/쓰기 액세스 권한이 포함됩니다.

DEC 알파

DEC Alpha 프로세서는 메모리를 8KB, 16KB, 32KB 또는 64KB나눕니다. 페이지 크기는 [19]: 3–2 [20]: 3–2 프로세서에 따라 다릅니다.페이지들TLB 누락 후 로우 레벨 펌웨어 기계 코드(여기서는 PAL 코드라고 함)가 페이지 테이블을 걷습니다.

OpenVMS AXP PAL 코드와 DEC OSF/1 PAL 코드는 3단계 트리 구조의 페이지 테이블을 걷습니다.주소는 사용되지 않는 비트 집합(트리의 루트 레벨로 인덱스의 최상위 비트와 동일한 값 포함), 트리의 루트 레벨을 인덱싱하는 비트 집합, 트리의 중간 레벨을 인덱싱하는 비트 집합, 트리의 리프 레벨을 인덱싱하는 비트 집합 및 p로 통과하는 나머지 비트 집합으로 나뉩니다.수정되지 않은 실제 주소, 페이지 내의 바이트 색인화.필드의 크기는 페이지 크기에 따라 다릅니다. 세 개의 트리 색인 필드는 모두 동일한 [19]: 3-2–3-3 [20]: 3-1–3-2 크기입니다.OpenVMS AXP PAL 코드는 사용자, 슈퍼바이저, 실행 및 커널 모드에 대한 전체 읽기 및 쓰기 권한 비트를 지원하며 읽기/쓰기/실행 비트에 대한 장애도 [19]: 3-3–3-6 지원합니다.DEC OSF/1 PAL 코드는 사용자 및 커널 모드에 대한 전체 읽기 및 쓰기 권한 비트를 지원하며 읽기/쓰기/실행 비트에 대한 장애도 [20]: (II-B) 3-3-3-6 지원합니다.

Windows NTAXP PAL 코드는 가상 주소 공간에서 단일 수준 페이지 테이블을 걷거나 물리적 주소 공간에서 2단계 페이지 테이블을 걸을 수 있습니다.주소의 상위 32비트는 무시됩니다.단일 수준 페이지 테이블의 경우 주소를 비트 집합으로 분할하여 페이지 테이블을 인덱싱하고 수정 없이 실제 주소로 전달되는 나머지 비트를 인덱싱하여 페이지 내의 바이트를 인덱싱합니다.2단계 페이지 테이블의 경우 주소는 트리의 루트 수준을 인덱싱하는 비트 집합, 트리의 최상위 수준을 인덱싱하는 비트 집합, 트리의 리프 수준을 인덱싱하는 비트 집합 및 수정 없이 실제 주소로 전달되는 나머지 비트 집합으로 분해되어 페이지 내 바이트를 인덱싱합니다.필드의 크기는 페이지 [21]: 3-2–3-4 크기에 따라 다릅니다.Windows NTAXP PAL 코드는 커널 모드에서만 액세스할 수 있는 페이지 또는 사용자와 커널 모드에서만 액세스할 수 있는 페이지를 지원하며 쓰기 [21]: 3-5 비트의 장애도 지원합니다.

MIPS

MIPS 아키텍처는 TLB에서 하나에서 64개의 항목을 지원합니다.TLB 항목의 수는 합성하기 전에 CPU 구성에서 구성할 수 있습니다.TLB 항목은 이중입니다.각 TLB 항목은 페이지 마스크의 일부가 아닌 가상 주소의 최하위 비트에 따라 가상 페이지 번호(VPN2)를 두 페이지 프레임 번호(PFN0 또는 PFN1) 중 하나에 매핑합니다.이 비트와 페이지 마스크 비트는 VPN2에 저장되지 않습니다.각 TLB 항목은 고유한 페이지 크기를 가지며, 4의 배수로 1KB에서 256MB 사이의 값이 될 수 있습니다.TLB 항목의 각 PFN에는 캐시 특성, 더티 및 유효한 상태 비트가 있습니다.글로벌 상태 비트가 0으로 설정된 경우 VPN2에는 글로벌 상태 비트와 가상 주소 TLB 항목 일치에 참여하는 OS 할당 ID가 있습니다.PFN은 페이지 마스크 비트 없이 실제 주소를 저장합니다.

TLB에 매핑된 가상 주소와 일치하는 항목이 없을 때 TLB 리필 예외가 생성됩니다.일치하는 항목이 있지만 잘못된 항목으로 표시된 경우 TLB 잘못된 예외가 생성됩니다.TLB 수정 예외는 스토어 명령이 매핑된 주소를 참조하고 일치하는 항목의 더티 상태가 설정되지 않은 경우 생성됩니다.이중 장애 TLB 예외인 TLB 예외를 처리할 때 TLB 예외가 발생하면 해당 예외 처리기로 전송됩니다.

MIPS32 및 MIPS32r2는 32비트의 가상 주소 공간과 최대 36비트의 물리적 주소 공간을 지원합니다.MIPS64는 최대 64비트의 가상 주소 공간과 최대 59비트의 물리적 주소 공간을 지원합니다.

썬 MMU

원래 Sun-1은 1982년에 소개된 모토로라 68000 마이크로프로세서를 중심으로 만들어진 단일 보드 컴퓨터입니다.CPU에서 실행되는 여러 프로세스를 위한 주소 변환, 메모리 보호, 메모리 공유 및 메모리 할당을 제공하는 원래 Sun 1 메모리 관리 장치를 포함합니다. CPU의 전용 온보드 RAM, 외부 멀티버스 메모리, 온보드 I/O 및 멀티버스 I/O에 대한 모든 액세스는 MMU를 통해 실행됩니다.주소 변환 및 보호가 균일한 방식으로 수행되는 경우.MMU는 CPU 보드의 하드웨어에 구현됩니다.

MMU는 컨텍스트 레지스터, 세그먼트 맵 및 페이지 맵으로 구성됩니다.CPU의 가상 주소는 세그먼트 맵에 의해 중간 주소로 변환되고, 이는 페이지 맵에 의해 물리적 주소로 변환됩니다.페이지 크기는 2KB이고 세그먼트 크기는 32KB로 세그먼트당 16페이지를 제공합니다.최대 16개의 컨텍스트를 동시에 매핑할 수 있습니다.컨텍스트의 최대 논리 주소 공간은 1024페이지 또는 2MB입니다.동시에 매핑할 수 있는 최대 물리적 주소도 2MB입니다.

컨텍스트 레지스터는 모든 변환 상태 정보를 다시 로드하지 않고 CPU가 프로세스 간에 전환할 수 있도록 해주기 때문에 멀티태스킹 운영 체제에서 중요합니다.4비트 컨텍스트 레지스터는 감독자 제어 하에 세그먼트 맵의 16개 섹션 간에 전환할 수 있으며, 이를 통해 16개 컨텍스트를 동시에 매핑할 수 있습니다.각 컨텍스트에는 고유한 가상 주소 공간이 있습니다.가상 주소 공간 및 컨텍스트 간 통신 공유는 서로 다른 컨텍스트의 세그먼트 또는 페이지 맵에 동일한 값을 기록하여 제공할 수 있습니다.세그먼트 맵을 컨텍스트 캐시로 처리하고 가장 최근에 사용되지 않은 컨텍스트를 교체하여 추가 컨텍스트를 처리할 수 있습니다.

컨텍스트 레지스터는 사용자 상태와 감독자 상태를 구분하지 않습니다.인터럽트 및 트랩은 컨텍스트를 전환하지 않으므로 유효한 모든 인터럽트 벡터는 항상 컨텍스트의 페이지 0과 유효한 슈퍼바이저 [22]스택에 매핑되어야 합니다.

Sun-2 워크스테이션은 Motorola 68010 마이크로프로세서를 기반으로 제작되었으며 2KB 페이지와 32KB 세그먼트로 구성된 유사한 메모리 관리 장치를 가지고 있습니다.컨텍스트 레지스터에는 감독자 상태에서 사용되는 3비트 시스템 컨텍스트와 사용자 [23]상태에서 사용되는 3비트 사용자 컨텍스트가 있습니다.

Sun-3/80, Sun-3/460, Sun-3/470 및 Sun-3/480을 제외한 Sun-3 워크스테이션은 Motorola 68020을 기반으로 구축되었으며 메모리 관리 장치가 유사합니다.페이지 크기는 8KB로 증가합니다. (이후 모델은 Motorola 68030을 중심으로 구축되었으며 68030의 온칩 MMU를 사용합니다.)

Sun-4 워크스테이션은 다양한 SPARC 마이크로프로세서를 기반으로 구축되며 Sun-3 워크스테이션과 유사한 메모리 관리 장치를 갖추고 있습니다.

파워PC

PowerPC G1에서 G2, G3 및 G4 페이지는 일반적으로 4KB입니다.TLB 누락 후 표준 PowerPC MMU가 두 번의 동시 조회를 시작합니다.한 번의 조회는 해당 주소를 4개 또는 8개의 DBAT(데이터 블록 주소 변환) 레지스터 또는 4개 또는 8개의 IBAT(명령 블록 주소 변환 레지스터) 레지스터 중 하나와 적절하게 일치시키려고 시도합니다.BAT 레지스터는 256MB에 달하는 메모리의 선형 청크를 매핑할 수 있으며, 일반적으로 OS 커널 자체의 사용을 위해 주소 공간의 많은 부분을 매핑하기 위해 OS에 의해 사용됩니다.BAT 조회가 성공하면 다른 조회가 중지되고 무시됩니다.

이 제품군의 모든 프로세서가 직접 지원하지 않는 다른 룩업은 TLB의 해시 오프 칩 확장으로 작동하는 이른바 "반전 페이지 테이블"을 통해 수행됩니다.먼저, 주소의 상위 4비트는 16개의 세그먼트 레지스터 중 하나를 선택하는 데 사용됩니다.그런 다음 세그먼트 레지스터의 24비트가 이 4비트를 대체하여 52비트 주소를 생성합니다.세그먼트 레지스터를 사용하면 여러 프로세스가 동일한 해시 테이블을 공유할 수 있습니다.

52비트 주소는 해시된 다음 오프칩 테이블의 인덱스로 사용됩니다.여기서 8페이지의 표 항목 그룹이 일치하는 항목을 검색합니다.과도한 해시 충돌로 인해 일치하는 해시가 없으면 프로세서는 약간 다른 해시 함수를 사용하여 다시 시도합니다.이 역시 실패하면 CPU가 OS에 트랩되어(MMU가 비활성화된 상태) 문제가 해결될 수 있습니다.OS는 새 항목을 위한 공간을 확보하기 위해 해시 테이블에서 항목을 삭제해야 합니다.OS는 일반적인 트리와 같은 페이지 테이블이나 더 느리고 공간 효율적일 가능성이 높은 매핑별 데이터 구조에서 새 항목을 생성할 수 있습니다.세그먼트 레지스터에서 실행 중지 제어를 지원하므로 256MB의 세분화가 가능합니다.

이 설계의 주요 문제는 해시 함수로 인한 캐시 인접성 저하입니다.트리 기반 설계에서는 인접 페이지에 대한 페이지 테이블 항목을 인접한 위치에 배치하여 이 문제를 방지합니다.PowerPC에서 실행되는 운영 체제는 해시 테이블의 크기를 최소화하여 이 문제를 줄일 수 있습니다.

또한 프로세스의 페이지 테이블 항목을 제거하는 속도가 다소 느립니다.OS는 세그먼트 값을 재사용하여 지연시키는 것을 방지하거나 프로세스별 해시 테이블과 관련된 메모리 낭비를 방지할 수 있습니다.G1 칩은 페이지 테이블 항목을 검색하지 않지만 OS가 소프트웨어를 통해 표준 해시 테이블을 검색할 것으로 예상하여 해시를 생성합니다.OS는 TLB에 쓸 수 있습니다.G2, G3 및 초기 G4 칩은 하드웨어를 사용하여 해시 테이블을 검색합니다.최신 칩은 OS가 두 가지 방법 중 하나를 선택할 수 있도록 합니다.이것을 선택 사항으로 만들거나 전혀 지원하지 않는 칩에서는 OS가 트리 기반 페이지 테이블을 독점적으로 사용하도록 선택할 수 있습니다.

IA-32 / x86

x86 아키텍처는 OS 코드에 대해서도 완전한 소프트웨어 호환성을 유지하면서 매우 오랜 시간에 걸쳐 발전해 왔습니다.따라서 MMU는 매우 복잡하며 다양한 작동 모드가 가능합니다.기존 80386 CPU와 그 후속 CPU(IA-32)의 정상 작동에 대해 설명합니다.

CPU는 주로 메모리를 4KB 페이지로 나눕니다.오래된 808880286 MMU 설계의 기본인 세그먼트 레지스터는 현대의 OS에서는 사용되지 않습니다. 단, 응용 프로그램을 위한 스레드 특정 데이터에 대한 액세스 또는 OS 커널을 위한 CPU 특정 데이터에 대한 액세스는 FS 및 GS 세그먼트 레지스터를 명시적으로 사용하여 수행됩니다.모든 메모리 액세스에는 실행 중인 코드에 따라 선택된 세그먼트 레지스터가 포함됩니다.세그먼트 레지스터는 테이블의 인덱스 역할을 하여 가상 주소에 추가할 오프셋을 제공합니다.FS 또는 GS를 사용하는 경우를 제외하고 OS는 오프셋이 0이 되도록 보장합니다.

오프셋이 추가되면 주소가 32비트 이하로 마스킹됩니다.트리 구조의 페이지 테이블을 통해 결과를 조회할 수 있으며, 주소 비트는 트리의 분기에 10비트, 분기의 잎에 10비트, 가장 낮은 12비트가 결과에 직접 복사됩니다.OpenB와 같은 일부 운영 체제W^X 기능이 있는 SD와 Exec Shield 또는 PaX 패치가 있는 Linux는 CS 레지스터에 지정된 대로 주소 공간의 수정 가능한 영역에서 코드 실행을 허용하지 않도록 코드 세그먼트의 길이를 제한할 수도 있습니다.

Pentium과 함께 도입된 MMU의 작은 개정판은 트리의 맨 아래 레벨을 건너뛰어 매우 큰 4MB 페이지를 허용했습니다(이는 1단계 페이지 계층 구조를 인덱싱하고 나머지 10+12비트는 결과에 직접 복사됨).펜티엄 프로와 함께 도입된 MMU의 작은 개정판은 물리적 주소 확장(PAE) 기능을 도입하여 3단계 페이지 테이블에 2+9+9 비트와 12개의 가장 낮은 비트가 결과에 직접 복사되는 36비트 물리적 주소를 사용할 수 있게 했습니다.트리의 맨 아래 레벨을 건너뛰어 큰 페이지(2MB)도 사용할 수 있습니다(2-레벨 테이블 계층의 경우 2+9비트, 나머지 9+12비트는 직접 복사됨).또한 페이지 속성 테이블은 작은 온 CPU 테이블에서 몇 개의 높은 비트를 찾아 캐시 기능을 지정할 수 있었습니다.

No-execute 지원은 원래 세그먼트 단위로만 제공되어 사용하기 매우 불편합니다.최신 x86 칩은 PAE 모드에서 페이지당 실행 불가능 비트를 제공합니다.위에서 설명한 W^X, Exec Shield 및 PaX 메커니즘은 성능 손실 및 사용 가능한 주소 공간 감소와 함께 코드 세그먼트의 길이를 설정하여 NX 비트가 부족한 시스템 x86 프로세서에서 페이지당 미실행 지원을 에뮬레이트합니다.

x86-64

HSA(Heterogeneous System Architecture)는 CPU, GPU 및 DSP를 위한 통합 가상 주소 공간을 생성하여 매핑 트릭과 데이터 복사를 폐지합니다.

x86-64는 거의 모든 운영 체제가 386 이상의 프로세서에 사용하는 플랫 메모리 모델을 선호하여 세그먼트화를 거의 완전히 제거한 x86의 64비트 확장입니다.롱 모드에서는 FS 및 GS 세그먼트를 제외한 모든 세그먼트 오프셋이 무시됩니다.4KB 페이지와 함께 사용할 경우, 페이지 테이블 트리는 3개가 아닌 4개의 레벨을 가집니다.

가상 주소는 사용되지 않은 16비트, 트리 레벨 4개에 대해 각각 9비트(총 36비트), 결과에 직접 복사된 가장 낮은 12비트로 구분됩니다.2MB 페이지의 경우 페이징에 사용되는 총 27비트와 오프셋 21비트에 대해 세 가지 수준의 페이지 테이블만 있습니다.일부 최신 CPU는 페이징 수준이 2개이고 오프셋[24]30비트인 1GB 페이지도 지원합니다.

CPUID를 사용하여 1GB 페이지가 지원되는지 확인할 수 있습니다.세 가지 경우 모두 16개의 가장 높은 비트가 48번째 비트와 같아야 합니다. 즉, 가장 낮은 48비트는 더 높은 비트로 확장된 부호입니다.이는 이전 버전과의 호환성에 영향을 주지 않으면서 향후 주소 지정 가능 범위를 확장할 수 있도록 하기 위한 것입니다.페이지 테이블의 모든 단계에서 페이지 테이블 항목에는 실행 금지 비트가 포함되어 있습니다.

대안

Burroughs B5000 시리즈, B6500/Unisys MCP 시스템

1961년의 Burroughs B5000은 MMU가 [25]없음에도 불구하고 (Atlas 이후) 가상 메모리를 지원하는 최초의 상용 시스템이었습니다. Burroughs B6500 및 Burroughs B5000은 MMU의 두 가지 기능인 가상 메모리 주소와 메모리 보호를 다른 아키텍처 접근 방식으로 제공합니다.

첫째, 가상 메모리 주소 매핑에서 MMU가 필요하지 않은 대신 이러한 시스템은 설명자 기반입니다.Burroughs B5000/B5500/B5700 시스템에서 48비트 메모리 워드의 최상위 비트는 워드가 피연산자(숫자 또는 논리값)인지 또는 설명자/제어 단어인지를 나타냅니다. 설명자는 사용자 프로세스에 대한 읽기 전용이며 시스템(하드웨어 또는 운영 체제)에 의해서만 업데이트될 수 있습니다.Burroughs B6500 시스템과 그 후속 제품의 메모리 워드는 48개의 데이터 비트와 3개의 태그 비트를 가지고 있습니다. 태그가 홀수인 워드는 사용자 프로세스에서만 읽을 수 있습니다. 설명자는 태그가 5이고 코드 워드는 태그가 3입니다.

할당된 각 메모리 블록에는 블록의 속성(즉, 물리적 주소, 크기 및 메모리에 존재하는지 여부)이 포함된 마스터 설명자가 제공됩니다.코드와 데이터에 대한 모든 참조는 디스크립터를 사용하여 이루어집니다. 읽기 또는 쓰기를 위해 블록에 액세스하라는 요청이 발생하면 하드웨어는 디스크립터의 존재 비트(pbit)를 통해 존재 여부를 확인합니다.

Pbit 1은 블록의 존재를 나타냅니다.이 경우 설명자의 물리적 주소를 통해 블록에 액세스할 수 있습니다.pbit가 0이면 MCP(운영 체제)에 대해 인터럽트가 생성되어 블록이 존재하게 됩니다.주소 필드가 0이면 이 블록에 대한 첫 번째 액세스이며 할당됩니다(init pbit).주소 필드가 0이 아닌 경우, 이전에 롤아웃된 블록의 디스크 주소이므로, 디스크에서 블록을 가져오고 pbit를 하나로 설정하고 메모리의 블록(다른 pbit)을 가리키도록 물리적 메모리 주소를 업데이트합니다.이렇게 하면 MMU 시스템의 페이지 테이블 항목과 같은 설명자가 됩니다.시스템 성능은 pbit 수를 통해 모니터링할 수 있습니다.init pbits는 초기 할당을 나타내지만 다른 pbit의 높은 수준은 시스템이 스레싱 중임을 나타냅니다.

따라서 모든 메모리 할당은 완전히 자동이며(현대[26] 시스템의 기능 중 하나) 이 메커니즘 외에는 블록을 할당할 방법이 없습니다.메모리 블록도 자동으로 삭제되므로 malloc 또는 dealloc와 같은 호출은 없습니다.실제로 참조될 때까지 블록이 할당되지 않기 때문에 이 계획도 게으릅니다.메모리가 거의 가득 차면 MCP는 작업 세트를 검사하여 압축(시스템이 페이지가 아닌 세그먼트이므로)을 시도하고 읽기 전용 세그먼트(예: 원래 복사본에서 복원할 수 있는 코드 세그먼트)의 할당을 해제하며 마지막 수단으로 더러운 데이터 세그먼트를 Disk로 롤아웃합니다.

이러한 시스템이 MMU의 기능을 제공하는 또 다른 방법은 보호입니다.모든 액세스가 설명자를 통해 이루어지기 때문에 하드웨어는 모든 액세스가 범위 내에 있는지, 쓰기의 경우 프로세스에 쓰기 권한이 있는지 확인할 수 있습니다.MCP 시스템은 본질적으로 안전하므로 이 수준의 메모리 보호를 제공하기 위해 MMU가 필요하지 않습니다.

프로세스 스택의 복사 설명자를 통해 프로세스 간에 블록을 공유할 수 있습니다.따라서 일부 프로세스는 쓰기 권한을 가질 수 있지만 다른 프로세스는 그렇지 않을 수 있습니다.코드 세그먼트는 읽기 전용이므로 프로세스 간에 다시 들어가고 공유됩니다.복사 설명자에는 마스터 설명자 배열에 마스터 설명자의 인덱스를 제공하는 20비트 주소 필드가 포함됩니다.또한 매우 효율적이고 안전한 IPC 메커니즘을 구현합니다.블록의 상태가 변경될 때 마스터 설명자만 업데이트하면 되므로 블록을 쉽게 재배치할 수 있습니다.

유일한 다른 측면은 성능입니다. MMU 기반 또는 비MMU 기반 시스템이 더 나은 성능을 제공합니까?MCP 시스템은 MMU(예: 표준 PC)가 있는 표준 하드웨어 위에 구현될 수 있습니다.시스템 구현에서 어떤 방식으로든 MMU를 사용하더라도 MCP 레벨에서는 이를 전혀 볼 수 없습니다.

참고 항목

레퍼런스

  1. ^ 무료 온라인 컴퓨팅 사전의 메모리 관리 장치
  2. ^ Tanenbaum, Andrew S. (2009). Modern operating systems. Upper Saddle River (New Jersey): Prentice-Hall. ISBN 978-0-13-600663-3.
  3. ^ a b c d e Frank Uyeda (2009). "Lecture 7: Memory Management" (PDF). CSE 120: Principles of Operating Systems. UC San Diego. Retrieved 2013-12-04.
  4. ^ a b c d e f g h i j k l m Zehr, Gregg (November 1986). "Memory Management Units For 68000 Architectures" (PDF). Byte. pp. 127–135.
  5. ^ Spectra 70 70-46 Processor Manual (PDF). RCA. March 1968. pp. 5–6. Retrieved August 15, 2013.
  6. ^ Reference Manual, SDS 940 Computer (PDF). Scientific Data Systems. 1966. pp. 8–10.
  7. ^ Hardware Engineering Manual for the 2060 CPU Board (PDF). Sun Microsystems. 10 May 1987. pp. 121–129.
  8. ^ "Z8010 Z8000 MMU Memory Management Unit Product Specification" (PDF). Zilog. April 1985.
  9. ^ "1983/84 Data Book" (PDF). Zilog. pp. 215–234. Retrieved 2021-04-27.
  10. ^ Schmidt, Stephen (April 1983). "Virtual Memory for Microcomputers". Byte. Vol. 8, no. 4. pp. 234–235.
  11. ^ MultiFinder User's Guide. Apple. 1987. pp. 20–22, 24.
  12. ^ Memory Address Decoding (Technical report). University of New Mexico. 1996.
  13. ^ Bell, Gordon. "A Retrospective on What We Have Learned From the PDP-11".
  14. ^ MCU, Memory Control Unit, FREDDIE (Technical report). Atari. 1983.
  15. ^ "IBM Archives: System/360 Dates and characteristics". 03.ibm.com. 23 January 2003. Retrieved 2017-05-03.
  16. ^ a b "IBM System/360 Model 67 Functional Characteristics, Third Edition" (PDF). February 1972. GA27-2719-2. Retrieved October 29, 2021.
  17. ^ a b c d e f "Chapter 4 Memory Management". VAX Architecture Reference Manual (PDF). Digital Equipment Corporation. 1987. ISBN 0-932376-86-X. EY-3459E-DP.
  18. ^ "Cortex-A8 Technical Reference Manual" (PDF). Infoventer.arm.com. Retrieved 2017-05-03.
  19. ^ a b c "Part II-A / OpenVMS AXP Software". Alpha AXP Architecture (PDF) (Second ed.). Digital Press. 1995. ISBN 1-55558-145-5. EY-TI32E-DP.
  20. ^ a b c "Part II-B / DEC OSF/1 Software". Alpha AXP Architecture (PDF) (Second ed.). Digital Press. 1995. ISBN 1-55558-145-5. EY-TI32E-DP.
  21. ^ a b "Part II-C / Windows NT AXP Software". Alpha AXP Architecture (PDF) (Second ed.). Digital Press. 1995. ISBN 1-55558-145-5. EY-TI32E-DP.
  22. ^ Sun 68000 보드 사용 설명서, Sun Microsystems, Inc, 1983년 2월, 개정 B.
  23. ^ "Sun-2 Architecture Manual" (PDF). Sun Microsystems. 15 December 1983. pp. 9–12.
  24. ^ "AMD64 Architecture Programmer's Manual Volume 2: System Programming" (PDF). March 2017. Retrieved 2017-12-05.
  25. ^ Tanenbaum, Andrew S.; Herder, Jorrit N.; Bos, Herbert (May 2006). "Can We Make Operating Systems Reliable and Secure?". Computer. 39 (5): 44–51. CiteSeerX 10.1.1.112.3028. doi:10.1109/MC.2006.156. S2CID 99779.
  26. ^ Daniel H. H. Ingalls (August 1981). "Design Principles Behind Smalltalk". Byte Magazine. Archived from the original on 2007-09-27.