Rabu, 19 September 2012

Memahami Cara Kerja Memori Komputer



Awalnya terkesan sangat sulit untuk memahami cara kerja memori komputer. Tapi, ingat saja, komputer itu hanyalah sebuah kalkulator raksasa yang memiliki memori sebagai tempat sementara untuk menyimpan hasil perhitungan. Tempat-tempat ini diberikan indeks nomor (alamat) untuk memudahkan penggunaannya. Bayangkan saja, prosesor Intel x86 yang banyak digunakan saat ini menggunakan 32-bit skema alamat. Itu berarti ada 2^32 (4,294,967,296) kemungkinan tempat yang dapat digunakan sebagai tempat penyimpanan hasil perhitungan tersebut.


Pointer
Pointer merupakan satu tipe variabel yang khusus, digunakan untuk menyimpan alamat lain dalam memori untuk mereferensi informasi lain. Karena memori tidak dapat dipindahkan, informasi ini harus dikopi. Akan tetapi akan sangat sulit secara perhitungan untuk mengkopi satu informasi di dalam memori untuk digunakan di fungsi atau tempat lain. Begitu juga dilihat dari sudut pandang memori. Karena untuk mengkopi suatu data, maka memori akan membuat satu blok khusus untuk data tersebut, yang tidak dapat digunakan untuk menyimpan data lain.
Pointer adalah salah satu solusinya. Memori hanya perlu membuat satu variabel pointer yang diasosiasikan dengan satu blok besar yang menyimpan informasi tersebut, lalu pointer tersebut dapat dikopi ke semua fungsi atau tempat yang ingin mengakses blok informasi ini.

Register
Prosesor memiliki satu jenis memori khusus yang relatif kecil. Memori ini disebut Register, dan ada beberapa register khusus yang digunakan untuk menjejaki hal-hal ketika program dieksekusi. Salah satunya adalah EIP, (Extended Instruction Pointer). EIP merupakan pointer yang menyimpan alamat dari instruksi yang sedang dieksekusi. Register lain yang digunakan sebagai pointer adalah EBP (Extended Base Pointer) dan ESP (Extended Stack Pointer). EBP merupakan pointer yang menyimpan alamat terakhir (teratas) dari satu segmen memori yang disebut stack, sedangkan ESP merupakan pointer yang menyimpan alamat stack frame berikut yang akan dieksekusi.

Deklarasi Memori
Pada bahasa pemrograman tingkat tinggi seperti Bahasa C, variabel dideklarasikan berdasarkan tipenya (seperti: integer, character, float, dll) masing-masing. Hal ini dilakukan untuk memberitahukan memori berapa besar ruang yang harus disiapkan untuk menyimpan variabel tersebut. Misalnya, integer merupakan 4 byte data, yang berarti harus ada 32 (4 byte x 8 bit/byte) bit ruang kosong di memori yang harus dialokasikan untuk variabel ini. Contoh lainnya adalah tipe character, yang memerlukan 8 (1 byte x 8 bit/byte) bit ruang.

Sebagai tambahan, variabel juga dapat dideklarasikan dalam bentuk array (senarai). Array merupakan list (senarai) dari N buah elemen spesifik data. Jadi, sebuah 10 character array hanya merupakan 10 variabel character yang disusun berurutan dalam memori. Array juga disebut sebagai buffer, dan character array juga disebut string. Mengkopi buffer yang berukuran besar memerlukan waktu dan perhitungan yang lama. Karena itu, pointer sering digunakan untuk menyimpan alamat memori yang menjadi awal buffer. Berikut adalah contoh pendeklarasian variabel dalam bahasa pemrograman C:
int variabel_integer;
char variabel_character;
char character_array[10];
char *buffer_pointer;

Little Endian
Salah satu yang perlu diingat dalam memori di prosesor x86 adalah urutan penyimpanan 4 byte data (seperti integer dan pointer) di dalam memori. Urutan ini disebut Little Endian, yang berarti data byte yang paling kecil disimpan terlebih dahulu.
Misal, sebuah 4 byte data (digambarkan dengan data hexadecimal atau 16 bit), 0×12345678. Data “12″, “34″, “56″, dan “78″ masing-masing merupakan 1 byte data (pada penulisan 16 bit data, 1 digit angka digambarkan dengan 4 bit). Pada saat disimpan dalam bentuk Little Endian akan berbentuk seperti berikut: 0×78563412.
Jadi pada prinsipnya memori itu hanya sebagai tempat penyimpanan sementara. Memori bekerja dengan menyediakan tempat-tempat yang berupa indeks nomor (alamat) untuk memudahkan penggunaanya.

Tidak ada komentar:

Poskan Komentar