Apakah chip MMU (Memory Management Unit) diperlukan agar prosesor memiliki dukungan memori virtual?

14

Apakah chip MMU (Memory Management Unit) diperlukan agar prosesor memiliki dukungan memori virtual?

Apakah mungkin untuk meniru fungsi MMU dalam perangkat lunak? (Saya sadar bahwa itu mungkin akan berdampak besar pada kinerja).

yoyo_fun
sumber
Setiap komputer yang mampu sepenuhnya dapat meniru komputer lain dengan cukup hit kinerja. Atau meniru perangkat keras apa pun. Satu-satunya pertanyaan adalah besarnya hit kinerja.
Vality
setiap prosesor saat ini membutuhkan TLB, sehingga ia memiliki unit MM bawaan.
rastafile

Jawaban:

22

Emulator sistem apa pun yang mengemulasi sistem yang berisi MMU secara efektif mengemulasi MMU dalam perangkat lunak, jadi jawaban untuk pertanyaan Anda sebagaimana dinyatakan adalah "ya". Namun , memori virtual memerlukan beberapa cara untuk menegakkan kontrol akses memori, atau setidaknya terjemahan alamat, sehingga diperlukan emulasi perangkat lunak lengkap dari CPU yang menjalankan perangkat lunak yang sedang dikendalikan, atau perlu bantuan perangkat keras.

Jadi Anda dapat membangun sebuah sistem tanpa MMU, port QEMU untuk itu, tambahkan bagian yang hilang untuk membuat memori virtual benar-benar berguna ( misalnya , menambahkan dukungan untuk swap pada sistem host), dan menjalankan sistem operasi yang membutuhkan MMU di QEMU, dengan semua perlindungan yang Anda harapkan di sistem operasi tamu (kecuali bug QEMU).

Salah satu contoh nyata, dan lama, dari "emulasi" MMU-less yang digunakan untuk menyediakan memori virtual adalah mesin-Z , yang mampu melakukan paging dan menukar kode dan datanya, pada sistem 8-bit pada akhir tujuh puluhan dan awal delapan puluhan. . Ini bekerja dengan meniru prosesor virtual pada prosesor nyata yang mendasarinya; dengan cara itu, juru bahasa tetap memegang kendali penuh atas tata letak memori yang dilihat oleh program yang berjalan.

Dalam praktiknya, umumnya dianggap bahwa MMU diperlukan untuk dukungan memori virtual, setidaknya di tingkat sistem operasi. Seperti yang ditunjukkan pada kernel MMU-less? , adalah mungkin untuk membangun kernel Linux sehingga dapat berjalan pada sistem tanpa MMU, tetapi konfigurasi yang dihasilkan sangat tidak biasa dan hanya sesuai untuk kasus penggunaan yang sangat spesifik (tanpa perangkat lunak yang tidak bersahabat pada khususnya). Mungkin tidak mendukung banyak skenario yang membutuhkan memori virtual (swapping, mmap...).

Stephen Kitt
sumber
jadi aplikasi mesin virtual juga memiliki komponen emulator MMU?
yoyo_fun
Ya - tidak harus sebagai komponen terpisah, tetapi mereka memiliki dukungan yang diperlukan dalam persaingan.
Stephen Kitt
7
@JenniferAnderson: Beberapa CPU modern memiliki fitur yang memungkinkan emulator (sebagian) melepas emulasi MMU ke MMU itu sendiri. Misalnya program yang berjalan di dalam emulator itu sendiri akan menggunakan beberapa halaman memori yang diemulasikan, halaman memori ini tentu saja "bersarang" di halaman memori yang digunakan oleh emulator. Baik CPU Intel dan AMD kelas atas yang baru memiliki dukungan untuk tabel halaman bersarang, yang memungkinkan emulator mengekspresikan sarang ini di dalam MMU itu sendiri, alih-alih harus (secara mahal) menirunya.
Jörg W Mittag
@ Jorg memang, terima kasih atas klarifikasi. Sebagian besar hypervisor masih menyertakan beberapa level emulasi perangkat lunak sehingga mereka akan bekerja tanpa dukungan perangkat keras tambahan. Saya berkedip oleh aspek “Apakah mungkin” dari pertanyaan ;-).
Stephen Kitt
3
@JenniferAnderson: Ya, fungsi ini secara khusus diperkenalkan untuk para-virtualisasi. (Perhatikan bahwa ini bukan hal yang baru, para-virtualisasi berbantuan perangkat keras telah ada di dunia mainframe sejak awal 1960-an.) Namun ternyata, itu juga dapat digunakan untuk aplikasi menarik lainnya, seperti mempercepat Pengumpulan Sampah (lihat kolektor C4 di Azul's Zing JVM sebagai contoh). Namun, perhatikan, bahwa semua ini bekerja di kedua arah: dengan cara yang sama dengan memperluas MMU dengan dukungan virtualisasi tidak lebih dari optimasi kinerja, dan virtualisasi ...
Jörg W Mittag
7

Itu tergantung pada apa yang Anda sebut memori virtual. Model yang menarik adalah model Win16 lama (paling dikenal dari Windows 3.x lama, bukan Windows NT). Dalam model itu, Anda memiliki GlobalLockdan GlobalUnlock, LocalLockdan LocalUnlockfungsi. Ini adalah bentuk kerja sama, manajemen manual dari memori virtual. Karena ini dilakukan dalam perangkat lunak (aplikasi), itu tidak memerlukan MMU. Dan memori itu virtual dalam arti bahwa memori yang dibuka bisa ditukar ke disk.

Namun, dalam model Win16 tidak ada perlindungan antara proses yang berbeda. Jika proses lain meninggalkan data dalam memori, Anda bisa menimpanya. Ini bukan batasan mendasar. Dengan SSD yang cepat akhir-akhir ini, Anda dapat menghapus proses yang tidak berjalan sepenuhnya dari memori, dan melakukannya dalam waktu yang wajar.

MSalters
sumber
7

Tidak perlu memiliki MMU perangkat keras, jika Anda memiliki perangkat lunak yang dapat bertukar proses ke dan dari memori fisik.

Ini adalah mode operasi sistem operasi multi-tasking awal. Hanya satu proses yang tetap ada di memori pada waktu tertentu, ia ditukar secara keseluruhan ketika slice waktunya berakhir (Anda dapat melihat bahwa ini menjadi masalah dengan proses besar). Isi memori dilihat oleh proses yang sedang berjalan tidak sama dengan yang dilihat oleh proses lain, dan masing-masing memiliki pandangan sendiri tentang ruang alamat.

Beberapa dukungan perangkat keras sangat membantu - gagasan tentang area memori "terlindungi" untuk penggunaan OS sendiri (mis. Semua alamat dengan set MSB hanya dapat diakses dalam mode pengawas) dan nilai "istirahat" yang menunjukkan alamat tertinggi yang digunakan, tetapi manajemen memori perangkat keras bukan persyaratan mutlak untuk memori virtual; itu hanya cara yang sangat efektif untuk mencapainya.

Toby Speight
sumber
2
Namun itu bukan memori virtual, itu hanya proses swapping ... (Kami benar-benar perlu mendefinisikan "memori virtual" untuk jawaban yang tepat untuk pertanyaan ini!)
Stephen Kitt
Setiap proses memiliki tampilan ruang alamat - saya akan mengedit untuk menjelaskan definisi yang saya gunakan.
Toby Speight
Benar, tapi itu pemetaan satu-ke-satu yang sama untuk semua proses. (Dari sudut pandang proses tidak ada banyak perbedaan sehingga tidak ada argumen nyata di sana ...)
Stephen Kitt
0

Mesin komersial asli untuk melakukan VM tidak memiliki MMU - mereka memiliki VM yang dibangun ke dalam prosesor. Pemikiran saya saat ini adalah bahwa MMU hanyalah sebuah renungan untuk menempatkan VM di atas prosesor non-VM. VM dikembangkan di Universitas Manchester, dan desainer Burroughs yakin mereka harus memasukkannya - meskipun sangat inovatif pada saat itu.

The Burroughs B5000 (sekarang mesin Unisys MCP) menggunakan deskriptor memori yang menegakkan batas memori - pergi ke luar batas dan program Anda dibuang (menghormati batas adalah dasar dari masyarakat yang baik, tetapi beberapa menyalahgunakan hak istimewa, sehingga batas harus ditegakkan).

Deskriptor menyimpan alamat memori, panjang blok, dan tipe data, tetapi juga P-bit yang paling penting, atau bit kehadiran. P-bit menunjukkan blok ada di memori. P-bit nol berarti blok pada penyimpanan massal dan alamat adalah alamat penyimpanan, baik dalam program asli (kode atau data), atau dalam VM (data yang diluncurkan).

Mesin-mesin ini menerapkan model memori hirarkis. MMU tampaknya menggantikan kekurangan memori datar, perlu memetakan objek pengguna ke dalam memori datar. JK Iliffe juga merancang mesin ICL dengan model ini:

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

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

Perbedaan antara mesin-mesin ini dan sebagian besar mesin saat ini adalah bahwa mereka mengatasi arsitektur sistem yang lengkap, bukan hanya arsitektur CPU.

Jadi sepertinya tidak hanya MMU tidak diperlukan, tetapi sistem lebih baik tanpanya.

pengguna3717661
sumber
-1

Mayoritas prosesor desktop, laptop, dan server menyertakan satu atau lebih TLB dalam perangkat keras manajemen memori, dan hampir selalu ada di setiap prosesor yang menggunakan memori virtual paged atau segmented .

Translation_lookaside_buffer

Dan kemudian, baca tentang Memori Virtual, dan apa artinya sebenarnya. Ruang alamat virtual yang besar bukanlah ide utama. Gagasan utama adalah caching / buffering, pada banyak tingkatan.

Ini jauh dari sederhana, tetapi cache memori TLB ini adalah bagian penting dari perangkat keras yang dibangun oleh subsistem mm kernel (jika tidak, VM sebagian besar akan overhead).


VM =

memori virtual ATAU mesin virtual. Sangat berbeda, sangat terhubung.


Jadi jawabannya tidak, chip MMU (unit terpisah di luar CPU, pada mainboard) tidak diperlukan.

Ya, beberapa perangkat keras MMU (dalam CPU) diperlukan untuk memikirkan VM yang berguna sama sekali. (Dimulai dengan segmentasi 8086 ini , untuk platform x86)

rastafile
sumber