Apakah mungkin untuk mendukung banyak proses tanpa dukungan untuk memori Virtual?

8

Apakah mungkin untuk mendukung banyak proses tanpa dukungan untuk memori virtual? Saya ingin tahu lebih banyak tentang hal itu jika demikian.

Sen
sumber
Mungkin di luar topik? Kecuali itu hanya tentang sistem UNIX.
Maciej Piechotka

Jawaban:

10

Anda dapat menjalankan sistem operasi multi-proses bahkan tanpa dukungan perangkat keras (tanpa MMU ), dengan semua pointer mewakili alamat fisik. Namun Anda kehilangan beberapa fitur utama yang biasanya disediakan melalui MMU:

  • Karena pointer selalu menunjuk ke tempat tertentu dalam RAM, Anda tidak dapat melakukan swap (atau hanya dengan cara yang sangat terbatas). Biasanya, MMU memunculkan eksepsi ketika ia tidak dapat menemukan halaman fisik untuk alamat virtual yang diberikan, dan pawang pengecualian yang disediakan OS mengambil halaman dari swap.
  • Karena sebuah pointer direferensikan tanpa pemeriksaan, setiap proses dapat mengakses memori proses lain, dan memori kernel. Biasanya, MMU memunculkan eksepsi ketika ia tidak dapat menemukan halaman fisik untuk alamat virtual yang diberikan, dan pengendali pengecualian yang disediakan OS menghentikan proses untuk mencoba akses yang tidak valid.
  • Karena pointer yang sama memiliki arti yang sama dalam proses yang berbeda, Anda tidak dapat dengan mudah mengimplementasikan garpu . Biasanya, efeknya forkadalah membuat salinan memory memori fisik proses, dan membuat peta memori virtual baru dari alamat virtual yang sama ke alamat fisik baru.

Ada sistem operasi mirip-unix yang bekerja pada sistem tanpa MMU.

¹ Dalam unices modern, ini biasanya dilakukan dengan malas (copy-on-write), yang lagi-lagi bergantung pada MMU yang memunculkan pengecualian ketika tidak dapat menemukan halaman fisik.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Pada poin kedua "ketika tidak dapat menemukan halaman fisik untuk alamat virtual yang diberikan" seharusnya menjadi sesuatu seperti "ketika akses ke halaman yang sesuai dengan alamat virtual yang diberikan harus ditolak". Halaman yang dimiliki oleh kernel kemungkinan besar adalah penduduk.
Ruslan
@Ruslan Ketika suatu halaman tidak dipetakan dalam suatu proses, MMU biasanya berisi informasi yang tidak memetakan ke halaman fisik. Dapat terjadi bahwa MMU berisi alamat halaman fisik yang tidak dapat diakses oleh proses, tapi itu pengecualian daripada aturan, yang digunakan untuk memori kernel jika kernel menggunakan fitur ini dari MMU (yang Linux lakukan) .
Gilles 'SO- berhenti bersikap jahat'
2

Hal ini tentu dimungkinkan dengan beberapa kendala seperti perlindungan memori yang akan menjadi masalah seperti yang telah disebutkan. Misalnya μClinux http://www.uclinux.org/ mendukung banyak proses tanpa menerapkan memori virtual. Perhatikan bahwa beberapa CPU seperti setidaknya Perangkat Analog Blackfin menyediakan MPU (Memory Protection Unit) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu . Ini memungkinkan memori virtual yang kurang sistem operasi masih memungkinkan memori untuk dipartisi.

Jlliagre
sumber
0

Ini tergantung pada bagaimana Anda mendefinisikan proses vs utas dalam hal memori.

Salah satu fungsi memori virtual adalah mempartisi. Meskipun dimungkinkan untuk menjalankan banyak proses tanpa partisi, ini lebih seperti menjalankan banyak utas daripada proses - berbagi ruang alamat yang sama.

sybreon
sumber
Iya dan tidak. Dimungkinkan untuk menegakkan pemisahan memori tanpa memori virtual. Beberapa mikrokontroler memiliki perlindungan memori perangkat keras tetapi tidak memiliki memori virtual (lihat jawaban jlliagre ). Dan bahkan tanpa dukungan perangkat keras, Anda dapat menegakkan pemisahan memori melalui analisis statis (itu tidak mudah, tetapi bisa dilakukan).
Gilles 'SANGAT berhenti menjadi jahat'