Virtual memory adalah sebuah sistem komputer teknik yang memberikan kesan program aplikasi yang memiliki memori kerja berdekatan (ruang alamat), padahal mungkin secara fisik terfragmentasi dan bahkan mungkin meluap ke penyimpanan disk.

Dikembangkan untuk multitasking kernel, memori virtual menyediakan dua fungsi utama:

1. Setiap proses memiliki ruang alamat sendiri, sehingga tidak diperlukan akan direlokasi maupun yang diperlukan untuk menggunakan mode pengalamatan relatif.
2. Setiap proses satu blok berdekatan melihat memori bebas setelah peluncuran. Fragmentasi tersembunyi.

Semua implementasi (tidak termasuk emulator) memerlukan dukungan hardware. Hal ini biasanya dalam bentuk suatu unit manajemen memori dibangun ke dalam CPU.

Sistem yang menggunakan teknik ini membuat pemrograman aplikasi besar lebih mudah dan menggunakan memori fisik yang sebenarnya (misalnya RAM) lebih efisien daripada mereka yang tidak memiliki memori virtual. Virtual memory berbeda secara signifikan dari virtualisasi memori di memori virtual memungkinkan sumber daya untuk virtual sebagai memori untuk sistem tertentu, sebagai lawan dari kolam besar memori yang virtual sebagai kolam kecil untuk sistem yang berbeda.

Perhatikan bahwa "memori virtual" adalah lebih dari sekedar "menggunakan ruang disk untuk memperpanjang ukuran memori fisik" - yang hanya perpanjangan hirarki memori untuk menyertakan hard disk drive. Memperluas memori ke disk merupakan konsekuensi normal dari menggunakan teknik memori virtual, tapi bisa dilakukan dengan cara lain seperti lapisan atau bertukar program dan data mereka benar-benar keluar untuk disk sementara mereka tidak aktif. Yang dimaksud dengan "memori virtual" mendefinisikan ulang didasarkan pada ruang alamat memori virtual berdekatan dengan alamat untuk "trik" program berpikir mereka menggunakan alamat blok besar bersebelahan.

Modern untuk tujuan umum sistem operasi komputer umumnya menggunakan teknik memori virtual untuk aplikasi biasa, seperti pengolah kata, spreadsheet, pemutar multimedia, akuntansi, dll, kecuali dukungan hardware yang dibutuhkan (unit manajemen memori) tidak tersedia. sistem operasi lama seperti DOS dari tahun 1980-an, untuk atau mereka mainframe tahun 1960-an, umumnya tidak memiliki fungsi virtual memory - pengecualian menjadi Atlas, B5000 dan Apple Computer Lisa.

Embedded sistem dan lainnya sistem komputer tujuan khusus yang memerlukan sangat cepat dan / atau waktu respon yang sangat konsisten dapat memilih untuk tidak menggunakan memori virtual karena determinisme menurun. Hal ini didasarkan pada gagasan bahwa pengecualian prosesor jitter tidak terduga menghasilkan yang tidak diinginkan pada CPU dioperasikan I / O, yang tertanam prosesor yang lebih kecil sering melakukan secara langsung untuk menjaga biaya dan konsumsi daya rendah, dan aplikasi sederhana terkait telah menggunakan sedikit untuk fitur multitasking.

Sejarah

Pada tahun 1940-an dan 1950-an, sebelum pengembangan memori virtual, semua program yang lebih besar harus berisi logika untuk mengelola dua tingkat penyimpanan (primer dan sekunder, analogi saat ini sedang RAM dan hard disk), seperti teknik overlay. Program bertanggung jawab untuk memindahkan overlay bolak-balik dari penyimpanan sekunder untuk primer.

Alasan utama untuk memperkenalkan virtual memory karena itu tidak hanya untuk memperpanjang memori utama, tapi untuk membuat seperti perpanjangan sebagai mudah digunakan untuk programmer mungkin.

Banyak sistem sudah memiliki kemampuan untuk membagi memori antara beberapa program (diperlukan untuk multiprogramming dan multiprocessing), yang diberikan misalnya dengan "basis dan register batas" pada model awal PDP-10, tanpa menyediakan memori virtual. Yang memberi setiap aplikasi ruang alamat pribadi mulai dari alamat 0, dengan alamat pada ruang alamat pribadi yang diperiksa terhadap batas mendaftar untuk memastikan hal itu dalam bagian memori dialokasikan untuk aplikasi dan, jika, memiliki isi register dasar yang sesuai akan ditambahkan untuk itu untuk memberikan alamat di memori utama. Ini adalah bentuk sederhana dari segmentasi tanpa memori virtual.

Pager dikembangkan sekitar selama 1959-1962, di Universitas Manchester untuk Komputer Atlas, yang memperkenalkan mekanisme sebagai cara yang murah untuk memperpanjang memori utama menggunakan drum penyimpanan. Pada tahun 1961, Burroughs merilis B5000, yang pertama komersial komputer dengan memori virtual, yang digunakan segmentasi daripada paging.

Seperti banyak teknologi dalam sejarah komputasi memori, virtual tidak diterima tanpa tantangan. Sebelum itu dapat diterapkan dalam sistem operasi mainstream, banyak model, eksperimen, dan teori-teori harus dikembangkan untuk mengatasi masalah banyak. terjemahan alamat dinamik diperlukan khusus, mahal, dan sulit untuk membangun perangkat keras. Selain itu, awalnya sedikit melambat akses ke memori. Ada juga kekhawatiran bahwa seluruh sistem algoritma baru menggunakan penyimpanan sekunder akan jauh lebih efektif daripada yang sebelumnya digunakan aplikasi khusus.

Pada 1969 perdebatan tentang virtual memory untuk komputer komersial sudah berakhir. Sebuah penelitian IBM tim yang dipimpin oleh David Sayre menunjukkan bahwa sistem virtual memory overlay secara konsisten bekerja lebih baik dari sistem terbaik dikendalikan secara manual.

Kemungkinan komputer mini pertama kali meluncurkan memori virtual adalah NORD Norwegia-1. Selama tahun 1970-an, minicomputers memori virtual lain yang dapat diterapkan, terutama model-model berjalan VAX VMS.

Memori virtual diperkenalkan pada arsitektur x86 dengan modus dilindungi dari prosesor Intel 80286. Awalnya itu dilakukan dengan segmen swapping, yang menjadi tidak efisien dengan segmen yang lebih besar. 80.386 Intel memperkenalkan dukungan untuk paging di bawah lapisan ada segmentasi. Kecuali kesalahan halaman dapat dirantai dengan pengecualian lain tanpa menyebabkan kesalahan ganda.

Paged memori virtual

Hampir semua implementasi dari memori virtual membagi ruang alamat virtual dari program aplikasi ke dalam halaman, halaman adalah sebuah blok alamat memori virtual berdekatan. Halaman biasanya minimal 4 K (4 × 1024) byte dalam ukuran, dan sistem dengan rentang alamat virtual besar atau dalam jumlah besar memori nyata (RAM misalnya) umumnya menggunakan ukuran halaman yang lebih besar.

tabel Page

Hampir semua implementasi menggunakan tabel halaman untuk menerjemahkan alamat virtual dilihat oleh program aplikasi ke alamat fisik (juga disebut sebagai "alamat nyata") yang digunakan oleh hardware untuk proses instruksi. Setiap entri dalam tabel halaman berisi pemetaan untuk halaman virtual ke salah satu alamat memori yang sebenarnya pada halaman yang disimpan, atau indikator bahwa halaman saat ini diadakan di sebuah file disk. (Meskipun sebagian besar, beberapa sistem mungkin tidak mendukung penggunaan file disk untuk memori virtual.)

Sistem dapat memiliki satu tabel halaman untuk keseluruhan sistem atau tabel halaman terpisah untuk setiap aplikasi. Jika ada aplikasi yang berbeda hanya satu, yang berjalan pada saat yang sama berbagi ruang alamat virtual tunggal, yaitu mereka menggunakan bagian-bagian yang berbeda dari kisaran alamat virtual tunggal. Sistem yang menggunakan tabel halaman beberapa menyediakan beberapa ruang alamat virtual - aplikasi konkuren berpikir mereka menggunakan kisaran alamat virtual yang sama, tapi tabel terpisah mereka halaman redirect ke alamat nyata berbeda.

terjemahan alamat Dinamis

Jika, sambil mengeksekusi instruksi, CPU menjemput instruksi yang terletak pada alamat virtual tertentu, atau menjemput data dari alamat virtual tertentu atau menyimpan data ke alamat virtual tertentu, alamat virtual harus diterjemahkan ke alamat fisik yang sesuai. Hal ini dilakukan oleh komponen perangkat keras, kadang-kadang disebut sebuah unit manajemen memori, yang mendongak alamat nyata (dari tabel halaman) yang berkorespondensi dengan alamat virtual dan melewati alamat nyata pada bagian-bagian dari CPU yang mengeksekusi instruksi. Jika halaman tabel menunjukkan bahwa halaman memori virtual saat ini tidak di memori nyata, hardware pengecualian menimbulkan kesalahan halaman (sinyal internal khusus) yang memanggil komponen paging supervisor dari sistem operasi (lihat di bawah).

supervisor Pager

Ini bagian dari sistem operasi membuat dan mengelola tabel halaman. Jika alamat hardware terjemahan dinamis menimbulkan kecuali kesalahan halaman, pengawas paging pencarian halaman pada ruang penyimpanan sekunder untuk halaman yang berisi alamat virtual diperlukan, membacanya ke dalam memori fisik yang nyata, update tabel halaman untuk mencerminkan lokasi baru virtual alamat dan akhirnya memberitahu alamat mekanisme terjemahan dinamis untuk memulai pencarian lagi. Biasanya semua memori fisik yang sebenarnya sudah digunakan dan paging supervisor harus terlebih dahulu menyimpan area memori fisik yang sebenarnya ke disk dan memperbarui tabel halaman untuk mengatakan bahwa alamat virtual terkait tidak lagi di memori fisik yang sesungguhnya, tapi disimpan pada disk. Pager supervisor umum dan menimpa daerah menyimpan memori fisik nyata yang telah setidaknya baru-baru ini dipakai, karena ini mungkin merupakan daerah yang paling sering dipakai. Jadi setiap kali alamat hardware terjemahan dinamis cocok dengan alamat virtual dengan alamat memori fisik yang nyata, ia harus meletakkan cap waktu pada entri tabel halaman untuk itu alamat virtual.

Secara halaman penduduk

Sistem Operasi memiliki luas memori yang "ditembaki", yaitu tidak dapat ditukarkan ke penyimpanan sekunder, misalnya:

* Interrupt mekanisme umumnya mengandalkan array pointer ke penangan untuk berbagai jenis mengganggu (I / O selesai, acara timer, kesalahan program, kesalahan halaman, dll). Jika halaman yang mengandung petunjuk atau kode yang mereka seru itu pageable, menyela-penanganan akan menjadi lebih rumit dan memakan waktu, dan itu akan sangat sulit dalam kasus interupsi kesalahan halaman.
* Tabel halaman biasanya tidak pageable.
* Data buffer yang diakses di luar CPU, misalnya dengan perangkat tambahan yang menggunakan akses memori langsung (DMA) atau oleh I / O channel. Biasanya perangkat tersebut dan bus (jalur koneksi) yang mereka dilampirkan menggunakan alamat memori fisik, bukan alamat memori virtual. Bahkan di bus dengan IOMMU, yang merupakan manajemen unit memori khusus yang dapat menerjemahkan alamat virtual digunakan pada I / bus O ke alamat fisik, transfer tidak dapat dihentikan jika kesalahan halaman terjadi dan kemudian restart saat kesalahan halaman ini telah diproses . Jadi halaman yang berisi lokasi atau dari mana suatu piranti periferal adalah mentransfer data baik secara permanen ditembaki atau ditembaki ketika transfer sedang berlangsung.
* Timing kernel-tergantung / area aplikasi tidak bisa mentolerir waktu respon bervariasi disebabkan oleh paging. Secara khusus pengawas kode paging atau driver untuk perangkat penyimpanan sekunder tidak boleh bertukar keluar.

Virtual operasi = nyata

Dalam MVS, z / OS, dan OS yang sama, beberapa bagian dari sistem memori dikelola dalam mode = virtual yang nyata, di mana setiap alamat virtual sesuai dengan alamat yang sebenarnya. Mereka adalah:

* Mengganggu mekanisme
* Paging supervisor dan halaman tabel
* Semua data buffer diakses oleh I / O saluran Kutipan
* Aplikasi program yang menggunakan metode non-standar pengelolaan I / O dan karena itu memberikan buffer mereka sendiri dan berkomunikasi langsung dengan periferal (program yang membuat saluran perintah kata mereka sendiri).

Dalam sistem operasi IBM awal virtual memori modus real virtual = satu-satunya cara untuk "pin down" halaman. z / OS memiliki 3 mode, = V V (virtual = maya; sepenuhnya pageable), V = R dan V = F (virtual = tetap, yaitu "ditembaki" tetapi dengan DAT operasi). [7]

Tersegmentasi virtual memory

Beberapa sistem, seperti sistem Burroughs besar, tidak menggunakan paging untuk mengimplementasikan memori virtual. Sebaliknya, mereka menggunakan segmentasi, sehingga virtual address space sebuah aplikasi dibagi menjadi segmen variabel-panjang. Alamat maya terdiri dari beberapa segmen dan offset dalam segmen tersebut.

Terutama, didukung Intel 80286 skema segmentasi yang sama sebagai pilihan, tapi itu tidak digunakan oleh sistem operasi.

Hal ini dimungkinkan untuk menggabungkan segmentasi dan paging, biasanya membagi segmen ke halaman masing-masing. Dalam sistem yang menggabungkan mereka, seperti Multics dan System/38 IBM dan IBM System i mesin, memori virtual biasanya diimplementasikan dengan Pager, dengan segmentasi digunakan untuk menyediakan perlindungan memori. Dengan Intel 80386 dan kemudian IA-32 prosesor, segmen berada dalam ruang alamat 32-bit linear paged, sehingga segmen dapat dipindahkan ke dalam dan keluar dari ruang alamat linier, dan halaman di ruang alamat linier dapat dipindahkan masuk dan keluar dari memori utama , menyediakan dua tingkat memori virtual, namun jika ada beberapa sistem operasi melakukannya. Sebaliknya, mereka hanya menggunakan paging.

Perbedaan antara implementasi memori virtual menggunakan halaman dan menggunakan segmen bukan hanya tentang pembagian memori dengan ukuran tetap dan variabel, masing-masing. Dalam beberapa sistem, umpamanya Multics, atau kemudian System/38 dan mesin Perdana, segmentasi itu sebenarnya terlihat oleh pengguna proses, sebagai bagian dari semantik model memori. Dengan kata lain, bukan sebuah proses hanya memiliki memori yang tampak seperti vektor besar tunggal byte atau kata-kata, itu lebih terstruktur. Hal ini berbeda dengan menggunakan halaman, yang tidak mengubah model terlihat pada proses. Hal ini memiliki konsekuensi penting.

Segmen bukan hanya halaman "dengan panjang variabel", atau cara sederhana untuk memperpanjang ruang alamat (seperti pada Intel 80286). Dalam Multics, segmentasi itu merupakan mekanisme yang sangat kuat yang digunakan untuk menyediakan model memori virtual single-level, di mana tidak ada pembedaan antara "memori proses" dan "file system" - sebuah proses 'ruang alamat aktif hanya terdiri daftar segmen (file) yang dipetakan ke ruang alamat potensi, baik kode dan data. Hal ini tidak sama dengan fungsi mmap kemudian di Unix, karena antar-file pointer tidak bekerja saat file pemetaan ke semi- sewenang-wenang tempat. Multics memiliki seperti mode pengalamatan dibangun ke instruksi paling. Dengan kata lain itu bisa melakukan pindah referensi antar-segmen, sehingga menghilangkan kebutuhan untuk linker yang sepenuhnya. ini juga bekerja ketika proses yang berbeda memetakan file yang sama ke tempat yang berbeda dalam ruang alamat pribadi mereka.

0 komentar:

Post a Comment

 
Top