Tujuan computer adalah mengeksekusi program. Untuk melakukan ini, program-program beserta data yang dibutuhkannya harus berada di dalam memori utama saat proses eksekusi berlangsung. Maka dari itu, memori utama harus dikelola dengan baik demi memaksimalkan pengoperasian komputer.
Oleh karena itu, manajemen memori memiliki peran penting dalam komputer. Komputer modern dapat menjalankan banyak proses dalam sewaktu-waktu. Manajemen memori yang baik pun diperlukan untuk mengatur sumber daya untuk dapat dialokasikan ke proses-proses tersebut. Selain itu, manajemen memori juga dapat membantu komputer mengatasi keterbatasan memori fisiknya. Manajemen memori yang baik dapat memprioritaskan proses mana yang perlu alokasi memori.
Fungsi manajemen memori secara umum pun dapat diklasifikasikan menjadi poin-poin berikut:
- Pengelolaan informasi memori – mengidentifikasi memori yang tidak terpakai dan yang terpakai.
- Alokasi memori – memutuskan proses-proses yang pantas untuk dimasukkan ke dalam memori, dan proses-proses yang tidak lagi memerlukan memori.
- Mengelola proses swapping antara disk dan memori
Monoprogramming dan Multiprogramming
Di dalam bidang sistem operasi terdapat dua konsep manajemen memori dasar: monoprogramming dan multiprogramming. Monoprogramming merupakan teknik manajemen memori yang paling sederhana. Komputer hanya mengijinkan satu proses dalam memori pada suatu waktu, dimana proses tersebut menggunakan semua memori (atau resource) yang ada. Jika terdapat beberapa proses yang perlu dieksekusi, komputer akan mengalokasikan memori secara berurutan.
Multiprogramming merupakan kebalikan dari monoprogramming. Dalam suatu sistem yang menggunakan multiprogramming, memori utama dapat memuat banyak program dan mengeksekusi program-program tersebut secara bersamaan. Sistem operasi yang menggunakan teknik multiprogramming juga menggunakan yang Namanya context switching, dimana program-program yang berjalan diberi waktu yang cukup di dalam memori guna meminimalisir memory overload.
Di dunia kita saat ini, hampir semua perangkat yang memiliki sistem operasi menggunakan multiprogramming. Hal ini dikarenakan kemampuan multiprogramming untuk menjalankan banyak proses secara bersamaan dan utilisasi sumber daya yang efisien.
Swapping
Swapping merupakan suatu teknik dimana suatu proses (atau bagian dari proses) ditukar dengan proses lain secara sementara. Proses yang ditukar ditaruh ke dalam suatu backing store seperti disk sebelum dibawa kembali ke memori utama. Dengan swapping, komputer dapat menggunakan memori lebih dari total kapasitas memori utama.
Swapping pun memiliki beberapa jenis. Standard Swapping melibatkan pertukaran proses secara menyeluruh antara memori utama dan tempat penyimpanan. Tetapi, teknik tersebut sudah jarang digunakan oleh SO-SO modern, dimana mereka menggunakan Swapping with paging (atau paging) yang melibatkan hanya sebuah page (bagian) dari proses untuk dipindahkan dari memori utama dan tempat penyimpanan dan sebaliknya.
Lain lagi halnya dengan proses swapping di perangkat mobile. iOS melakukan swapping dengan cara meminta suatu aplikasi untuk menyerahkan memori untuk aplikasi lain. Data aplikasi tersebut lalu dipindahkan ke flash memory untuk menunggu dipanggil lagi. Jika aplikasi menolak permintaan untuk menyerahkan memori, sistem akan mematikan secara paksa palikasi tersebut. Android pun menggunakan teknik yang mirip. Bedanya, sebelum mematikan suatu aplikasi secara paksa, Android menyimpan application state ke flash memori agar bisa dimuat ulang dengan cepat.
Partisi Statis dan Partisi Dinamis
Memori dapat dibagi menjadi beberapa bagian yang disebut sebagai partisi. Proses pemartisian memori dapat dibagi menjadi dua: partisi statis dan partisi dinamis.
Partisi statis adalah pemecahan memori menjadi beberapa partisi yang kapasitasnya tidak dapat diubah setelah proses pemartisian selesai. Setiap partisi dapat memiliki kapasitas yang sama ataupun berbeda, tergantung dengan kebutuhan pengguna. Di sisi lain, partisi dinamis adalah pemecahan memori menjadi beberapa partisi yang kapasitasnya dapat berubah setelah proses pemartisian selesai. Tidak hanya kapasitas partisi yang dapat berubah, partisi dinamis juga memungkinkan untuk lokasi, jumlah, dan ukuran proses untuk berubah sepanjang waktu.
Setiap metode partisi memiliki kelebihan dan kelemahannya tersendiri. Karena kapasitas partisi statis tidak dapat diubah, ada kemungkinan pemborosan memori saat tidak semua memori dalam partisi tersebut digunakan. Kejadian tersebut disebut fragmentasi. Fragmentasi pun dapat dibagi menjadi dua: fragmentasi internal (yang sudah dijelaskan diatas) dan eksternal – dimana kapasitas partisi terlalu kecil untuk proses yang menunggu di antrian. Tetapi, karena ketetapan kapasitas dan lokasi partisi, proses alokasi dan dealokasi memori menjadi lebih mudah.
Sedangkan untuk partisi dinamis, karena sifatnya dimana lokasi, ukuran, dan jumlah proses yang dapat berubah-ubah sepanjang waktu, proses alokasi dan dealokasi memori menjadi lebih susah. Lubang-lubang kecil memori pun dapat bermunculan di antara partisi-partisi yang dipakai. Tetapi, partisi dinamis lebih superior dalam hal memory utilization karena minimya terjadinya fragmentasi.
Alokasi Memori
Sebelumnya, sudah banyak disebutkan istilah alokasi memori. Namun, kita belum benar-benar membahas apa itu alokasi memori. Alokasi memori adalah suatu proses dimana proses diberikan suatu blok memori (disebut juga lubang) dengan ukuran yang cukup untuk memuat proses tersebut. Ada banyak strategi untuk melakukan hal tersebut, diantaranya:
First Fit & Next Fit
Komputer akan mencari lubang kosong pertama dengan ukuran yang sama atau lebih (dari ukuran proses). Proses pencarian dimulai dari urutan paling awal. Strategi tersebut disebut juga first fit. Proses pencarian pun juga dapat dimulai dari titik dimana proses pencarian sebelumnya berakhir, yang dimana proses ini disebut sebagai next fit.
Best Fit
Komputer akan mencari lubang kosong dengan ukuran terkecil yang mencukupi suatu proses. Strategi ini memerlukan pencarian seluruh list lubang-lubang, kecuali list tersebut sudah diurutkan sesuai ukuran. Strategi ini juga menghasilkan lubang sisa terkecil.
Worst Fit
Komputer akan mencari lubang kosong dengan ukuran terbesar yang mencukupi suatu proses. Strategi ini memerlukan pencarian seluruh list lubang-lubang, kecuali list tersebut sudah diurutkan sesuai ukuran. Strategi ini juga menghasilkan lubang sisa terbesar, yang mungkin dapat menjadi lebih berguna dibandingkan lubang sisa kecil dari strategi best fit.
Sistem Buddy
Sistem buddy merupakan strategi alokasi memori dimana komputer menggunakan suatu lubang yang ukurannya mencukupi suatu proses, tetapi ukuran lubang tersebut hanya dapat memiliki ukuran dimana angkanya merupakan kepangkatan dari dua.
Cara kerja sistem buddy adalah sebagai berikut. Misalnya, sistem meminta memori sebanyak 21 kB dari memori yang berukuran 256 kB. Memori tersebut akan dibagi dua terus menerus, hingga ada lubang yang ukurannya mencukupi permintaan sistem.
Proses pemecahan akan berhenti di lubang-lubang yang berukuran 32 kB karena pemecahan selanjutnya adalah lubang-lubang yang berukuran 16 kB (tidak cukup untuk memenuhi permintaan sistem yaitu 21 kB).
Selanjutnya, jika setelah proses pemecahan sistem meminta memori sebanyak (contohnya) 47 kB, lubang-lubang yang berukuran 32kB dapat dengan mudah digabungkan untuk menmbentuk lubang 64 kB yang akan mengakomodasi permintaan 47kB dari sistem. Proses tersebut disebut juga sebagai coalescing.
Memori Virtual & Overlay
Memori virtual merupakan sebuah teknik pengabstrakan memori yang dapat mengabstrakan memori utama menjadi suatu array (rangkaian) memori, yang dapat memisah memori logika dan memori fisik. Memori virtual juga dapat memungkinkan pengeksekusian suatu proses yang tidak seluruhnya berada di dalam memori. Dengan ini, program yang akan dieksekusi dapat memiliki ukuran yang lebih besar dari ukuran memori fisik.
Contohnya, suatu mesin dengan memori 2 kB ingin menjalankan program sebesar 10 kB. Pertama-tama, program tersebut dipecah menjadi proses-proses yang berukuran 2 kB. Proses pemecahan program ini disebut overlay. Overlay pun dilakukan secara hati-hati agar pemecahan program tidak merusak integritas program. Pengeksekusian proses-proses tersebut pun dibantu dengan proses swapping agar program dapat berjalan dengan normal.