Haloo guyss jadi pada tulisan awal ini aku akan ngebahas suatu hal yang mungkin jarang banget dibahas yaitu heap dan stack tetapi perlu diingat lagi yang kita bahas ini bukan heap/stack pada struktur data ya. Pembahasan ini mungkin menurut sebagian orang itu ga terlalu penting, tetapi pada saat kita ingin mempelajari lebih dalam struktur dari operating system dan pemrograman yang lebih low level stack dan heap ga bisa kita abaikan karena peranan dari mereka ini sangat berguna banget selain untuk memori management mempelajari stack dan heap kita bakal ngerti bagaimana suatu variable, function, string dan keseluruhan data pada program kita di tempatkan pada memory

Sebelum terlalu jauh kita membahas dulu mengenai konsep memory layouting atau tata letak memory. Jadi apa sih yang dimaksud dengan memory ?? secara gampangnya memory itu merupakan suatu refrensi yang menyimpan informasi data dan intruksi yang digunakan secara langsung pada komputer yang kita pake,  Pada saat kita membuat suatu program / software data dan intruksi akan di store pada memory dan memory sendiri terbagi menjadi beberapa segment dan dalam kasus sistem yang menggunakan 64 byte per alamat pada memory ber ukuran 8 byte sedangkan pada 32 byte ukuran alamatnya adalah 4 byte

Saat kita menjalankan suatu program ada 2 area dan processing yang dilakukan dan kita menyebutnya dengan operasi user space dan kernel space

Kernel Space

Operasi input output dan lokasi tempat code dan data kernel disimpan serta dieksekusi biasanya dijalankan melalui system call pada operating unix-like dimana jika ada suatu process yang melakukan system call interupsi akan dikirimkan ke kernel yang kemudian kernel akan melakukan eksekusi dari code yang diberikan, nah dalam hal ini code akan dieksekusi bawah ring 0

User Space

Sekumpulan lokasi dan tempat process user normal berjalan dan process yang berada pada user space ini tidak memiliki akses ke kernel space dan hanya bisa melakukan sebagian kecil operasi kernel dengan bantuan syscall(system call) seperti yang dijelaskan diatas dan umumnya sendiri kita saat memakai operating system linux semua process dan operasi yang kita lakukan ada di area ini

Nah baru disini kita akan ngebahas mengenai memori layouting

Gambar diatas ini merupakan ilustrasi dari tata letak suatu memory yang digunakan pada software/program, jadi gaperlu bingung dulu karena bagian stack, heap, bss, data ,text itu semua ada penjelasannya dan area pada memory itu disebut sebagai virtual space. Kebetulan ruang pertama ada stack dimana stack sendiri itu merupakan area untuk menyimpan semua data seperti variable, argument, parameter maupun return address pada program yang nantinya akan digunakan untuk function call, dan 2 operasi utama pada stack itu dikenal dengan PUSH dan POP dimana PUSH itu dipake untuk memasukkan nilai ke dalam stack sementara POP digunakan untuk mengambil nilai pada stack yang tentunya dengan menggunakan methode LIFO(Last in first out) artinya data yang dimasukkan terakhir akan diambil/dihapus lebih dulu ya secara gampangnya seperti tumpukan piring.

Kedua ada heap nah heap sendiri itu sebenernya sama aja untuk menyimpan suatu data seperti stack tetapi heap ini saat melakukan alokasi pada memory itu bersifat dinamis yang berarti programmer bisa melakukan management memory seperti menentukan kapan memory digunakan dan dibebaskan, dan kalo dalam bahasa C heap ini dikelola oleh fungsi malloc(), realloc() dan free(), dan di area heap ini dimulai di akhir segment bss hingga menuju ke area alamat memory yang lebih tinggi

Lalu ada BSS(block started with symbol) nah bss ini merupakan suatu segment/area pada memory yang menyimpan data yang unitialized/data yang tidak di inisialisasi seperti saat kita mendeklarasikan suatu variable static int heker; atau char namasaya[]; akan dialokasikan pada bss ini

berikutnya ada DATA dan segment ini digunakan untuk menyimpan semua data yang di inisialisasi seperti variable yang sudah kita assign atau berikan suatu nilai contoh: int a = 12; atau char nama[] = “hengker pro”; nah jadi variable atau data yang initialized akan disimpan pada segment DATA ini

Terakhir ada TEXT dimana segment ini digunakan untuk menyimpan data yang bersifat read-only seperti intruksi machine code, binary code yang udah di compile maupun informasi debug biasanya ada di segment TEXT karena read-only jadi user tidak bisa melakukan modifikasi pada segment ini

Oke jadi mungkin itu saja penjelasan dasar dari struktur pada memory serta menambah pemahaman kita mengenai stack dan heap serta fungsinya dan mungkin next artikel nanti aku akan membahas secara practical-nya dan kita melihat secara langsung implementasi stack dan heap pada memory pada program yang kita buat, see you semoga bermanfaat 🙂

 

Reference:

https://web.stanford.edu/class/archive/cs/cs107/cs107.1222/lectures/07/Lecture07.pdf

https://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap

https://unix.stackexchange.com/questions/87625/what-is-difference-between-user-space-and-kernel-space

https://www.w3schools.com/c/c_strings.php

By xpl0dec

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *