MANAJEMEN MEMORI

Dalam setiap sistem komputer modern, memori adalah komponen yang sangat fundamental, berfungsi sebagai pusat penyimpanan informasi penting yang harus diatur dan dikelola dengan sangat cermat. Memori dapat dibayangkan sebagai sebuah array besar yang terdiri dari unit-unit kecil bernama word atau byte, masing-masing memiliki alamat uniknya sendiri. Unit Pemroses Pusat (CPU) mengambil instruksi dan data dari memori berdasarkan nilai yang ada pada program counter, yang bertugas menunjukkan lokasi instruksi berikutnya yang akan dieksekusi.

Namun, keberadaan memori saja tidak cukup. Untuk memastikan sistem berjalan efisien dan stabil, diperlukan manajemen memori. Ini adalah serangkaian aktivitas vital yang bertanggung jawab untuk mengelola seluruh memori komputer. Proses ini mencakup alokasi memori kepada program atau proses sesuai permintaan mereka, membebaskan ruang memori yang tidak lagi diperlukan agar dapat digunakan kembali, serta memastikan setiap proses memiliki ruang memori yang teralokasi dengan baik. Pengelolaan memori utama yang efektif sangat krusial untuk meningkatkan efisiensi CPU dan fasilitas input/output, memungkinkan memori menampung sebanyak mungkin proses, serta mengatasi batasan kapasitas memori fisik yang ada pada sistem komputer.

Jenis Memori dalam Sistem Komputer

Memori dalam sistem komputer dapat dikategorikan menjadi dua jenis utama berdasarkan fungsi dan karakteristiknya:

A. Memori Kerja (Primary Memory)

Memori kerja adalah memori utama yang langsung diakses oleh CPU dan memiliki kecepatan akses yang sangat tinggi.

  • ROM (Read-Only Memory): Memori yang isinya tidak dapat diubah dan bersifat non-volatil (data tidak hilang saat listrik mati). Digunakan untuk menyimpan firmware atau boot-up instructions.
  • PROM (Programmable ROM): ROM yang dapat diprogram sekali oleh pengguna.
  • EPROM (Erasable Programmable ROM): ROM yang dapat dihapus isinya dengan sinar ultraviolet dan diprogram ulang.
  • EEPROM (Electrically Erasable Programmable ROM): ROM yang dapat dihapus dan diprogram ulang secara elektrik, lebih fleksibel.
  • RAM (Random Access Memory): Memori yang isinya dapat dibaca dan ditulis, tetapi bersifat volatil (data hilang saat listrik mati). Digunakan sebagai tempat penyimpanan sementara bagi program dan data yang sedang aktif diproses CPU.
  • Cache Memory: Memori berkecepatan sangat tinggi dan berukuran kecil yang berfungsi sebagai buffer antara CPU dan RAM. Tujuannya adalah mempercepat akses CPU ke data dan instruksi yang paling sering digunakan, mengurangi waktu tunggu CPU.

B. Memori Dukung (Secondary Storage/Auxiliary Memory)

Memori dukung adalah penyimpanan jangka panjang yang tidak langsung diakses oleh CPU dan umumnya memiliki kapasitas lebih besar dengan kecepatan lebih rendah dibandingkan memori kerja.

  • Floppy Disk: Media penyimpanan magnetik lama dengan kapasitas sangat kecil, kini sudah jarang digunakan.
  • Harddisk (HDD): Media penyimpanan magnetik utama untuk data jangka panjang, menawarkan kapasitas besar.
  • CD (Compact Disc): Media penyimpanan optik yang digunakan untuk menyimpan data, audio, atau video. Kini mulai digantikan oleh DVD atau Blu-ray.

Fungsi Penting Manajemen Memori

Manajemen memori merupakan salah satu bagian terpenting dalam sistem operasi. Memori perlu dikelola sebaik-baiknya untuk mencapai beberapa tujuan kunci:

  • Utilitas CPU Meningkat: Dengan pengelolaan memori yang efisien, CPU dapat bekerja lebih optimal dan tidak banyak menunggu data.
  • Akses Data dan Instruksi Cepat: Memastikan data dan instruksi yang dibutuhkan CPU selalu tersedia dengan cepat.
  • Efisiensi Pemakaian Memori Terbatas: Mengoptimalkan penggunaan memori fisik yang ukurannya terbatas.
  • Transfer Data Efisien: Memastikan transfer data dari/ke memori utama ke/dari CPU berjalan efisien.
  • Mengelola Informasi Terpakai dan Tidak Terpakai: Memantau bagian memori mana yang sedang digunakan dan mana yang kosong.
  • Mengalokasikan Memori ke Proses: Menyediakan ruang memori yang sesuai untuk setiap proses yang sedang berjalan.
  • Mendealokasikan Memori dari Proses: Mengambil kembali ruang memori dari proses yang telah selesai atau tidak memerlukannya lagi.
  • Mengelola Swapping atau Paging: Mengatur perpindahan data antara memori utama dan disk untuk mendukung multiprogramming.

Isi Memori dan Pengikatan Alamat

Ketika sebuah program dieksekusi, CPU secara terus-menerus mengambil instruksi dan data dari memori. Instruksi tersebut kemudian dikodekan, mungkin mengambil operand (data) dari memori, dan setelah dieksekusi, hasilnya bisa saja dikirim kembali ke memori. Penting untuk dicatat bahwa unit memori hanya mengenal deretan alamat tanpa memahami asal atau tujuan instruksi/data.

Pengikatan Alamat (Address Binding)

Pengikatan alamat adalah proses pemetaan instruksi dan data (yang awalnya berada di disk sebagai file yang dapat dieksekusi) ke alamat memori fisik. Sebagian besar sistem operasi memungkinkan proses pengguna ditempatkan di sembarang lokasi memori fisik. Ini berarti alamat pertama proses user tidak harus selalu dimulai dari alamat 00000.

Pengikatan alamat dapat dilakukan pada beberapa waktu yang berbeda:

  • Compile Time: Jika lokasi memori fisik sudah diketahui sejak awal proses kompilasi, kode absolut (kode mesin yang terikat pada alamat fisik tertentu) dapat dihasilkan. Namun, jika terjadi perubahan alamat awal, seluruh program harus dikompilasi ulang.
  • Load Time: Jika lokasi memori tidak diketahui pada saat kompilasi, compiler akan menghasilkan kode yang dapat direlokasi (relocatable code). Pengikatan alamat baru dilakukan saat program dimuat (load) ke memori.
  • Execution Time: Pengikatan alamat ditunda hingga waktu eksekusi. Ini adalah skema yang paling fleksibel, memungkinkan proses dapat dipindahkan di antara segmen memori yang berbeda selama eksekusi. Ini juga yang memungkinkan konsep virtual memory.

Dynamic Loading

Untuk meningkatkan utilitas ruang memori, teknik dynamic loading dapat digunakan. Dengan dynamic loading, sebuah rutin atau modul program tidak akan disimpan di memori sampai benar-benar dipanggil atau dibutuhkan. Semua rutin disimpan di disk dalam format yang dapat direlokasi (relocatable load).

Mekanismenya adalah program utama dimuat dan dieksekusi terlebih dahulu. Ketika sebuah rutin perlu memanggil rutin lain, sistem akan memeriksa apakah rutin yang dipanggil sudah dimuat di memori. Jika belum, relocatable linking loader akan dipanggil untuk memuat rutin yang diminta ke memori dan memperbarui tabel alamat. Keuntungan utama dari dynamic loading adalah rutin yang tidak pernah digunakan tidak akan membebani memori. Skema ini sangat berguna untuk kode yang besar atau bagian program yang jarang dijalankan, seperti error routine. Yang penting, dynamic loading tidak memerlukan dukungan khusus dari sistem operasi.

Dynamic Linking

Mirip dengan dynamic loading, dynamic linking juga bertujuan untuk menghemat memori. Sebagian besar sistem operasi tradisional menggunakan static linking, di mana system library bahasa pemrograman diperlakukan seperti objek modul lainnya dan digabungkan oleh loader ke dalam executable binary program image.

Namun, dengan dynamic linking, library sistem hanya dimuat sekali ke memori dan dapat dibagi (shared) oleh berbagai program yang membutuhkannya. Tanpa dynamic linking, setiap program yang menggunakan library yang sama akan memiliki salinan library tersebut di dalam executable image masing-masing, yang memakan banyak ruang disk dan memori. Keuntungan dynamic linking adalah penghematan ruang memori. Berbeda dengan dynamic loading, dynamic linking membutuhkan beberapa dukungan dari sistem operasi.

Overlay

Teknik overlay digunakan untuk memungkinkan sebuah proses yang berukuran lebih besar dari jumlah memori fisik yang dialokasikan untuknya agar tetap dapat berjalan. Proses ini membagi program menjadi beberapa bagian yang disebut overlay, dan hanya overlay yang dibutuhkan pada waktu tertentu yang dimuat ke memori. Ketika bagian lain diperlukan, overlay yang tidak terpakai akan digantikan oleh overlay yang baru.

Overlay tidak membutuhkan dukungan khusus dari sistem operasi. Pengguna dapat mengimplementasikannya secara manual dengan struktur file sederhana, membaca bagian program dari file ke memori, dan melompat ke memori tersebut untuk mengeksekusi instruksi yang baru dimuat.

Ruang Alamat Logika dan Ruang Alamat Fisik

Dalam manajemen memori, ada perbedaan fundamental antara dua jenis alamat:

  • Alamat Logika (Logical Address): Ini adalah alamat yang dihasilkan oleh CPU. Alamat ini bersifat "virtual" atau "maya" dan tidak langsung merujuk pada lokasi fisik di memori. Kumpulan semua alamat logika yang dihasilkan oleh sebuah program disebut ruang alamat logika (logical address space).
  • Alamat Fisik (Physical Address): Ini adalah alamat sebenarnya di dalam memori utama (RAM) di mana data atau instruksi disimpan. Kumpulan semua alamat fisik yang berhubungan dengan alamat logika disebut ruang alamat fisik (physical address space).

Tujuan utama manajemen memori adalah untuk melakukan pemetaan antara ruang alamat logika ke ruang alamat fisik. Pada skema pengikatan alamat compile time dan load time, alamat logika dan alamat fisik cenderung sama. Namun, pada skema pengikatan alamat execution time, kedua alamat ini berbeda.

Perangkat keras yang bertanggung jawab untuk memetakan alamat virtual (logika) ke alamat fisik adalah Memory Management Unit (MMU). Dalam skema MMU, nilai dari sebuah register relokasi (base register) ditambahkan ke setiap alamat logika yang dihasilkan oleh proses pengguna sebelum alamat tersebut dikirim ke memori fisik. Ini memastikan setiap proses memiliki "pandangan" sendiri tentang memori, meskipun secara fisik mereka berbagi ruang memori yang sama.

Swapping: Memindahkan Proses dari Memori ke Disk

Swapping adalah teknik manajemen memori di mana sebuah proses secara sementara dipindahkan (swap out) dari memori utama ke backing store (biasanya disk besar berkecepatan tinggi yang dapat menampung salinan semua memory image untuk semua pengguna) dan kemudian dibawa kembali (swap in) ke memori utama untuk melanjutkan eksekusi.

Meskipun sebuah proses harus berada di memori untuk dieksekusi, swapping memungkinkan sistem operasi untuk mengelola lebih banyak proses daripada kapasitas memori fisik yang tersedia. Ini penting untuk multiprogramming, di mana banyak proses berjalan (atau setidaknya berada di memori) secara bersamaan. Backing store harus cukup besar dan memiliki akses yang cepat untuk memastikan perpindahan proses berjalan efisien.

Alokasi Memori Berurutan (Contiguous Allocation)

Dalam skema alokasi memori berurutan, memori utama biasanya dibagi menjadi dua partisi besar:

  • Sistem Operasi: Umumnya ditempatkan pada alamat memori rendah, seringkali bersama dengan vektor interupsi. Ini untuk melindungi sistem operasi dari gangguan proses pengguna.
  • Proses User: Ditempatkan pada alamat memori tinggi.

Alokasi proses pengguna pada memori dapat berupa single partition allocation atau multiple partition allocation.

Single Partition Allocation

Pada skema ini, diasumsikan sistem operasi berada di memori rendah dan hanya satu proses pengguna yang dieksekusi di memori tinggi pada satu waktu. Kode dan data sistem operasi harus diproteksi dari perubahan yang tidak disengaja oleh proses pengguna.

Multiple Partition Allocation

Skema ini mengizinkan memori pengguna dialokasikan untuk beberapa proses berbeda yang menunggu dalam antrian (input queue) untuk dimuat ke memori. Terdapat dua varian utama:

  • Partisi Tetap (Fixed Partition): Memori dibagi menjadi sejumlah partisi dengan ukuran tetap. Setiap partisi berisi tepat satu proses. Jumlah partisi membatasi tingkat multiprogramming yang dapat dicapai. Contoh penggunaannya adalah pada IBM OS/360 yang disebut Multiprogramming with a Fixed number of Tasks (MFT).
  • Partisi Dinamis (Variable Partition): Ini adalah generalisasi dari MFT, sering disebut Multiprogramming with a Variable number of Tasks (MVT). Dalam skema ini, partisi memori dibuat sesuai ukuran proses yang akan dimuat, sehingga ukuran partisi dapat bervariasi.

Fragmentasi

Salah satu masalah utama dalam alokasi memori berurutan adalah fragmentasi, yaitu pemborosan ruang memori.

  • Fragmentasi Eksternal: Terjadi ketika ada cukup ruang memori total untuk memenuhi permintaan, tetapi ruang tersebut tersebar dalam blok-blok kecil yang tidak berurutan dan tidak dapat digabungkan menjadi satu blok besar yang cukup. Ini sering terjadi pada algoritma alokasi dinamis seperti first-fit dan best-fit.
  • Fragmentasi Internal: Terjadi ketika memori yang dialokasikan untuk suatu proses lebih besar dari memori yang sebenarnya diminta oleh proses tersebut. Ruang yang tidak terpakai di dalam partisi yang dialokasikan tersebut menjadi terbuang dan tidak dapat digunakan oleh proses lain.

Paging: Solusi untuk Fragmentasi Eksternal

Paging adalah skema manajemen memori yang dirancang sebagai solusi untuk permasalahan fragmentasi eksternal. Konsep utamanya adalah memungkinkan ruang alamat logika sebuah proses menjadi tidak berurutan di memori fisik. Dengan paging, sebuah proses dapat dialokasikan ke frame (blok ukuran tetap di memori fisik) yang tersedia secara terakhir.

Konsep Dasar Paging

  • Frame: Memori fisik dibagi menjadi blok-blok berukuran tetap yang disebut frame.
  • Page: Ruang alamat logika (virtual) dari sebuah proses juga dibagi menjadi blok-blok berukuran sama yang disebut page. Ukuran page sama dengan ukuran frame.
  • Ketika sebuah proses dieksekusi, page-nya dapat dimuat ke frame mana pun yang tersedia di memori fisik. Pemetaan dari page logika ke frame fisik dicatat dalam sebuah tabel page (page table).

Implementasi Sistem Paging

Setiap sistem operasi memiliki metode sendiri untuk menyimpan tabel page. Beberapa metode implementasi tabel page yang umum meliputi:

  1. Dedicated Registers: Tabel page diimplementasikan sebagai kumpulan register khusus. Ini sangat cepat karena register adalah rangkaian logika berkecepatan tinggi, tetapi membatasi ukuran tabel page (dan oleh karena itu, ukuran ruang alamat logika).

  2. Main Memory: Tabel page disimpan di memori utama. Sebuah register khusus bernama Page Table Base Register (PTBR) menunjuk ke lokasi awal tabel page di memori utama. Metode ini memungkinkan tabel page yang sangat besar (misalnya, jutaan entry), tetapi akses ke memori untuk tabel page akan menambah waktu akses memori (memory access time).

  3. Associative Register / Translation Look-aside Buffers (TLBs): Ini adalah cache perangkat keras khusus yang kecil dan cepat, digunakan untuk menyimpan entri tabel page yang paling sering diakses. TLB adalah solusi standar untuk mengatasi masalah kinerja akses tabel page yang disimpan di memori utama. Ketika CPU membutuhkan alamat, pertama-tama ia memeriksa TLB. Jika ditemukan (TLB hit), translasi sangat cepat. Jika tidak ditemukan (TLB miss), sistem harus mengakses tabel page di memori utama, lalu menambahkan entri tersebut ke TLB untuk penggunaan di masa mendatang.

Proteksi

Pada model paging, proteksi memori dicapai dengan menggunakan bit proteksi yang diasosiasikan dengan setiap frame (atau page table entry). Biasanya, bit proteksi disimpan di dalam tabel page. Misalnya, satu bit dapat mendefinisikan sebuah page sebagai "baca dan tulis" (read and write) atau "baca-saja" (read-only). Setiap akses ke memori melalui tabel page akan memeriksa bit proteksi ini untuk mencegah akses ilegal. Level proteksi yang lebih canggih dapat dicapai dengan menambah jumlah bit proteksi yang digunakan.

Multilevel Paging

Multilevel paging digunakan pada sistem yang memiliki ruang alamat logika yang sangat besar (misalnya, 32-bit hingga 64-bit). Pada sistem seperti ini, tabel page dapat menjadi sangat besar (misalnya, untuk ruang alamat logika 32-bit dengan ukuran page 4 KB, tabel page akan berisi 1 juta entry). Solusinya adalah dengan melakukan partisi tabel page menjadi beberapa bagian yang lebih kecil, membentuk struktur pohon multilevel. Ini mengurangi kebutuhan untuk menyimpan seluruh tabel page di memori sekaligus.

Shared Page

Dalam skema paging, dimungkinkan untuk melakukan sharing kode umum. Bentuk ini sangat penting, terutama dalam lingkungan time-sharing atau multi-user. Satu salinan kode yang bersifat read-only (misalnya, editor teks, compiler, atau sistem window) dapat dibagi di antara beberapa proses. Syaratnya, kode yang dibagi tersebut harus berada pada lokasi ruang alamat logika yang sama untuk semua proses yang menggunakannya. Ini menghemat memori karena hanya satu salinan fisik yang perlu disimpan.

Segmentasi: Pandangan Memori dari Sudut Pandang Pengguna

Segmentasi adalah skema manajemen memori yang memungkinkan pengguna (programmer) melihat memori sebagai kumpulan entitas logis yang bermakna, alih-alih sebagai deretan byte linier. Ruang alamat logika dalam segmentasi adalah kumpulan segmen, di mana setiap segmen memiliki nama (atau nomor unik) dan panjangnya sendiri. Spesifikasi alamat dalam segmentasi berupa nama segmen dan offset di dalam segmen tersebut. Segmen-segmen ini dapat dibentuk secara otomatis oleh compiler.

Konsep Dasar Segmentasi

Konsep inti segmentasi adalah bahwa user atau programmer tidak lagi perlu memikirkan program sebagai array linier byte yang dipetakan ke memori utama. Sebaliknya, memori dilihat sebagai kumpulan segmen dengan ukuran yang berbeda-beda, dan segmen-segmen ini tidak perlu berurutan di antara mereka di memori fisik.

Sebuah program dapat dianggap sebagai kumpulan segmen. Setiap segmen adalah unit logika, seperti:

  • Program utama (main program)
  • Prosedur
  • Fungsi
  • Metode
  • Objek
  • Variabel lokal
  • Variabel global
  • Blok umum (common block)
  • Stack
  • Tabel simbol
  • Array, dan lain-lain.

Arsitektur Segmentasi

Alamat logika dalam segmentasi terdiri dari dua bagian: nomor segmen (s) dan offset (d). Pemetaan alamat logika ke alamat fisik menggunakan tabel segmen (segment table), yang berisi:

  • Segmen Basis (Base): Berisi alamat fisik awal di mana segmen tersebut dimuat di memori.
  • Segmen Limit: Merupakan panjang total segmen tersebut.

Seperti tabel page, tabel segmen dapat diimplementasikan menggunakan register atau memori berkecepatan tinggi.

  • Segment-table Base Register (STBR): Digunakan untuk menyimpan alamat yang menunjuk ke lokasi awal tabel segmen di memori.
  • Segment-table Length Register (STLR): Digunakan untuk menyimpan nilai jumlah segmen yang digunakan oleh program.

Untuk menerjemahkan alamat logika (s, d) ke alamat fisik, sistem pertama-tama memeriksa apakah nomor segmen (s) adalah legal (yaitu, s < STLR). Jika ya, alamat segmen basis diambil dari tabel segmen (yang lokasinya dihitung dari STBR + s). Kemudian, offset (d) ditambahkan ke alamat basis tersebut untuk mendapatkan alamat fisik.

Proteksi dan Sharing

Proteksi dalam segmentasi dapat diimplementasikan dengan menempatkan bit proteksi pada tabel segmen. Misalnya, segmen yang berisi instruksi dapat diproteksi sebagai segmen "baca-saja" (read-only) atau "eksekusi-saja" (execute-only), sementara segmen data dapat diproteksi sebagai "baca-tulis" (read-write). Perangkat keras manajemen memori akan memeriksa bit proteksi ini untuk mencegah akses yang tidak sah.

Sharing segmen juga dimungkinkan dalam segmentasi. Misalnya, beberapa proses dapat berbagi satu salinan segmen library atau kode umum lainnya, menghemat ruang memori.

Kesimpulan

Manajemen memori adalah salah satu aspek paling krusial dari sistem operasi, yang memastikan penggunaan memori utama yang efisien, responsif, dan aman. Dari konsep dasar memori sebagai deretan alamat hingga metode-metode kompleks seperti paging dan segmentasi, setiap teknik memiliki peran vital dalam mengoptimalkan kinerja sistem dan mendukung multiprogramming.

Pengikatan alamat, dynamic loading, dynamic linking, dan overlay adalah mekanisme yang memungkinkan program dijalankan secara fleksibel, mengatasi batasan memori fisik. Sementara itu, pemisahan antara ruang alamat logika dan fisik, serta peran MMU, fundamental dalam menyediakan lingkungan yang terisolasi dan aman bagi setiap proses.

Tantangan seperti fragmentasi memori diatasi melalui pendekatan seperti paging yang memungkinkan alokasi memori tidak berurutan, dan segmentasi

Next Post Previous Post
No Comment
Add Comment
comment url