Secara logika, prosesor hanya mengakses data menggunakan referensi alamat I/O serta alamat memori utama. Itu sebabnya sebelum dieksekusi, kode instruksi maupun data yang akan diproses oleh prosesor harus sudah disalin terlebih dahulu di buffer pengendali peranti I/O ataupun di memori utama.
Pertanyaan yang mendasar adalah bagaimana seorang pembuat program (programmer) mengetahui alamat memori atau I/O yang harus direferensi oleh kode instruksi programnya. Misalnya, di dalam 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 pemrogram 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 oleh prosesor. Dalam melakukan tugas- nya, kompilator mengacu 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 bagai-mana alamat dalam kode instruksi program diterjemahkan ke alamat fisik memori utama yang sesungguhnya.
Hal-hal tersebut akan dibahas pada bagian berikut, sedangkan mengenai kapan dan bagaimana alamat dalam kode instruksi program diterjemah kan ke alamat fisik memori utama yang sesungguhnya akan dijelaskan pada bagian address binding.
Secara garis besar, pengalamatan memori dapat dibedakan atas peng alamatan 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. Konsekuensinya adalah pada saat penyalinan image proses ke memori utama, maka kode instruksi dan data program harus 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 Adressing)
Pengalamatan relatif terutama digunakan pada sistem yang menggunakan alokasi memori berurut, di mana 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 ter- sebut disalin atau dialokasikan ke memori utama, alamat awal memorinya dicatat ke suatu register alokasi. Pada saat eksekusi, pengaksesan alamat akan ditranslasi dengan menjumlahkan alamat referensi pada instruksi dengan isi register alokasi untuk mendapatkan alamat fisik memori yang akan benar-benar diakses (lihat Gambar 5.2). Umumnya proses translasi ini dilakukan menggunakan perangkat keras khusus yang disebut dengan MMU (Memory Management Unit).
Misalnya seperti pada Gambar 5.2, image proses suatu program dialokasikan ke alamat memori 1400. Alamat awal alokasi ini akan dicatat ke registrer relokasi di MMU. Jadi jika di dalam program terdapat instruksi pengaksesan alamat [35], misalnya instruksi 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 yang ada pada kode program merupakan suatu alamat logika yang masih perlu diterjemahkan atau ditranslasikan ke alamat fisik memori utama pada saat eksekusi. Umumnya, translasi alamat untuk pengalamatan secara logika terjadi pada saat eksekusi. Untuk lebih jelasnya mengenai hal ini, silakan baca bagian adddress 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 alamat logika sebesar 2 Giga, sedangkan memori utama fisik di mana program tersebut dijalankan hanya memiliki kapasitas sebesar 256 Mega.
Selain itu, image proses dapat dialokasikan secara parsial dan tersebar 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 dialokasi 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 pemetaaan 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 ditranslasi ke alamat fisik memori utama mengguna- kan tabel alokasi tersebut.
Gambar 5.3 Proses alokasi memori dan translasi alamat pada pengalamatan secara logika
Berdasarkan cara membagi ruang alamat logika program, pengalamatan logika dapat dibedakan atas sistem paging dan segmentasi. Sistem paging membagi ruang alamat logika program dalam partisi statis yang berukuran sama yang 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 bervariasi yang disebut dengan segmen. Perbedaan ini memengaruhi hal- hal berikut:
- Bagaimana memori utama dipartisi dan dialokasi ke proses aplikasi.
- Informasi apa yang perlu di catat di tabel alokasi proses pada saat terjadi alokasi memori.
- Proses translasi alamat.
Secara rinci pembahasan tentang pengalamatan dengan sistem paging dan segmentasi akan dibahas pada bagian alokasi memori tak berurut.
Tidak ada komentar:
Posting Komentar