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).
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).
Jawaban:
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
...).
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 GlobalLock
dan GlobalUnlock
, LocalLock
dan LocalUnlock
fungsi. 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.
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.
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.
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 .
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)