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:
bagaimana tepatnya memori virtual dan ruang alamat virtual (alias ruang alamat linier) terkait dengan permintaan-paging dalam konteks mode terproteksi x86.
Apakah "memori virtual suatu proses" adalah istilah yang benar atau memori virtual didefinisikan untuk semua proses yang saat ini berjalan dalam sistem multitasking?
Apakah saya benar: memori virtual tersedia untuk suatu proses == alamat tertinggi dalam ruang alamat Virtual (alias ruang alamat Linear) dari suatu proses +1?
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.
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 ?
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:
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.
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.