Secara logika, prosesor hanya mengakses data menggunakan referensi alamat I/O serta alamat memori utama. Itu sebabnya sebelum dieksekusi, kode instruksi maupun data yang diproses oleh prosesor harus sudah disalin terlebih dahulu di buffer pengendali peranti I/O ataupun di memori utama.

Pernyataan yang mendasar adalah bagaimana seorang membuat program (programmer) mengetahui alamat memori atau I/O yang harus direferensi oleh kode instruksi programnya. Misalnya, didalam program terdapat instruksi membaca variabel X. Pada saat eksekusi prosesor, instruksi ini merupakan instruksi yang membaca dari suatu alamat memori utama yang merupakan alamat dari variabel X.

Untungnya hal rumit semacam ini tidak dibebankan kepada pemrograman aplikasi. Tugas untuk mereferensi kode instruksi atau data di memori utama secara tepat merupakan tanggung jawab dari program kompilator (compiler) serta metode pengalamatan memori yang digunakan oleh sistem operasi.

Kompilator berfungsi mengubah kode program sumber (source code) yang ditulis oleh pemrogram menjadi berkas yang berisi kode instruksi program yang dapat dijalankan pada metode pengalamatan memori yang digunakan oleh sistem komputer, terutama dalam hal menentukan referensi alamat instruksi maupun data.

Metode pengalamatan memori mendefinisikan model alamat yang dituliskan pada kode instruksi program, mekanisme penyalinan, loading kode instruksi , dan data program ke memori utama, serta kapan dan bagaimana alamat dalam kode instruksi program diterjemahkan ke alamat fisik memori utama yang sesunggunya.

Secara garis besar, pengalamatan memori dapat dibedakan ata pengalamatan secara fisik, relatif dan logika :

  1. Pengalamatan Secara Fisik (Physical / Absolute Addressing) , Pada metode pengalamatan memori secara fisik, alamat yang ditulis pada kode instruksi program hasil kompilasi merupakan alamat fisik memori utama yang sesungguhnya . Konsekuensi adalah pada saat penyalinan image proses ke memori utama, maka kode instruksi dan data porgram hasus disalin pada posisi yang sesuai dengan referensi tersebut. Pada saat eksekusi , prosesor akan memproses alamat pada kode instruksi program secara langsung tanpa melakukan translasi alamat memori.
  2. Pengalamatan Secara Relatif (Relative Addressing), Pengalamatan relatif terutama digunakan pada sistem yang menggunakan alokasi memori berurut , dimana keseluruhan image proses harus terletak di satu area memori yang utuh. Alamat pada kode instruksi program merupakan alamat relatif (offset) terhadap posisi awal program. Pada saat image proses dari program tersebut disalin atau dialokasikan ke memori utama, alamat awal memorinya dicatat ke suatu register alokasi. Pada saat eksekusi, pengaksesan alamat akan ditranslasikan dengan menjumlahkan alamat referensi pada instruksi dengan isi register alokasi untuk mendapatkan alamat fisik memori yang akan benar-benar diakses (pada Gambar 5.2). Umumnya proses translasi ini dilakukan menggunakan perangkat keras khusus yang disebut dengan Memory Management Unit (MMU). Misanya seperti pada Gambar 5.2 image proses suatu program dialokasikan ke alamat memori 1400. Alamat awal alokasi ini akan dicatat ke register relokasi di MMU. Jadi jika didalam program terdapat instruksi pengaksesan alamat [35] , misalnya instuksi jump [35], maka pada saat dieksekusi oleh prosesor akan diubah menjadi alamat fisik [1435], yaitu hasil penjumlahan 1400 dan 35. Alamat 35 disebut sebagai alamat relatif (offset), sedangkan alamat 1435 adalah alamat fisik , yaitu alamat referensi sesungguhnya di memori utama. Jadi instruksi jump [35] jika dieksekusikan akan melakukan loncatan eksekusi ke instruksi yang terdapat pada alamat memori utama 1435.

3. Pengalamatan Secara Logika (Logical Addressing), Pada pengalamatan secara logika, alamat yag ada pada kode program merupakan suatu alamat logika yang masi perlu diterjemahkan atau ditranslasikan ke alamat fisik memori utama pada saat eksekusi. Umumnya, translasi alamat untuk pengalamatan secara logika terjadi pada saat esekusi. Untuk lebih jelasnya mengenai hal ini, silahkan baca bagian address binding. Kelebihan pengalamatan ini adalah relokasi program dapat dilakukan secara fleksibel, bahkan ruang atau kapasitas alamat logika program dapat lebih besar dari kapasitas fisik memori utama. Misalnya program dapat menggunakan ruang alamant logika sebesar 2 Giga, sedangkan memori utama fisik di mana program tersebut dijalankan hanya memiliki kapasitas 256 Mega.

Selain itu , image proses dapat dialokasikan secara parsial dan terbesar pada memori utama. Cara alokasi memori dapat dilakukan secara paging, segmentasi, ataupun campuran keduanya yang secara lebih rinci akan dijelaskan pada bagian selanjutnya.

Prinsip kerjanya , ruang alamat pada kode program menggunakan suatu peta alamat logika tersendiri seperti pada gambar 5.3. Misalnya setiap program dianggap memiliki ruang alamat maya sebesar 4 Giga, sekalipun tidak semua alamat terpakai. Sebagai contoh ruang alamat logika P2 dan P4 tidak terpakai. Contoh pada gambar menggunakan sistem paging di mana ruang alamat logika dibagi menjadi potongan yang berukuran sama, disebut dengan page, dan diberi nomor urut, misalnya P1,P2,P3,P4. Di sisi lain ruang fisik memori utama juga dibagi menjadi potongan yang berukuran sama, disebut dengan frame, dengan potongan alamat logika, dan diberi nomor urut, misalnya F1, F2, F3, F4, dan seterusnya. Setiap potongan ruang logika program yang terisi dapat dialokasikan ke memori utama secara terpisah dan saling bebas terhadap potongan lainnya. Misalnya P1 dialokasi ke lokasi memori F2, sedangkan P3 dialokasikan ke lokasi memori F4.

Yang terpenting adalah pada saat suatu potongan ruang alamat logika program, misalnya P1, dialokasi ke memori utama, misalnya F2, maka pemetaan P1 —> F2 harus dicatat, umumnya pada suatu tabel alokasi yang disimpan di MMU. Setiap proses memiliki satu tabel alokasi di MMU.

Dan ketika kode instruksi program dieksekusi maka alamat referensi pada kode instruksi akan ditranslasikan ke alamat fisik memori utama menggunakan tabel alokasi tersebut.

Proses Alokasi Memoru dan Translasi alamat pada pengalamatan secara logika

Berdasarkan cara membagi ruang alamat logika program, pengalamatan logika dapat dibebaskan atas sistem paging dan segmentasi. Sistem paging membagi ruang alamat logika program dalam partisi statis yang berukuran sama yang tidak disebut dengan page, sedangkan sistem segmentasi membagi ruang alamat logika program dalam fragmen yang berukuran berbeda-beda dan pemartisian memori utama bersifat dinamis dengan ukuran yang bervarias yang disebut dengan segmen. Perbedaan ini memengaruhi hal-hal berikut:

  1. Bagaimana memri utama dipartisi dan dialokasi ke proses aplikasi.
  2. Informasi apa yang perlu di catat di tabel alokasi proses pada saat terjadi alokasi memori
  3. Proses translasi alamat.