Virtual Memory


            Memori virtual adalah suatu teknik yang memisahkan antara memori logis dan memori fisiknya. Teknik  ini  menyembunyikan  aspek-aspek  fisik  memori  dari  pengguna  dengan  menjadikan  memori  sebagai  lokasi  alamat  virtual  berupa  byte  yang  tidak  terbatas  dan  menaruh  beberapa  bagian  dari  memori  virtual yang berada di memori logis.
Konsep memori virtual dikemukakan pertama kali oleh John Fotheringham  pada  tahun 1961 dengan menggunakan  dynamic  storage  allocation  pada  sistem komputer  atlas  di  Universitas  Manchester. Sedangkan  istilah  memori  virtual  dipopulerkan  oleh Peter  J.  Denning  yang  mengambil  istilah  'virtual' dari dunia optik. 
Setiap  program  yang  dijalankan  harus  berada  di  memori.  Memori  merupakan  suatu  tempat penyimpanan  utama  (primary  storage)  yang  bersifat  sementara  (volatile).  Ukuran  memori  yang terbatas  menimbulkan  masalah  bagaimana  menempatkan program  yang  berukuran  lebih  besar  dari ukuran  memori  fisik  dan  masalah  penerapan  multiprogramming  yang  membutuhkan  tempat  lebih besar  di  memori.  Dengan  pengaturan  oleh  sistem  operasi  dan  didukung  perangkat  keras,  memori virtual dapat mengatasi masalah kebutuhan memori tersebut.
Memori  virtual  melakukan  pemisahan  dengan  menaruh  memori  logis  ke  disk  sekunder  dan  hanya membawa  halaman  yang  diperlukan  ke  memori  utama.  Teknik  ini  menjadikan  seolah-olah  ukuran memori  fisik  yang  dimiliki  lebih  besar  dari  yang  sebenarnya  dengan  menempatkan  keseluruhan program di disk sekunder dan membawa halaman-halaman yang diperlukan ke memori fisik. Jadi jika proses  yang  sedang  berjalan  membutuhkan  instruksi  atau  data  yang  terdapat  pada  suatu  halaman tertentu maka halaman tersebut akan dicari di memori utama. Jika halaman yang diinginkan tidak ada maka akan dicari di disk. Ide ini seperti menjadikan memori sebagai cache untuk disk.

Beberapa keuntungan penggunaan memori virtual adalah sebagai berikut:
·         Berkurangnya  proses  I/O  yang  dibutuhkan  (lalu  lintas  I/O  menjadi  rendah).  Misalnya  untuk program butuh membaca dari disk dan memasukkan dalam memory setiap kali diakses.
·         Ruang  menjadi  lebih  leluasa  karena  berkurangnya  memori  fisik  yang  digunakan.  Contoh,  untuk  program  10  MB  tidak  seluruh  bagian  dimasukkan  dalam  memori  fisik.  Pesan-pesan  error  hanya dimasukkan jika terjadi error.
·         Meningkatkan respon, karena menurunya beban I/O dan Memori
·         Bertambahnya  jumlah  pengguna  yang  dapat  dilayani. Ruang  memori  yang  masih  tersedia  luas memungkinkan komputer untuk menerima lebih banyak permintaan dari pengguna.
Gagasan  utama  dari  memori  virtual  adalah  ukuran  gabungan  program,  data  dan  stack  melampaui jumlah  memori  fisik  yang  tersedia.  Sistem  operasi  menyimpan  bagian-bagian  proses  yang  sedang digunakan di memori fisik (memori utama) dan sisanya diletakkan di disk. Begitu bagian yang berada di  disk  diperlukan,  maka  bagian  di  memori  yang  tidak  diperlukan  akan  dikeluarkan  dari  memori  fisik (swap-out) dan diganti (swap-in) oleh bagian disk yang diperlukan itu.
Memori  virtual  diimplementasikan  dalam  sistem  multiprogramming.  Misalnya:  10  program  dengan ukuran 2 Mb dapat berjalan di memori berkapasitas 4 Mb. Tiap program dialokasikan 256 Kbyte dan bagian-bagian proses swap in) masuk ke dalam memori fisik begitu diperlukan dan akan keluar (swap out) jika sedang tidak diperlukan. Dengan demikian, sistem multiprogramming menjadi lebih efisien.
Prinsip dari memori virtual yang perlu diingat adalah bahwa "Kecepatan maksimum eksekusi proses di memori virtual dapat sama, tetapi tidak pernah melampaui  kecepatan eksekusi proses  yang sama di sistem yang tidak menggunakan memori virtual".

Memori virtual dapat diimplementasikan dengan dua cara:
1.  Demand paging. Menerapkan konsep pemberian halaman pada proses.
2.  Demand  segmentation.  Lebih  kompleks  diterapkan  karena  ukuran  segmen  yang  bervariasi. Demand segmentation tidak akan dijelaskan pada pembahasan ini.

Segmentation (Segmentasi)

            Segmentasi adalah sebuah bagian dari managemen memori yang mengatur pengalamatan dari memori yang terdiri dari segmen-segmen. logical address space adalah kumpulan dari segmen-segmen yang mana tiap-tiap segmen mempunyai nama dan panjang. alamat tersebut menunjuk kan alamat dari segmen tersebut dan offset-nya didalam segmen-segmen tersebut. pengguna kemudian menentukan pengalamatan dari setiap segmen menjadi dua bentuk, nama segmen  dan offset dari segmen tersebut (Hal ini berbeda dengan pemberian halaman, dimana pengguna hanya menentukan satu buah alamat, dimana pembagian alamat menjadi dua dilakukan oleh perangkat keras, semua ini tidak dapat  dilihat oleh user).
            Ketika kita menulis suatu program,  kita akan menganggapnya sebagai sebuah  program dengan sekumpulan dari subrutin, prosedur, fungsi, atau variabel. mungkin juga  terdapat berbagai macam stru ktur data seperti: tabel,  array,  stack, variabel, dsb. Tiap-tiap modul atau elemen-elemen dari data ini dapat di-referensikan dengan suatu nama,  tanpa perlu mengetahui dimana alamat sebenar nya elemen-elemen tersebut disimpan di memori. dan kita juga tidak perlu mengetahui apakah terdapat urutan penempatan dari program yang kita buat. Pada kenyataannya,  elemen-elemen yang terdapat pada sebuah segmen dapat ditentukan lokasinya dengan menambahkan  offset  dari awal alamat segmen tersebut.
            Untuk kemudahan pengimplementasian, segmen-segmen diberi nomor dan direferensikan dengan menggunakan penomoran tersebut, daripada dengan menggunakan nama. maka,  logical address space  terdiri dari dua  tuple  yaitu: (nomor-segmen, offset) Pada umumnya, program dari pengguna akan dikompilasi, dan kompilator tersebut akan membuat segmen -segmen tersebut secara otomatis. Jika mengambil contoh kompilator dari Pascal, maka kemungkinan kompilator tersebut akan membuat beberapa segmen yang terpisah untuk
1.      Variabel Global
2.      Prosedur dari pemanggilan stack, untuk menyimpan parameter dan pengembalian alamat
3.      Porsi dari kode untuk setiap prosedur atau fungsi, dan
4.      Variabel lokal dari setiap prosedur dan fungsi.

Paging

            Paging merupakan kemungkinan solusi untuk permasalahan fragmentasi eksternal dimana ruang alamat logika tidak berurutan; mengijinkan sebuah proses dialokasikan pada memori fisik yang terakhir tersedia.  Memori fisik dibagi ke dalam blok-blok ukuran tetap yang disebut  frame .  Memori logika juga dibagi ke dalam blok-blok dg ukuran yang sama yang disebut  page .  Semua daftar  frame  yang bebas disimpan.  Untuk menjalankan program dengan ukuran  n page , perlu menemukan  n frame  bebas dan meletakkan program pada  frame  tersebut.  Tabel  page ( page table) digunakan untuk menterjemahkan alamat logika ke alamat fisik.  
            Setiap alamat dibangkitkan oleh CPU dengan membagi ke dalam 2 bagian  yaitu  :
·         Page number( p) digunakan sebagai indeks ke dalam table page( page table). Page table berisi alamat basis dari setiap page pada memori fisik. 
·         Page offset   (d) mengkombinasikan alamat basis dengan  page offset  untuk mendefinisikan alamat memori fisik yang dikirim ke unit memori.

            Pada skema paging, tidak terjadi fragmentasi eksternal, karena “sembarang” frame  dapat dialokasikan ke proses yang memerlukannya.  Tetapi beberapa fragmentasi internal masih mungkin terjadi.  Hal ini dikarenakan  frame  dialokasikan sebagai unit dan jika kebutuhan memori dari proses tidak menemukan page , maka frame  terakhir mungkin tidak dialokasikan penuh.
            Bila suatu proses datang untuk dieksekusi, maka ukurannya diekspresikan dengan page. Setiap  page  membutuhkan satu  frame. Bila proses membutuhkan n page , maka proses tersebut juga membutuhkan n frame. Jika tersedia  n frame, maka memori dialokasikan untuk proses tersebut.
            Pada paging , user memandang memori sebagai bagian terpisah dari memori fisik aktual.  Program user memandang memori sebagai satu ruang berurutan yang hanya berisi program user tersebut.  Faktanya, program user terpecah pada memori fisik, yang juga terdapat program lain.  Karena sistem operasi mengatur memori fisik, perlu diwaspadai lokasi detail dari memori fisik, yaitu frame  mana yang dialokasikan, frame mana yang tersedia, berapa jumlah  frame  dan lain-lain.  Informasi tersebut disimpan sebagai struktur data yang disebut “frame table ”.

            Setiap sistem operasi mempunyai metode sendiri untuk menyimpan tabel page. Beberapa sistem operasi mengalokasikan sebuah tabel  page  untuk setiap proses.  Pointer ke tabel page  disimpan dengan nilai register lainnya dari PCB.  

            Pada dasarnya terdapat 3 metode yang berbeda untuk implementasi tabel page  :
·         Tabel  page  diimplementasikan sebagai kumpulan dari “dedicated ” register. Register berupa rangkaian logika berkecepatan sangat tinggi untuk efisiensi translasi alamat paging.  Contoh : DEC PDP-11.  Alamat terdiri dari 16 bit dan ukuran page 8K.  Sehingga tabel  page  berisi 8 entri yang disimpan pada register.  Penggunaan register memenuhi jika tabel  page  kecil (tidak lebih dari 256 entry).
·         Tabel page  disimpan pada main memori dan menggunakan  page table base registe” (PTBR) untuk menunjuk ke tabel  page  yang disimpan di main memori. Penggunakan memori untuk mengimplementasikan tabel page  akan memungkinkan tabel  page  sangat besar (sekitar 1 juta entry).  Perubahan tabel page  hanya mengubah PTBR dan menurunkan waktu context-switch .  Akan tetapi penggunaan metode ini memperlambat akses memori dengan faktor 2.  Hal ini dikarenakan untuk mengakses memori perlu dua langkah : pertama untuk lokasi tabel page  dan kedua untuk lokasi alamat fisik yang diperlukan.
·         Menggunakan perangkat keras  cache yang khusus, kecil dan cepat yang disebut associative register  atau  translation look-aside buffers (TLBs).  Merupakan solusi standar untuk permasalahan penggunaan memori untuk implementasi tabel  page. Sekumpulan associative register  berupa memori kecepatan tinggi.  Setiap register terdiri dari 2 bagian yaitu  key  dan  value.  Jika  associative register memberikan item, akan dibandingkan dengan semua key secara  simultan. Jika item ditemukan nilai yang berhubungan diberikan.  Model ini menawarkan pencarian cepat tetapi perangkat keras masih mahal.  Jumlah entry pada TLB bervariasi antara 8 s/d 2048.



Swap (Penukaran)

            Sebuah proses membutuhkan memori untuk dieksekusi. Sebuah proses dapat ditukar sementara keluar memori ke backing store (disk), dan kemudian dibawa masuk lagi ke memori untuk dieksekusi. Sebagai contoh, asumsi multiprogramming, dengan penjadualan algoritma CPU Round-Robin. Ketika kuantum habis, manager memori akan mulai menukar keluar proses yang selesai, dan memasukkan ke memori proses yang bebas. Sementara penjadualan CPU akan mangalokasikan waktu untuk proses lain di memori. Ketika tiap proses menghabiskan waktu kuantumnya, proses akan ditukar dengan proses lain.
            Idealnya memori manager, dapat menukar proses-proses cukup cepat, sehingga selalu ada proses dimemori, siap dieksekusi, ketika penjadual CPU ingin menjadual ulang CPU. Besar kuantum juga harus cukup  besar, sehingga jumlah perhitungan yang dilakukan antar pertukaran masuk akal. Variasi dari kebijakan  swapping  ini, digunakan untuk algoritma penjadualan berdasarkan priorita s. Jika proses yang lebih tinggi tiba, dan minta dilayani, memori manager dapat menukar keluar proses dengan prioritas yang lebih rendah, sehingga dapat memasukkan dan mengeksekusi proses dengan prioritas yang lebih tinggi. Ketika proses dengan prioritas lebih tinggi selesai, proses dengan prioritas yang lebih rendah, dapat ditukar masuk kembali, dan melanjutkan. Macam-macam pertukaran ini kadang disebut roll out, dan roll in.
            Normalnya, sebuah proses yang ditukar keluar, akan dimasukkan kembali ke tempat memori yang sama dengan yang digunakan sebelumnya. Batasan ini dibuat oleh method pengikat alamat. Jika pengikatan dilakukan saat assemble atau load time, maka proses tidak bisa dipindahkan ke lokasi yang berbeda. Jika menggunakan pengikatan waktu eksekusi, maka akan mungkin menukar proses kedalam tempat memori yang berbeda. Karena alamat fisik dihitung selama proses eksekusi.
            Pertukaran membutuhkan sebuah backing st ore. Backing store biasanya adalah sebuah disk yang cepat. Cukup besar untuk mengakomodasi semua kopi tampilan memori. Sistem memelihara ready queue terdiri dari semua proses yang mempunyai tampilan memori yang ada di backing store, atau di memori dan siap dijalankan. Ketika penjadual CPU memutuskan untuk mengeksekusi sebuah proses, dia akan memanggil dispatcher, yang mengecek dan melihat apakah proses berikutnya ada diantrian memori. Jika proses tidak ada, dan tidak ada ruang memori yang kosong,  dispatcher  menukar keluar sebuah proses dan memaasukan proses yang diinginkan. Kemudian memasukkan ulang register dengan normal, dan mentransfer pengendali ke proses yang diinginkan.
            Konteks waktu pergantian pada  sistem swapping, lumayan tinggi. Untuk efisiensi kegunaan CPU, kita ingin waktu eksekusi untuk tiap proses lebih lama dari waktu pertukaran. Karenanya digunakan CPU penj adualan roun-robin, dimana kuantumnya harus lebih besar dari waktu pertukaran. Perhatikan bahwa bagian terbesar dari waktu pertukaran, adalah waktu pengiriman. Total waktu pengiriman langsung didapat dari jumlah pertukaran memori. Proses dengan kebutuhan memori dinamis, akan membutuhkan  system call (meminta dan melepaskan memori), untuk memberi tahu sistem operasi tentang perubahan kebutuhan memori. Ada beberapa keterbatasan  swapping. Jika kita ingin menukar sebuah proses kita harus yakin bahwa proses sepenuhnya diam. Konsentrasi lebih jauh, jika ada penundaan I/O. Sebuah proses mungkin menunggu I/O, ketika kita ingin menukar proses itu untuk mengosongkan memori. Jika I/O secara asinkronus, mengakses memori dari I/O buffer, maka proses tidak bisa ditukar. Misalkan I/O operation berada di antrian, karena device sedang sibuk. Maka bila kita menukar keluar proses P1 dan memasukkan P2, mungkin saja operasi I/O akan berusaha masuk ke memori yang sekarang milik P2.

            Dua solusi utama masalah ini adalah :

1.      Jangan pernah menukar proses yang sedang menunggu I/O
2.      Untuk mengeksekusi operasi I/O hanya pada buffer  sistem operasi.

            Secara umum, ruang pertukaran dialokasikan sebagai potongan disk, terpisah dari sistem berkas, sehingga bisa digunakan secepat mungkin. Belakangan pertukaran standar pertukaran digunakan dibeberapa sistem. Ini membutuhkan terlalu banyak waktu untuk menukar dari pada untuk mengeksekusi untuk solusi managemen memori yang masuk akal. Modifikasi  swapping  digunakan dibanyak versi di UNIX. Pertukaran awalnya tidak bisa, tapi akan mulai bila banyak proses yang jalan dan menggunakan batas jumlah memori.

0 komentar:

Posting Komentar

 
© 2012 A-corner | Blogger.com