Cicak Bin Kadal
Top 10 List of Week 04
Steven --- North Jakarta

Top 10 List of Week 04

  1. Virtual Memory by David Black-Schaffer
    Sebuah playlist video yang menjelaskan konsep virtual memory secara singkat dan jelas. Untuk virtual memory sendiri coba anda ingat kembali POK dimana kita menggunakan perintah lw atau sw pada MIPS. Kita bisa mengakses / menulis ke address manapun di memory (RAM) yang kita miliki, jadi apabila kita ada 8GB RAM maka 8GB kita bisa gunakan di MIPS juga. Namun kan komputer kita tidak hanya menjalankan MIPS, ada OS, program background lainnya dll. Pastinya akan bermasalah kalau misal ada tabrakan address, memory tidak cukup dan lainnya. Bagaimana cara menyelesaikan masalah tersebut? Yaitu dengan Virtual Memory dimana ada semacam penengah antara program dan memory physical dimana program harus memetakan address yang digunakan program lalu akan dilakukan “indirection” oleh Pages Table untuk diarahkan ke tempat lain di memory physical agar tidak tabrakan atau disk apabila memang sudah tidak cukup lagi.

  2. Big Endian vs Little Endian and their advantages
    Untuk definisi little/big endian sendiri saya rasa anda sudah familiar di mata kuliah POK sebelumnya. Intinya big endian menyimpan data dalam satuan byte dimana MSB berada di posisi depan, little endian LSB di posisi kiri. Yang saya ingin sampaikan adalah tentang kelebihan masing-masing sistem. Kita sudah menggunakan dan mengetahuinya namun mengapa kita harus menggunakan little endian padahal big endian itu lebih natural seperti cara kita menulis angka? Little endian memiliki kelebihan dalam efisiensi, bayangkan kita ingin menulis nilai 0xF0F1 di alokasi memory 32-bit, kita harus menulisnya dibelakang-belakang seakan 00 00 F0 F1 sedangkan untuk little endian cukup didepan tanpa harus kebelakang F1 F0 00 00 dan juga kita lebih cepat mengetahui ukuran data karena padding 00 00 pasti terletak dibagian belakang. Namun dengan keuntungan tersebut, Big Endian sendirinya juga ada keuntungannya dimana pengecekan negatif atau positif lebih cepat karena posisinya ada di depan, dan juga urutannya yang sesuai angka kita tulis sehari-hari membuatnya lebih cepat dalam pemrosesan biner ke desimal.

  3. How to manage memory with malloc, calloc, realloc, and free in C
    Sebelum masuk ke bagian dengan program C, kita harus tahu apa itu dynamic memory allocation. Yaitu situasi dimana kita ingin melakukan alokasi memori pada waktu tertentu dan di bagian program tertentu, karena waktu dan situasi dimana kita perlu alokasi itu berubah-ubah oleh karena itu disebut Dynamic Masuk ke bagian programming dengan C, ada 3 function utama untuk melakukan alokasi memori yaitu malloc(), calloc(), realloc(). malloc() menerima parameter berubah berapa byte yang ingin dialokasikan lalu mengembalikan pointer ke base address namun data yang berada di address tsb BELUM dibersihkan!! Untuk calloc() mirip dengan malloc() namun menerima 2 parameter yaitu jumlah byte, dan ukuran data seperti sizeof(int) perlu diingat bahwa calloc() membersihkan data dengan menuliskan data 0 ke setiap bit!. Terakhir realloc() yang menerima 3 parameter yaitu pointer lama, dan size barunya, OS bisa saja memindahkan pointer ke address baru. Tambahan lagi yaitu function free() untuk mengembalikan pointer balik ke OS (jadi bisa dialokasikan utk yang lainnya)

  4. What is Cheat Engine? What does it do? How does it work?
    Pernahkah anda mendengar istilah Cheat Engine? Saya secara personal dulu saat masih muda dan bermain game yang sifatnya single player terkadang iseng dan akhirnya menggunakan cheat engine. Setelah saya sekarang sudah belajar lebih dalam tentang komputer ternyata cara kerja cheat engine sangatlah sederhana! Yang dilakukan adalah program akan melakukan scanning ke memori untuk nilai-nilai tertentu, lalu kita bisa mengganti isinya dan di bagian mengganti isi itulah yang menjadi “Cheat” yang dimaksud. Cheat Engine sifatnya open source, dan anda bisa lihat kodenya disini Penutup juga, tahukah anda walaupun namanya “Cheat Engine” namun program ini juga bisa digunakan untuk debugging program anda secara low level?

  5. Stack vs Heap and their terms in memory allocation
    Belakangan ini saya menjadi sering mendengar istilah Heap saat GSGS untuk materi minggu ini, untuk Stack saya sudah mengerti di istilah untuk memory karena sudah diajarkan di POK. Namun bagaimana maksudnya untuk Heap? Ternyata heap allocation itu digunakan untuk menyimpan global variable NAMUN berbeda dengan struktur data heap!! (jadi bukan sebuah tree). Hanya dinamakan heap karena kita diberikan semacam “tumpukan” memory space yang bisa digunakan oleh programmer untuk menyimpan data, sedangkan stack lebih cocok untuk local variable karena sifatnya yang lebih mudah untuk “dihancurkan” atau stack pop ketika sudah tidak digunakan.

  6. Important questions about pointers in C
    Saya saran anda nonton video tersebut sebelum membaca entry ini untuk menguji pemahaman anda tentang pointer di C. Sudah ditonton? maka saya bahas saja konsep apa saja yang penting dari video tersebut, pertama adalah perbedaan deklarasi variable untuk menyimpan pointer dan juga assignmentnya, kita tidak bisa menggunakan *ptr = ... untuk assigning pointer ke ptr! harus ptr = .... Kedua ada modifier const dimana value tidak bisa diubah-ubah lagi. Terakhir adalah kita bisa lakukan “stacking” pada modifier pointer! yang berarti *p itu juga sama artinya dengan *&*&*p!

  7. Swapping in Operating System
    Kita sudah mempelajari manajemen memory ke dalam disk apabila sudah kepenuhan oleh virtual memory. Sekarang muncullah istilah swapping, pertama bayangkan apabila anda memiliki memory yang hanya bisa menampung 5 proses, lalu terdapat 3 proses yang sedang “macet” atau menunggu proses lain, lalu 2 lagi sedang berjalan lalu kita ada satu lagi proses baru yang sifatnya cepat, sedangkan 3 proses yang terhambat tadi masih menunggu. Jadinya bagaimana baiknya? tentunya OS akan memindahkan proses-proses yang terhambat itu (tidak perlu 3-3nya, hanya sebanyak yang dibutuhkan) ke disk, lalu tempat yang sudah dibuka oleh OS itu bisa digunakan oleh 1 proses baru itu.

  8. File Allocation Methods
    Kita sudah belajar tentang perintah-perintah C untuk melakukan alokasi memory, namun bagaimana cara OS melakukannya? Ternyata ada beberapa strategi seperti FAT atau File Allocation Table yang saya rasa anda semua sering melihatnya saat melihat properties sebuah disk. Namun dari banyaknya strategi, hanya ada 3 yang paling sering digunakan yaitu Contiguous Allocation, dimana apabila kita start di index 0x0001 dengan panjang data 8 maka akan stop di 0x0009. Lalu ada Linked List allocation yang saya rasa sudah jelas dari anda belajar mata kuliah Struktur Data & Algoritma. Terakhir yaitu Indexing Allocation yang menyelesaikan masalah di Contiguous dan LL indexing namun dengan overhead pada pointer yang lebih besar.

  9. What is difference between Dynamic and Static library(Static and Dynamic linking)
    Sebelum masuk ke topik linking, anda sebaiknya mengingat konsep “import” library dalam programming dan juga compile code dan assemble code. Inti dari linking ini adalah strategi bagaimana cara kita melakukan include kode dari library. Static Linking berarti kita langsung menginclude kode-kode yang ada dari library masuk ke dalam hasil assembly kode kita, namun akan ada overhead di ukuran file yang sangat besar, dan bayangkan apabila kita menggunakan 200 function dari library dan apabila 1 kode saja berubah di library maka kita harus melakukan recompile lagi! Bandingkan dengan dynamic linking dimana kita hanya menyimpan address dari function sehingga mengurangi filesize dan tidak ada perlu recompile. Namun juga ada kekurangan yaitu apabila sifatnya runtime dynamic linking maka program bisa error apabila ternyata file berisi library tidak ada. Saya saran baca lebih lengkap tentang dynamic linking disini

  10. Disk Defragmentation / Why is contiguous memory faster?
    Topik yang cukup menarik karena saya pernah diajari konsep Disk Defragmentation di mata kuliah lain yang secara pendek adalah “menggabungkan” kembali data-data yang terpecah-pecah menjadi 1 kesatuan yang contiguous. Cara membayangkannya saya saran anda nonton videonya terlebih dahulu, intinya adalah anggap ada data AABBCCC lalu data B dihapus menjadi AA–CCC, lalu datang data baru D yang berukuran 3 byte, agar tidak membuang tempat maka D akan dipecah menjadi tidak contiguous AADDCCCD, pembacaan data di disk yang tidak contiguous itu lebih lambat karena waktu untuk penggabungan data, pencarian dan translasi address selanjutnya dll. Apabila jalankan disk defragmentation maka data yang dulunya AADDCCCD akan menjadi AACCCDDD sehingga semua data itu contiguous. Untuk lengkapnya mengapa sistem memory contiguous itu leibh cepat bisa dilihat disini


© 2021-2021 --- Steven --- File Revision: 0027---27-Feb-2021.