프로세서가 가상 메모리를 지원하려면 MMU (Memory Management Unit) 칩이 필요합니까?


14

프로세서가 가상 메모리를 지원하려면 MMU (Memory Management Unit) 칩이 필요합니까?

소프트웨어에서 MMU 기능을 에뮬레이트 할 수 있습니까? (아마도 성능에 큰 영향을 줄 것임을 알고 있습니다).


모든 기능을 갖춘 컴퓨터는 충분한 성능 저하로 다른 컴퓨터를 에뮬레이션 할 수 있습니다. 또는 모든 하드웨어를 에뮬레이션하십시오. 유일한 질문은 성능 저하의 규모입니다.
Vality

오늘날 모든 프로세서에는 TLB가 필요하므로 내장 된 MM 장치가 있습니다.
rastafile '11

답변:


22

MMU가 포함 된 시스템을 에뮬레이트하는 모든 시스템 에뮬레이터는 소프트웨어에서 MMU를 효과적으로 에뮬레이트하므로 명시된 질문에 대한 대답은“예”입니다. 그러나 가상 메모리에는 메모리 액세스 제어를 적용하는 방법이나 최소한 주소 변환이 필요하므로 제어되는 소프트웨어를 실행하는 CPU의 전체 소프트웨어 에뮬레이션이 필요하거나 하드웨어 지원이 필요합니다.

따라서 MMU가없는 시스템을 구축하고 QEMU 를 포팅 하고 가상 메모리를 실제로 유용하게 만들기 위해 누락 된 부분을 추가 ( 예 : 호스트 시스템에서 스왑 지원 추가) 한 다음 QEMU에서 MMU가 필요한 운영 체제를 실행할 수 있습니다. QEMU 버그를 제외하고 게스트 운영 체제에서 기대할 수있는 모든 보호 기능을 갖추고 있습니다.

가상 메모리를 제공하는 데 사용되는 MMU가없는 "에뮬레이션"의 실제적이고 오래된 예는 70 대 후반과 80 년대 초의 8 비트 시스템에서 코드와 데이터를 페이징하고 교환 할 수있는 Z-machine입니다 . 기본 실제 프로세서에서 가상 프로세서를 에뮬레이션하여 작동했습니다. 이런 식으로 인터프리터는 실행중인 프로그램이 "보는"메모리 레이아웃을 완전히 제어합니다.

실제로, 적어도 운영 체제 수준에서 가상 메모리 지원을 위해서는 MMU가 필요하다고 일반적으로 고려됩니다. 표시된대로 MMU가없는 커널? MMU가없는 시스템에서 Linux 커널을 실행할 수 있도록 Linux 커널을 빌드 할 수 있지만 결과 구성은 매우 이례적이며 매우 특정한 유스 케이스 (특히 악의적 인 소프트웨어가없는 경우)에만 적합합니다. 가상 메모리 (스와핑 등 mmap)가 필요한 많은 시나리오를 지원하지 않을 수 있습니다 .


가상 머신 애플리케이션에도 MMU 에뮬레이터 컴포넌트가 있습니까?
yoyo_fun

예. 반드시 별도의 구성 요소는 아니지만 에뮬레이션에 필요한 지원을 제공합니다.
Stephen Kitt

7
@JenniferAnderson : 일부 최신 CPU에는 에뮬레이터가 부분적으로 MMU 에뮬레이션을 MMU 자체로 오프로드 할 수있는 기능이 있습니다. 예를 들어 에뮬레이터 내에서 실행되는 프로그램은 자체적으로 여러 에뮬레이션 된 메모리 페이지를 사용하며,이 메모리 페이지는 물론 에뮬레이터에서 사용하는 메모리 페이지에 "중첩"됩니다. 최신 고급 인텔 및 AMD CPU 모두 중첩 페이지 테이블을 지원하므로 에뮬레이터는이 중첩을 MMU 자체 내에서 (고가로) 에뮬레이션하지 않고 표현할 수 있습니다.
Jörg W Mittag

@ Jörg는 설명을 주셔서 감사합니다. 대부분의 하이퍼 바이저에는 여전히 일정 수준의 소프트웨어 에뮬레이션이 포함되어있어 추가 하드웨어 지원없이 작동합니다. 나는 질문의“가능한가”측면에 의해 깜박 거렸다 ;-).
Stephen Kitt

3
@JenniferAnderson : 예,이 기능은 반 가상화를 위해 특별히 도입되었습니다. (1960 년대 초 이래로 메인 프레임 세계에는 새로운 하드웨어 보조 반가상 화가 존재하지 않습니다.) 그러나 가비지 수집 속도 향상과 같은 다른 흥미로운 응용 프로그램에도 사용될 수 있습니다. 예를 들어 Azul Zing JVM의 C4 콜렉터). 그러나이 모든 것이 양방향으로 작동한다는 점에 유의하십시오. 가상화 지원을 통해 MMU 를 확장 하는 것은 성능 최적화 및 가상화에 지나지 않습니다.
Jörg W Mittag

7

가상 메모리를 정확히 무엇에 따라 다릅니다. 흥미로운 모델은 이전 Win16 모델입니다 (Windows NT가 아닌 이전 Windows 3.x에서 가장 잘 알려져 있음). 이 모델에서는 한 GlobalLockGlobalUnlock, LocalLockLocalUnlock기능. 이들은 가상 메모리의 협력적이고 수동적 인 관리의 한 형태였습니다. 이 작업은 (응용 프로그램) 소프트웨어에서 수행되었으므로 MMU가 필요하지 않았습니다. 그리고 잠금 해제 된 메모리를 디스크로 교체 할 수 있다는 점에서 메모리는 가상이었습니다.

그러나 Win16 모델에서는 다른 프로세스간에 보호 기능이 없습니다. 다른 프로세스가 데이터를 메모리에 남겨두면 덮어 쓸 수 있습니다. 이것은 근본적인 제한이 아닙니다. 요즘 빠른 SSD를 사용하면 메모리에서 실행 중이 아닌 프로세스를 완전히 제거 할 수 있으며 합리적인 시간 안에 수행 할 수 있습니다.


7

실제 메모리와 프로세스를 교환 할 수있는 소프트웨어가있는 경우 하드웨어 MMU가 필요하지 않습니다 .

초기 멀티 태스킹 운영 체제의 작동 모드였습니다. 주어진 시간에 하나의 프로세스 만 메모리에 상주하며, 시간 분할이 만료되면 전체 프로세스가 스왑됩니다 (대규모 프로세스에서는 문제가 있음을 알 수 있습니다). 현재 실행중인 프로세스에서 볼 수있는 메모리 내용은 다른 프로세스에서 볼 수있는 메모리 내용과 같지 않으며 각 주소 공간에 대한 자체보기가 있습니다.

일부 하드웨어 지원이 도움이됩니다. OS 자체를위한 "보호 된"메모리 영역 (예 : MSB가 설정된 모든 주소는 감독자 모드에서만 액세스 가능)이라는 개념과 사용중인 최고 주소를 나타내는 "중단"값이지만 메모리 관리 하드웨어는 가상 메모리의 절대 요구 사항이 아닙니다. 그것을 달성하는 데 특히 효과적인 방법 일뿐입니다.


2
그것은 실제로 가상 메모리가 아니라 단지 프로세스 스와핑입니다 ... (우리는이 질문에 대한 정답을 얻기 위해“가상 메모리”를 정의해야합니다!)
Stephen Kitt

각 프로세스에는 주소 공간에 대한 자체보기가 있습니다. 사용중인 정의를 명확히하기 위해 편집하겠습니다.
Toby Speight

그러나 모든 프로세스에 대해 동일한 일대일 매핑입니다. (프로세스 관점에서 큰 차이는 없으므로 실제 논쟁은 없습니다 ...)
Stephen Kitt

0

VM을 수행하는 최초의 상용 시스템에는 MMU가 없었으며 VM에는 프로세서가 내장되어있었습니다. 나의 현재 생각은 MMU가 VM이 아닌 프로세서의 맨 위에 VM을 배치하기 위해 나중에 생각해야한다는 것입니다. VM은 맨체스터 대학교에서 개발되었으며 Burroughs 설계자는 당시 매우 혁신적이지만 VM을 포함시켜야한다고 확신했습니다.

Burroughs B5000 (현재 Unisys MCP 시스템)은 메모리 경계를 강화하는 메모리 디스크립터를 사용했습니다. 경계를 벗어나면 프로그램이 덤프됩니다 (경계를 존중하는 것은 훌륭한 사회의 기초이지만 일부는 특권을 남용하므로 경계를 강제해야합니다).

디스크립터는 메모리 주소, 블록 길이 및 데이터 유형뿐만 아니라 가장 중요한 P 비트 또는 프레즌스 비트도 보유합니다. p- 비트는 블록이 메모리에 있음을 나타냅니다. p- 비트가 0이면 블록이 대용량 저장 장치에 있고 주소는 원래 프로그램 (코드 또는 데이터) 또는 VM (롤아웃 된 데이터)의 저장 주소입니다.

이 머신들은 계층 적 메모리 모델을 구현했습니다. MMU는 플랫 객체의 결함을 보완하는 것으로 보이며, 사용자 객체를 플랫 메모리에 매핑해야합니다. JK Iliffe는 또한이 모델을 사용하여 ICL 기계를 설계했습니다.

http://www.computerconservationsociety.org/resurrection/res74.htm#f

https://en.wikipedia.org/wiki/Burroughs_large_systems

이러한 머신과 오늘날의 머신의 차이점은 CPU 아키텍처뿐만 아니라 전체 시스템 아키텍처를 처리한다는 것입니다.

따라서 MMU가 반드시 필요한 것은 아니며 시스템이없는 시스템이 더 좋습니다.


-1

대부분의 데스크톱, 랩톱 및 서버 프로세서는 메모리 관리 하드웨어에 하나 이상의 TLB를 포함하며 페이지 또는 세그먼트 가상 메모리 를 사용하는 모든 프로세서에 거의 항상 존재 합니다 .

Translation_lookaside_buffer

그런 다음 가상 메모리와 그 의미에 대해 읽어보십시오. 거대한 가상 주소 공간은 주요 아이디어가 아닙니다. 주요 아이디어는 여러 수준에서 캐싱 / 버퍼링입니다.

간단하지는 않지만이 TLB 메모리 캐시는 커널의 mm 하위 시스템이 구축하는 중요한 하드웨어입니다 (그렇지 않으면 VM이 오버 헤드가 많음).


VM =

가상 메모리 또는 가상 머신. 매우 다르고 연결되어 있습니다.


따라서 대답은 아니오입니다. MMU ( 메인 보드의 CPU 외부 의 별도 장치 )은 필요하지 않습니다.

예. 유용한 VM을 전혀 생각하기 위해서는 일부 하드웨어 MMU (CPU)가 필요합니다. ( x86 플랫폼 용 으로이 8086 세그먼테이션으로 시작했습니다 )

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.