Swaping, Paging, Segmentation, dan memori virtual pada arsitektur x86 PM

4

Yah, ini mungkin tampak pertanyaan umum atau sudah diajukan tetapi setelah mencari berbagai buku, tutorial online dan bahkan di sini di SU, saya masih bingung bagaimana keempat binatang ini bekerja sama pada sistem mode dilindungi x86.

Apa terminologi yang benar yang dapat digunakan ketika membahas tentang hal-hal ini?

Sejauh yang saya mengerti, keempat konsep ini sangat berbeda, tetapi saling terkait ketika kita berbicara tentang melindungi memori. Di sinilah itu kacau untuk saya!

Saya akan mulai dengan bertukar terlebih dahulu.

Bertukar:

Suatu proses harus dalam memori fisik untuk dieksekusi. Suatu proses dapat ditukar sementara dari memori fisik ke toko dukungan dan kemudian dibawa kembali ke memori untuk eksekusi selanjutnya.

Ini berlaku khusus untuk lingkungan multitasking di mana beberapa proses akan dieksekusi pada saat yang sama, dan karenanya penjadwal cpu diimplementasikan untuk memutuskan proses mana yang akan ditukar dengan backing store.

Paging: alias paging sederhana:

Misalkan suatu proses memiliki semua alamat yang ia gunakan / akses dalam kisaran 0 hingga 16MB, katakanlah. Kita bisa menyebutnya ruang alamat logis dari proses , karena alamat dihasilkan oleh proses.

Perhatikan bahwa dengan definisi ini, ruang alamat logis suatu proses dapat berbeda dari proses lain, karena prosesnya mungkin lebih besar atau lebih kecil.

Sekarang kita membagi ruang alamat logis ini dari suatu proses menjadi blok dengan ukuran yang sama yang disebut halaman . Juga bagi memori fisik menjadi blok ukuran tetap yang disebut bingkai .

Oleh def. alamat logis = halaman #: diimbangi di halaman itu

Ketika suatu proses dipilih untuk dieksekusi oleh penjadwal cpu, halaman-halamannya dimuat dari backing store ke dalam setiap frame memori yang tersedia .

Perhatikan bahwa semua halaman yang termasuk dalam proses ini dimuat dalam memori, sebelum kontrol ditransfer ke proses ini dari penjadwal. Ketika proses ini akan ditukar dengan backing store, semua halamannya disimpan di backing store.

Backing store dibagi menjadi beberapa blok ukuran tetap yang ukurannya sama dengan bingkai memori fisik.

Ini memudahkan proses swapping, karena kami menukar halaman dan bukan byte. Ini mengurangi fragmentasi pada backing store, karena kita tidak perlu menemukan ruang untuk beberapa byte, sebaliknya kita melihat apakah ruang tersebut tersedia untuk sebuah halaman atau tidak.

Teknik paging juga mengurangi fragmentasi memori fisik, karena kami menyimpan halaman dalam memori.

Memori utama harus memiliki ruang untuk semua halaman yang termasuk dalam proses untuk memuat proses itu dalam memori untuk dieksekusi. Jika ada ruang hanya untuk beberapa halaman dari proses ini maka beberapa proses lain (yaitu semua halaman yang termasuk dalam proses) harus ditukar dengan backing store dan kemudian hanya semua halaman dari proses yang akan dieksekusi, harus dimuat dalam memori.

Dengan demikian teknik paging memberikan kinerja yang lebih baik daripada swapping sederhana.

Dengan demikian swapping memungkinkan kita untuk menjalankan beberapa proses tanpa membeli terlalu banyak memori, sebagai gantinya kita dapat bekerja dengan sejumlah kecil memori (jumlah ini harus sedemikian rupa sehingga semua halaman dari program / proses terbesar yang akan dijalankan pada PC dapat dimuat dalam memori - yaitu Anda harus tahu berapa banyak memori yang dibutuhkan oleh program Anda sebelum menjalankannya.) ditambah toko penyimpanan tambahan biasanya disk, yang memiliki biaya yang sangat sedikit untuk kapasitas yang jauh lebih besar daripada memori utama.

Jadi swapping + paging memungkinkan manajemen memori yang efisien sehingga banyak proses dapat dijalankan pada suatu sistem.

Paging permintaan:

Tetapi memori fisik yang dipasang dalam suatu sistem tidak harus sama dengan persyaratan proses. Juga beberapa proses perlu dijalankan.

Solusinya adalah dengan memuat hanya beberapa halaman dari suatu proses ke dalam memori, dan ketika proses mengakses alamat di halaman yang tidak ada dalam memori maka kesalahan halaman dihasilkan dan OS memuat halaman itu sesuai permintaan sehingga proses dapat melanjutkan eksekusi . Ini menghemat waktu untuk memuat semua halaman proses itu sebelum mentransfer kontrol ke sana - seperti kasus dalam paging + swapping.

Teknik menyimpan hanya sebagian dari suatu proses dalam memori, dan bersandar pada backing store, seperti disk, disebut paging permintaan .

Jadi permintaan-paging = paging + swapping + hanya menyimpan beberapa halaman (tidak semua) dari suatu proses dalam memori.


Ini semua tentang paging dan swapping yang saya tahu. Silakan ralat saya, saya salah di beberapa tempat di atas.

Sekarang pertanyaan saya adalah:

  1. bagaimana tepatnya memori virtual dan ruang alamat virtual (alias ruang alamat linier) terkait dengan permintaan-paging dalam konteks mode terproteksi x86.

  2. Apakah "memori virtual suatu proses" adalah istilah yang benar atau memori virtual didefinisikan untuk semua proses yang saat ini berjalan dalam sistem multitasking?

  3. Apakah saya benar: memori virtual tersedia untuk suatu proses == alamat tertinggi dalam ruang alamat Virtual (alias ruang alamat Linear) dari suatu proses +1?

  4. Ini tentang segmentasi: Dalam mode terproteksi x86, kami diberitahu bahwa setiap proses dapat memiliki ruang alamat virtual (VAS) 4GB, ini berarti bahwa karena segmentasi hadir pada arsitektur x86, kami dapat membagi VAS ini menjadi dua atau lebih segmen . Dalam model x86 Flat, kami membuat segmen dalam VAS dari suatu proses yang semuanya tumpang tindih, sehingga segmentasi secara efektif dinonaktifkan - tidak ada segmen. Tetapi kemudian jika mengatakan pada alamat virtual dalam VAS dari beberapa proses, beberapa instruksi cpu hadir, maka ada kemungkinan bahwa kita menimpa instruksi ini ketika mengalokasikan memori (dalam VAS ini) atau ketika kita membuat variabel atau array. Bagaimana kami memastikan ini tidak terjadi. Bit proteksi dalam deskriptor tidak membedakan b / w region seperti dalam mode flat semua segmen tumpang tindih. Bit ini hanya dapat mencegah membaca kode atau mengeksekusi data, dan itu juga hanya karena segmen diakses melalui pemilih.

  5. atau, apakah itu sesuatu seperti setiap segmen diperlakukan sebagai VAS sendiri. Tetapi dalam kasus itu total memori virtual (atau total VAS) yang tersedia untuk suatu proses dalam mode datar, maka akan menjadi: "no. Dari segmen yang dimiliki oleh proses x memori virtual untuk satu segmen". Untuk mode terproteksi x86, ini akan menerjemahkan ke 6 x 4GB = 24GB VAS! dengan asumsi 6 segmen ditunjukkan oleh register CS, DS, ES, GS, FS, SS. Apakah ini benar ?

  6. Bagaimana lingkungan yang mendukung paging sederhana (bukan paging permintaan) tetapi tidak memori virtual, akan memastikan perlindungan dengan berbagai segmen dalam model memori datar? Kami memiliki dua kasus di sini - sistem penugasan tunggal dan sistem penugasan multi-tugas.

UPDATE: pada 2012-07-29

Jadi jika saya memahaminya dengan benar:

Memori virtual adalah sebuah konsep dan diimplementasikan pada arsitektur x86 dengan menggunakan teknik paging permintaan + beberapa bit perlindungan (U bit dan bit W khusus).

TKI, VAS suatu proses dibagi menjadi beberapa halaman , yang kemudian digunakan dalam permintaan-paging.

Mekanisme memori virtual pada dasarnya memiliki dua kegunaan dalam lingkungan multi-tasking:

  1. Ukuran program dapat melebihi jumlah memori fisik yang tersedia untuknya. Sistem operasi menjaga bagian-bagian program saat ini digunakan di memori utama, dan sisanya pada disk. Ini diimplementasikan oleh paging permintaan dengan setiap halaman memiliki 'bit hadir' dan 'bit diakses' terkait dalam entri tabel halamannya.

  2. Untuk memberikan perlindungan memori dengan memberikan setiap proses ruang alamat virtual sendiri, sehingga satu proses tidak dapat mengakses VAS proses lainnya . Ini diimplementasikan dengan memiliki beberapa bit perlindungan yang terkait dengan setiap halaman . Secara khusus, 'Pengguna / Pengawas bit - U bit', bit baca / tulis W bit 'pada entri tabel halaman digunakan untuk perlindungan akses halaman .

Memori virtual berguna baik dalam sistem penugasan tunggal maupun sistem penugasan banyak. Untuk sistem penugasan tunggal, hanya Gunakan # 1 yang relevan.

Perlindungan akses halaman memiliki 2 aspek : perlindungan level hak milik dan perlindungan tulisan . Ini diimplementasikan oleh U bit (untuk prviledge) dan W bit (untuk menulis) masing-masing. Bit-bit ini hadir di entri tabel halaman untuk halaman itu.

Perlindungan memori memiliki 2 aspek : melindungi program dari saling mengakses dan melindungi program dari menimpa sendiri , jika segmen tumpang tindih dalam VAS dari proses / program itu.

Sekarang masalah sebelumnya diselesaikan dengan konsep VAS atau memori virtual, tetapi bagaimana dengan yang terakhir ?

Skema perlindungan akses halaman tidak mencegah yang terakhir sejauh yang saya tahu. TKI, teknik memori virtual tidak mencegah progam dari menimpa sendiri, jika segmen tumpang tindih dalam VAS dari suatu proses.

Tetapi bagi saya kelihatannya bahkan perlindungan tingkat segmen tidak dapat mencegah masalah perlindungan memori yang terakhir (menimpa itu sendiri).

x86 cpu selalu mengevaluasi perlindungan tingkat segmen sebelum melakukan pemeriksaan perlindungan tingkat halaman - tidak peduli apakah itu model datar atau multi-segmen - karena tidak ada cara untuk menonaktifkan segmentasi pada cpu x86.

Pertimbangkan skenario model datar:

Pertimbangkan alamat virtual yang dirujuk oleh CS: off. Sekarang DS: off juga akan merujuk ke alamat virtual yang sama seperti yang disebut oleh CS: off, jika nilai 'off' persis sama dalam kedua kasus. Ini berlaku untuk SS: tidak aktif juga.

Ini juga berarti bahwa halaman di mana ini virtual / linier kebohongan alamat, dipandang oleh Unit paging sebagai hanya halaman karena tidak tahu tentang segmentasi.

Asumsikan semua segmen program, dalam mode datar milik level privilege yang sama, katakan ring0.

Sekarang apa yang akan terjadi jika kita mencoba menulis atau mengeksekusi data di CS: off = DS: off = SS: off.

Asumsikan bahwa alamat ini bukan milik kode OS yang dipetakan dalam VAS proses - tolong kesampingkan OS untuk kesederhanaan, saya berbicara tentang perlindungan tingkat perangkat keras!

Pertama, perlindungan tingkat segmen akan diteruskan, kemudian pemeriksaan tingkat hak istimewa akan berlalu saat mengakses halaman ini (halaman yang berisi CS: off atau DS: off atau SS: off) karena semua segmen memiliki hak istimewa yang sama di sini, tetapi bagaimana dengan W bit untuk halaman ini. Ini harus ditetapkan ke 1 untuk memungkinkan penulisan, jika tidak katakan segmen data tidak akan dapat menulis di halamannya. Jadi ini berarti bahwa halaman ini juga dapat ditulis.

Ini berarti bahwa kita dapat membaca / menulis / mengeksekusi data di alamat virtual (linear) ini: CS: off = DS: off = SS: off.?

Saya tidak mengerti bagaimana perangkat keras x86 dapat memberikan perlindungan pada masalah ini jika segmen yang tumpang tindih.

jack
sumber

Jawaban:

3

Oke diakui memang ada banyak istilah terbang di sekitar dan kata-kata membingungkan, tapi saya akan melakukan yang terbaik untuk menjawab. Sejauh yang saya tahu Anda benar di sebagian besar pemahaman Anda, tetapi ada beberapa poin untuk pergi.

Penting untuk memahami cara kerja paging dan memori virtual dari konteks perangkat keras. Paging akan terbukti tidak praktis tanpa dukungan perangkat keras karena proses harus agnostik mengenai bagaimana memori diletakkan, dan sistem operasi tidak harus menggunakan perangkat lunak untuk menjaga setiap proses pada sistem. Di situlah Memory Management Unit (MMU) masuk. Unit ini pada dasarnya diprogram oleh sistem operasi untuk mengatur halaman dalam ruang alamat virtual dan dapat dikendalikan sesuka hati oleh sistem operasi. Sistem operasi dapat memberi tahu unit halaman mana yang sebenarnya dalam RAM fisik, dan halaman mana yang belum dimuat atau ditukar.

Jadi, bagaimana kita menjaga program dari mengacaukan hal-hal manajemen memori ini? Sesuatu yang kita sebut perlindungan. Kita dapat menjaga proses di-sandbox agar tidak mengganggu sistem operasi dan proses lainnya. Kebingungan mengapa semua istilah-istilah ini dilemparkan bersama-sama berasal dari fakta bahwa mereka memang saling berhubungan. Privelage yang dimiliki kode ditentukan oleh tabel halaman. Tabel halaman memberi tahu MMU bagaimana ruang virtual diletakkan dan juga memberi tahu MMU apakah halaman A) sekarang B) dibaca / tulis C) diizinkan untuk mengeksekusi kode dan D) tingkat keistimewaan (cincin) kode mana pada kata halaman dapat mengeksekusi.

Ketika penjadwal menjadwalkan suatu proses, tabel halaman tidak diciptakan kembali, tidak ada memori baru yang perlu diatur, Sistem Operasi hanya memberitahu MMU untuk menggunakan tabel halaman yang berbeda, yang merupakan proses O (1), atau dengan kata lain, tidak tergantung pada ukuran proses atau berapa banyak memori yang digunakannya. Seluruh proses jarang sekali ditukar keluar dari memori sekaligus, biasanya hanya halaman sekaligus, jadi istilah "swapping" sering diklarifikasi sebagai "swapping halaman".

Oke jadi dengan latar belakang itu, saya akan berusaha menjawab setiap pertanyaan Anda:

  1. Linear Address Space berarti Anda dapat mengakses berbagai hal dari 0 hingga 2 ^ 32. Tidak perlu segmentasi mewah seperti yang diperlukan pada zaman prosesor 16-bit. Memori virtual berarti bahwa ruang alamat linear suatu proses didefinisikan bukan oleh memori utama tetapi oleh Sistem Operasi, ini berarti bahwa sistem operasi dapat mengatur halaman secara sewenang-wenang di ruang alamat ini, menempatkan dirinya pada tingkat tinggi dan proses pada level yang lebih rendah misalnya. Selain itu prosesor dapat menentukan bagian mana dari ruang alamat virtual ini yang dapat diakses oleh hak istimewa apa. Sistem operasi (kernel) dimuat di setiap ruang alamat virtual sehingga proses dapat melakukan panggilan sistem dan sehingga ada tempat untuk pergi ketika mereka preempt. Namun, mereka tidak dapat membaca atau menulis ke area ini karena itu ditandai oleh OS sebagai "kode istimewa saja. Paging permintaan hanya berarti bahwa proses mengharapkan bagian tertentu dari ruang alamat virtual ini untuk memiliki konten tertentu (mungkin file, atau bahkan bagian dari dirinya sendiri), tetapi tidak benar-benar ada, OS telah menandai area "tidak ada" di tabel halaman . Ketika proses akhirnya benar-benar mengakses area ini, karena tidak ada, CPU melempar kesalahan yang terjebak oleh OS. OS kemudian cukup pintar untuk memuat halaman itu dan memulai kembali proses di mana ia tinggalkan. Hasilnya adalah bahwa proses tersebut bahkan tidak menyadari cegukan dan hal-hal hanya dimuat karena dituntut, menghemat memori. Paging permintaan hanya berarti bahwa proses mengharapkan bagian tertentu dari ruang alamat virtual ini untuk memiliki konten spesifik (mungkin file, atau bahkan bagian dari dirinya sendiri), tetapi tidak benar-benar ada, OS telah menandai area "tidak ada" di tabel halaman . Ketika proses akhirnya benar-benar mengakses area ini, karena tidak ada, CPU melempar kesalahan yang terjebak oleh OS. OS kemudian cukup pintar untuk memuat halaman itu dan memulai kembali proses di mana ia tinggalkan. Hasilnya adalah bahwa proses tersebut bahkan tidak menyadari cegukan dan hal-hal hanya dimuat karena dituntut, menghemat memori. karena tidak ada, CPU melempar kesalahan yang terjebak oleh OS. OS kemudian cukup pintar untuk memuat halaman itu dan memulai kembali proses di mana ia tinggalkan. Hasilnya adalah bahwa proses tersebut bahkan tidak menyadari cegukan dan hal-hal hanya dimuat karena dituntut, menghemat memori. karena tidak ada, CPU melempar kesalahan yang terjebak oleh OS. OS kemudian cukup pintar untuk memuat halaman itu dan memulai kembali proses di mana ia tinggalkan. Hasilnya adalah bahwa proses tersebut bahkan tidak menyadari cegukan dan hal-hal hanya dimuat karena dituntut, menghemat memori.

  2. Memori Virtual adalah nama dari seluruh mekanisme ini menentukan tabel halaman dan perlindungan mereka, serta halaman yang mungkin berada di media lain seperti disk, oleh karena itu paging. Memori Virtual mungkin adalah istilah umum untuk judul Anda, kecuali mungkin segmentasi. Ketika merujuk pada proses tertentu, saya pribadi akan menggunakan sesuatu seperti "ruang alamat virtual dari suatu proses," karena itu jelas mengacu pada tata letak memori virtual dari proses tertentu.

  3. Tidak. Seperti yang saya sebutkan sebelumnya, OS dapat secara sewenang-wenang memetakan memori nyata ke lokasi mana pun di ruang alamat virtual dari suatu proses. Itu berarti bahwa itu bisa, misalnya, memiliki situasi di mana kode proses berada di alamat 0x0, tetapi tumpukan (tumbuh turun) dimulai pada 0xFFFFFFF, jelas di sisi lain ruang alamat. Sebenarnya mungkin ada kendala di mana hal-hal dipetakan karena driver perangkat membutuhkan area alamat khusus untuk perangkat keras, tetapi untuk tujuan memahami memori virtual, tidak ada batasan.

  4. Segmentasi hanyalah skema pengalamatan. Dalam 286, itu juga digunakan sebagai mekanisme untuk menerapkan perlindungan, tetapi itu terbukti terlalu tidak fleksibel dan dalam prosesor 32-bit perlindungan selalu dilakukan dengan paging (meskipun seperti yang saya mengerti, 286 skema perlindungan dipertahankan untuk saat paging dinonaktifkan). Karena perlindungan ditentukan oleh mekanisme paging, segmentasi tidak menyebabkan risiko lebih atau lebih kecil untuk menimpa data daripada dalam mode memori datar. Dengan sebagian besar format file yang dapat dieksekusi, segmen kode jelas dipisahkan dari segmen data. Seperti yang kita harapkan kode tidak akan pernah berubah, sistem operasi umumnya menandai halaman segmen kode sebagai hanya baca, sehingga setiap usaha untuk menulis kode menyebabkan kesalahan dan program keluar. Ini tidak akan pernah terjadi jika semua variabel dan array dialokasikan melalui tumpukan atau tumpukan dalam sistem operasi modern. Namun, jika program mulai mencari-cari di luar ini, itu akan macet sebelum dapat menimpa kode apa pun. Risiko yang lebih besar (dan yang dulunya merupakan masalah besar) adalah tumpukan Anda ditimpa dalam buffer overrun. Beberapa dapat mengambil keuntungan dari ini untuk meletakkan kode di stack dan kemudian menyebabkannya dieksekusi secara tidak sah. Sebagai perbaikan, bit baru ditempatkan di tabel halaman "No eXecute" (NX) bit. Ini mencegah halaman agar tidak pernah dieksekusi. Beberapa dapat mengambil keuntungan dari ini untuk meletakkan kode di stack dan kemudian menyebabkannya dieksekusi secara tidak sah. Sebagai perbaikan, bit baru ditempatkan di tabel halaman "No eXecute" (NX) bit. Ini mencegah halaman agar tidak pernah dieksekusi. Beberapa dapat mengambil keuntungan dari ini untuk meletakkan kode di stack dan kemudian menyebabkannya dieksekusi secara tidak sah. Sebagai perbaikan, bit baru ditempatkan di tabel halaman "No eXecute" (NX) bit. Ini mencegah halaman agar tidak pernah dieksekusi.

  5. Ini sama sekali tidak benar. Segmen hanya bertindak sebagai penunjuk ke area (segmen) dari ruang alamat asli 2 ^ 32 byte. Gagasan di balik ini awalnya adalah bahwa itu akan membuat pointer smalle, karena Anda bisa memiliki pointer segmen dan pointer di dalam segmen yang lebih kecil dari seluruh ruang alamat. Sebagai contoh, pada 286 (prosesor 16-bit) masuk akal untuk menjaga pointer pada 16-bit, namun ini menimbulkan masalah karena 286 dapat mengatasi 2 ^ 24 byte memori. Solusinya? Gunakan segmentasi. Segmen bisa berukuran 2 ^ 16 byte dan bisa mengarah ke mana saja di ruang alamat. Kemudian ketika kode harus beroperasi, itu akan menggunakan pointer 16-bit untuk dalam segmen itu saja. Ini lebih cepat dan lebih efisien. Ketika prosesor 32-bit keluar mekanisme ini tidak lagi diperlukan, tetapi karena sudah banyak digunakan oleh kode sebelumnya dan programmer terbiasa, mereka terus melakukan segmentasi. Prosesor 64-bit yang lebih baru tidak menggunakan segmentasi sama sekali.

  6. Kebingungan di sini adalah kenyataan bahwa memori virtual adalah istilah untuk banyak mekanisme berbeda ini. Memori Virtual diperlukan untuk multitasking untuk perlindungan satu proses dari ruang alamat proses lainnya. Paging, dan dengan multitasking preemptive ekstensi, hanya dimungkinkan dengan fitur memori virtual. Namun, banyak dari fitur ini dapat dinonaktifkan secara efektif. Mungkin Anda tidak ingin terjemahan alamat? Kemudian petakan setiap halaman dengan sendirinya. Mungkin Anda tidak ingin perlindungan memori tetapi ingin terjemahan alamat? Kemudian berikan semua hak istimewa untuk setiap halaman. Dalam DOS dan sistem prosesor tunggal lainnya, kebingungan muncul ketika seseorang mengacu pada "mode terlindungi." Biasanya ini merujuk ke mode 32-bit sebagai lawan dari mode nyata 16-bit, jadi meskipun namanya tidak berarti bahwa perlindungan digunakan, hanya saja dalam mode itu dapat diaktifkan. Mungkin ada banyak sistem proses tunggal yang berjalan dalam "mode terlindungi" ini tetapi tidak menggunakan memori virtual atau perlindungan. Xbox asli adalah contoh yang bagus untuk itu. Mungkin ada sedikit peningkatan kinerja ketika semua fitur ini dinonaktifkan. Namun, dalam DOS mungkin masih menguntungkan untuk menggunakan banyak fitur ini. Yang paling penting adalah pertukaran halaman, karena pada hari-hari awal ketika DOS ada di mana-mana, RAM sulit didapat dan oleh karena itu segala mekanisme yang menghemat RAM disambut dan digunakan dengan baik. Perlindungan juga memiliki keuntungan dalam sistem proses tunggal, karena dapat mencegah program mogok secara jelek, memungkinkan debugging yang lebih baik, dan mencegah korupsi data karena akses perangkat keras yang buruk. tapi jangan gunakan memori virtual atau perlindungan. Xbox asli adalah contoh yang bagus untuk itu. Mungkin ada sedikit peningkatan kinerja ketika semua fitur ini dinonaktifkan. Namun, dalam DOS mungkin masih menguntungkan untuk menggunakan banyak fitur ini. Yang paling penting adalah pertukaran halaman, karena pada hari-hari awal ketika DOS ada di mana-mana, RAM sulit didapat dan oleh karena itu segala mekanisme yang menghemat RAM disambut dan digunakan dengan baik. Perlindungan juga memiliki keuntungan dalam sistem proses tunggal, karena dapat mencegah program mogok secara jelek, memungkinkan debugging yang lebih baik, dan mencegah korupsi data karena akses perangkat keras yang buruk. tapi jangan gunakan memori virtual atau perlindungan. Xbox asli adalah contoh yang bagus untuk itu. Mungkin ada sedikit peningkatan kinerja ketika semua fitur ini dinonaktifkan. Namun, dalam DOS mungkin masih menguntungkan untuk menggunakan banyak fitur ini. Yang paling penting adalah pertukaran halaman, karena pada hari-hari awal ketika DOS ada di mana-mana, RAM sulit didapat dan oleh karena itu segala mekanisme yang menghemat RAM disambut dan digunakan dengan baik. Perlindungan juga memiliki keuntungan dalam sistem proses tunggal, karena dapat mencegah program mogok secara jelek, memungkinkan debugging yang lebih baik, dan mencegah korupsi data karena akses perangkat keras yang buruk. di DOS mungkin masih menguntungkan untuk menggunakan banyak fitur ini. Yang paling penting adalah pertukaran halaman, karena pada hari-hari awal ketika DOS ada di mana-mana, RAM sulit didapat dan oleh karena itu segala mekanisme yang menghemat RAM disambut dan digunakan dengan baik. Perlindungan juga memiliki keuntungan dalam sistem proses tunggal, karena dapat mencegah program mogok secara jelek, memungkinkan debugging yang lebih baik, dan mencegah korupsi data karena akses perangkat keras yang buruk. di DOS mungkin masih menguntungkan untuk menggunakan banyak fitur ini. Yang paling penting adalah pertukaran halaman, karena pada hari-hari awal ketika DOS ada di mana-mana, RAM sulit didapat dan oleh karena itu segala mekanisme yang menghemat RAM disambut dan digunakan dengan baik. Perlindungan juga memiliki keuntungan dalam sistem proses tunggal, karena dapat mencegah program mogok secara jelek, memungkinkan debugging yang lebih baik, dan mencegah korupsi data karena akses perangkat keras yang buruk.

Saya harap ini menjawab pertanyaan Anda.

Dougvj
sumber
Oke, semakin jelas. :) Tapi saya tidak mendapatkan jawaban Anda untuk Q # 4 dan Q # 6 saya. Mengenai Q # 4 lihat pembaruan saya pada 2012-07-29. Sejauh Q # 6 yang bersangkutan, saya bertanya itu karena beberapa lingkungan DPMI (yang menjalankan aplikasi di ring0, dan mereka sendiri berjalan pada DOS murni) tidak mendukung memori virtual tetapi mendukung paging. Saya tidak mendapatkan bagaimana paging berguna dalam kasus seperti itu terutama jika lingkungan tasking tunggal misalnya DOS ada pada sistem?
jack
@jack Saya memodifikasi respons untuk mencoba dan menjawab pertanyaan-pertanyaan itu dengan lebih baik. Versi singkatnya adalah ini: Timpa kode dicegah dengan membuat halaman kode hanya bisa dibaca; DPMI tidak selalu berarti perlindungan atau paging diaktifkan, tetapi kadang-kadang itu untuk menghemat memori dan mencegah crash yang mengerikan.
Dougvj
Itu berarti, tanpa menerapkan memori virtual, paging tidak berguna. Bukan? Mengenai "perangkat keras x86 dapat memberikan perlindungan pada masalah ini jika segmen tumpang tindih" , tampaknya tanpa dukungan OS, yaitu mengatakan kami menjalankan program kami di ring0 tanpa OS, yaitu aplikasi kami adalah kernel seperti aplikasi., Lalu ada tidak ada dalam perangkat keras x86, yang dapat menghentikan kita untuk mengeksekusi data dan menulis ke segmen kode. Ini adalah OS yang disertai dengan dukungan perangkat keras x86, mencegah hal ini terjadi. Apakah saya benar?
jack
Itu benar, meskipun aplikasi ring0 kami dapat bertindak seperti OS dan mengatur mekanisme perlindungan yang benar untuk mencegahnya, itu benar-benar hanya akan berguna dalam debugging dan bukan keamanan yang sebenarnya. Pertukaran halaman akan berguna untuk menghemat memori tetapi tidak mudah untuk diterapkan untuk satu aplikasi.
Dougvj
Oke. :) Saya akan meneliti lebih lanjut tentang hal ini dan melihat apakah ada sesuatu yang menunggu untuk membingungkan saya.
jack