가상 메모리를 지원하려면 프로세서에 MMU(메모리 관리 장치) 칩이 필요합니까?

가상 메모리를 지원하려면 프로세서에 MMU(메모리 관리 장치) 칩이 필요합니까?

가상 메모리를 지원하려면 프로세서에 MMU(메모리 관리 장치) 칩이 필요합니까?

소프트웨어에서 MMU 기능을 에뮬레이트하는 것이 가능합니까? (이것이 성능에 큰 영향을 미칠 수 있다는 것을 알고 있습니다.)

답변1

MMU가 포함된 시스템을 시뮬레이션하는 모든 시스템 시뮬레이터는 소프트웨어에서 MMU를 효과적으로 시뮬레이션하므로 MMU를 에뮬레이션하는 것이 가능합니다.하지만, 가상 메모리에는 메모리 액세스 제어 또는 최소한 주소 변환을 시행하는 방법이 필요하므로 제어되는 소프트웨어를 실행하는 CPU의 전체 소프트웨어 에뮬레이션이 필요하거나 하드웨어 지원이 필요합니다.

따라서 MMU, 포트 없이 시스템을 구축하는 것을 상상할 수 있습니다.QEMU누락된 부분을 추가하여 가상 메모리를 정말 유용하게 만드세요(예를 들어, 호스트 시스템에서 스와핑 지원 추가), 게스트 운영 체제에서 기대할 수 있는 모든 보호 기능과 함께 QEMU에서 MMU가 필요한 운영 체제를 실행합니다(QEMU에 버그가 있는 경우 제외).

가상 메모리를 제공하는 데 사용되는 MMU 없는 "에뮬레이션"의 실제적이고 오래된 예는 다음과 같습니다.Z 머신, 70년대 후반과 80년대 초반부터 8비트 시스템에서 코드와 데이터를 페이징하고 교환할 수 있었습니다. 이는 기본 실제 프로세서 위에 가상 프로세서를 시뮬레이션하여 수행됩니다. 이러한 방식으로 인터프리터는 실행 중인 프로그램에서 "표시되는" 메모리 레이아웃을 완벽하게 제어할 수 있습니다.

실제로는 적어도 운영 체제 수준에서 가상 메모리를 지원하려면 MMU가 필요하다고 일반적으로 알려져 있습니다. 에 표시된 바와 같이MMU 코어가 없나요?, MMU 없이 시스템에서 실행되도록 Linux 커널을 구축하는 것이 가능하지만 결과 구성은 매우 이례적이며 매우 특정한 사용 사례(특히 악성 코드가 없는 경우)에만 적합합니다. 가상 메모리(스와핑, ...​​)가 필요한 많은 시나리오를 지원하지 않을 수 있습니다 mmap.

답변2

가상 메모리라고 부르는 것에 따라 다릅니다. 흥미로운 모델은 이전 Win16 모델(Windows NT가 아닌 이전 Windows 3.x로 가장 잘 알려져 있음)입니다. 이 모델에는 GlobalLockGlobalUnlock, LocalLock기능 이 있습니다 LocalUnlock. 이는 가상 메모리를 공동으로 수동으로 관리하는 형태입니다. 이는 (응용 프로그램) 소프트웨어에서 수행되므로 MMU가 필요하지 않습니다. 잠금 해제된 메모리를 디스크로 교체할 수 있으므로 메모리는 가상입니다.

그러나 Win16 모델에서는 서로 다른 프로세스 간에 보호 기능이 없습니다. 다른 프로세스가 메모리에 데이터를 남겨둔 경우 이를 덮어쓸 수 있습니다. 이는 근본적인 제한이 아닙니다. 오늘날 빠른 SSD를 사용하면 실행되지 않는 프로세스를 메모리에서 완전히 제거할 수 있으며, 이를 합리적인 시간 내에 수행할 수 있습니다.

답변3

하드웨어 MMU가 필요하지 않습니다. 소프트웨어가 있으면 하드웨어 MMU가 필요하지 않습니다.교환물리적 메모리에 들어가고 나가는 프로세스입니다.

이것이 초기 멀티태스킹 운영 체제가 작동한 방식입니다. 특정 시간에 하나의 프로세스만 메모리에 상주하며 해당 시간 조각이 만료되면 완전히 교체됩니다(대규모 프로세스에서 이것이 어떻게 문제가 될 수 있는지 확인할 수 있습니다). 현재 실행 중인 프로세스는 다른 프로세스와 다르게 메모리 내용을 확인하며, 각 프로세스는 주소 공간에 대한 고유한 보기를 갖습니다.

일부 하드웨어 지원이 도움이 될 수 있습니다. 운영 체제 자체 사용을 위한 "보호된" 메모리 영역(예: MSB 세트가 있는 모든 주소는 관리 모드에서만 액세스할 수 있음) 및 사용 중인 가장 높은 주소 값을 나타내는 "인터럽트" 개념이 도움이 될 수 있습니다. 메모리 관리 하드웨어는 가상 메모리에 대한 절대적인 요구 사항이 아니며 단지 이 목표를 달성하기 위한 특히 효율적인 방법일 뿐입니다.

답변4

VM을 수행한 원래 상업용 시스템에는 MMU가 없었습니다. VM을 프로세서에 구축했습니다. 내 현재 생각은 MMU가 VM이 아닌 프로세서 위에 VM을 배치하기 위한 사후 고려일 뿐이라는 것입니다. VM은 맨체스터 대학교에서 개발되었으며 Burroughs의 디자이너는 당시 매우 혁신적이었음에도 불구하고 VM을 통합해야 한다고 확신했습니다.

Burroughs B5000(현재 Unisys MCP 시스템)은 메모리 설명자를 사용하여 메모리 경계를 강화했습니다. 이를 초과하면 프로그램이 폐기되었습니다(경계를 존중하는 것이 좋은 사회의 기초이지만 일부 사람들은 특권을 남용하므로 경계를 강화해야 합니다).

설명자는 메모리 주소, 블록 길이 및 데이터 유형과 가장 중요한 P 비트 또는 존재 비트를 보유합니다. p 비트는 블록이 메모리에 있음을 나타냅니다. 0 p 비트는 블록이 대량 저장소에 있고 주소가 원래 프로그램(코드 또는 데이터) 또는 VM(롤아웃 데이터)의 저장소 주소임을 의미합니다.

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

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

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

이러한 시스템이 오늘날 대부분의 시스템과 다른 점은 CPU 아키텍처뿐만 아니라 전체 시스템 아키텍처를 다룬다는 것입니다.

따라서 MMU는 불필요할 뿐만 아니라 MMU가 없으면 시스템이 더 나은 것으로 보입니다.

관련 정보