Sistem Komputer: Perspektif Programmer (Edisi Global)
Kajian mendalam tentang bagaimana sistem komputer mengeksekusi program dan menyimpan informasi. Kursus ini menghubungkan pemrograman tingkat tinggi dengan perangkat keras di bawahnya, mencakup representasi tingkat mesin, arsitektur prosesor, hierarki memori, dan pemrograman konkuren.
Gambaran Umum Kursus
📚 Ringkasan Konten
Garis besar mendalam tentang bagaimana sistem komputer mengeksekusi program dan menyimpan informasi. Kursus ini menghubungkan pemrograman tingkat tinggi dengan perangkat keras di bawahnya, mencakup representasi tingkat mesin, arsitektur prosesor, hierarki memori, dan pemrograman konkuren.
Kuasai seni pemrograman sistem dengan memahami antarmuka perangkat keras-perangkat lunak.
Pengarang: Randal E. Bryant, David R. O'Hallaron
Ucapan Terima Kasih: Didukung oleh mahasiswa dan instruktur dari kursus 15-213 di Universitas Carnegie Mellon. Ucapan terima kasih mencakup kontribusi dari Manasa S. dan Mohit Tahiliani.
🎯 Tujuan Pembelajaran
- Mengidentifikasi bagaimana informasi direpresentasikan menggunakan bit dan konteks dalam suatu sistem.
- Melacak empat tahap sistem kompilasi dari kode sumber hingga eksekusi.
- Mendeskripsikan struktur organisasi perangkat keras dan sifat hierarkis perangkat penyimpanan.
- Mengkonversi antara notasi desimal, biner, dan heksadesimal serta menjelaskan pengalamatan tingkat mesin (Endianness).
- Melakukan operasi tingkat bit dan logika dalam C serta memprediksi hasil geser aritmetika.
- Menganalisis enkoding bilangan bulat untuk mengidentifikasi kerentanan overflow dan kesalahan casting.
- Analisis pemetaan antara konstruksi C (loop, percabangan, prosedur) dan instruksi assembly x86-64.
- Dekonstruksi tumpukan runtime untuk menjelaskan bagaimana parameter dilewatkan, variabel lokal disimpan, dan pemanggilan rekursif dikelola.
- Evaluasi tata letak memori untuk struktur data heterogen dan menerapkan aturan penyesuaian untuk menghitung kebutuhan penyimpanan total.
- Menjelaskan Keadaan yang Dapat Dilihat Pemrogram Y86-64 dan mengkodekan/dekodekan instruksi menjadi urutan byte.
🔹 Pelajaran 1: Tour Sistem Komputer
Ringkasan: Pelajaran ini memberikan gambaran komprehensif tentang bagaimana sistem komputer merepresentasikan informasi, menerjemahkan program, dan mengeksekusi instruksi melalui interaksi kompleks antara perangkat keras dan perangkat lunak. Pelajaran ini mengeksplorasi perjalanan program dari kode sumber hingga eksekusi, peran kritis hierarki memori dalam mengatasi celah antara prosesor dan memori, abstraksi yang disediakan oleh sistem operasi, serta hukum matematis yang mengatur kinerja sistem dan paralelisme.
Hasil Pembelajaran:
- Mengidentifikasi bagaimana informasi direpresentasikan menggunakan bit dan konteks dalam suatu sistem.
- Melacak empat tahap sistem kompilasi dari kode sumber hingga eksekusi.
- Mendeskripsikan struktur organisasi perangkat keras dan sifat hierarkis perangkat penyimpanan.
🔹 Pelajaran 2: Representasi dan Manipulasi Informasi
Ringkasan: Pelajaran ini mengeksplorasi bagaimana komputer digital merepresentasikan dan memanipulasi informasi pada tingkat bit. Pelajaran ini membahas transisi dari notasi heksadesimal dan ukuran kata tingkat mesin hingga enkoding kompleks bilangan bulat (Unsigned dan Two's-Complement) serta angka pecahan (IEEE 754). Mahasiswa akan menganalisis sifat matematis aritmetika komputer, termasuk implikasi keamanan dari overflow dan nuansa pembulatan dalam sistem berpresisi terbatas.
Hasil Pembelajaran:
- Mengkonversi antara notasi desimal, biner, dan heksadesimal serta menjelaskan pengalamatan tingkat mesin (Endianness).
- Melakukan operasi tingkat bit dan logika dalam C serta memprediksi hasil geser aritmetika.
- Menganalisis enkoding bilangan bulat untuk mengidentifikasi kerentanan overflow dan kesalahan casting.
🔹 Pelajaran 3: Representasi Tingkat Mesin Program
Ringkasan: Pelajaran ini memberikan pemahaman mendalam tentang bagaimana program C tingkat tinggi diubah menjadi kode mesin x86-64. Pelajaran ini mencakup arsitektur dasar prosesor, termasuk register dan tumpukan, implementasi alur kontrol (pernyataan bersyarat, loop, dan switch), mekanisme pemanggilan prosedur dan rekursi, serta representasi tingkat mesin struktur data kompleks seperti array, struct, dan union. Akhirnya, pelajaran ini membahas keamanan sistem melalui analisis overflow buffer dan instruksi khusus yang digunakan untuk aritmetika floating-point.
Hasil Pembelajaran:
- Analisis pemetaan antara konstruksi C (loop, percabangan, prosedur) dan instruksi assembly x86-64.
- Deconstruct tumpukan runtime untuk menjelaskan bagaimana parameter dilewatkan, variabel lokal disimpan, dan pemanggilan rekursif dikelola.
- Evaluasi tata letak memori untuk struktur data heterogen dan menerapkan aturan penyesuaian untuk menghitung kebutuhan penyimpanan total.
🔹 Pelajaran 4: Arsitektur Prosesor
Ringkasan: Pelajaran ini mengeksplorasi arsitektur dasar prosesor, dengan fokus pada transisi dari implementasi sekuen (SEQ) ke implementasi pipa berkinerja tinggi (PIPE) menggunakan Arsitektur Set Instruksi Y86-64 (ISA). Mahasiswa akan menganalisis bagaimana instruksi dikodekan, diproses melalui tahap-tahap diskret (Fetch, Decode, Execute, Memory, Write-Back), dan bagaimana bahaya perangkat keras dikelola menggunakan logika kontrol, penundaan (stalling), dan forwarding untuk memaksimalkan throughput.
Hasil Pembelajaran:
- Menjelaskan Keadaan yang Dapat Dilihat Pemrogram Y86-64 dan mengkodekan/dekodekan instruksi menjadi urutan byte.
- Menerapkan logika kontrol perangkat keras menggunakan HCL (Hardware Control Language) untuk rangkaian kombinasional dan sekuen.
- Melacak aliran instruksi melalui enam tahap prosesor sekuen dan mengidentifikasi dampak waktu clocking.
🔹 Pelajaran 5: Optimalisasi Kinerja Program
Ringkasan: Pelajaran ini mengeksplorasi pendekatan sistematis untuk meningkatkan kinerja program dengan memahami interaksi antara kode tingkat tinggi, kompiler optimalisasi, dan arsitektur mikroprosesor modern. Mahasiswa akan belajar mengidentifikasi "penghalang optimasi" seperti aliasing memori, menerapkan transformasi tingkat rendah seperti unrolling loop dan reasosiasi, serta menggunakan alat profil seperti GPROF untuk menargetkan bottleneck kinerja secara efektif.
Hasil Pembelajaran:
- Mengidentifikasi dan mengurangi penghalang optimasi termasuk aliasing memori dan overhead panggilan prosedur.
- Mengkuantifikasi kinerja program menggunakan metrik Cycles Per Element (CPE).
- Menerapkan transformasi unrolling loop, akumulator ganda, dan reasosiasi untuk memanfaatkan paralelisme tingkat instruksi.
🔹 Pelajaran 6: Hierarki Memori
Ringkasan: Pelajaran ini mengeksplorasi desain struktural dan fungsional hierarki memori, dengan fokus pada pertukaran antara kecepatan, biaya, dan kapasitas penyimpanan. Pelajaran ini menjelaskan teknologi yang mendorong sistem modern—dari SRAM dan DRAM hingga Disk dan SSD—dan menjelaskan bagaimana Prinsip Lokalitas (Temporal dan Spasial) memungkinkan memori cache kecil namun cepat untuk secara signifikan meningkatkan kinerja program. Mahasiswa akan belajar menganalisis pemetaan cache (Direct-Mapped, Set Associative, Fully Associative) dan menerapkan teknik optimasi seperti pengurutan ulang loop dan blocking untuk menulis kode yang ramah cache.
Hasil Pembelajaran:
- Membedakan antara teknologi memori SRAM, DRAM, ROM, dan Flash serta peran mereka dalam hierarki.
- Menghitung kapasitas penyimpanan disk dan waktu akses total berdasarkan geometri dan komponen operasional.
- Menganalisis alamat memori untuk menentukan indeks set cache, tag, dan offset blok di berbagai strategi pemetaan.
🔹 Pelajaran 7: Linking
Ringkasan: Pelajaran ini mengeksplorasi proses penting tingkat sistem yaitu linking, yang menggabungkan kode dan data menjadi satu file tunggal yang dapat dimuat ke memori dan dieksekusi. Mahasiswa akan beralih dari kode sumber ke biner eksekusi, memahami bagaimana linkers menyelesaikan referensi simbol, menggabungkan bagian melalui relocasi, dan mengelola perpustakaan statis maupun dinamis. Pelajaran berakhir dengan teknik lanjutan seperti interposisi perpustakaan dan kode yang tidak bergantung posisi (PIC) yang digunakan dalam perpustakaan bersama modern.
Hasil Pembelajaran:
- Melacak transformasi file kode sumber melalui driver kompiler hingga eksekusi akhir.
- Menganalisis file objek ELF untuk mengidentifikasi jenis simbol dan organisasi bagian.
- Menerapkan aturan resolusi simbol untuk mengelola nama duplikat dan ketergantungan saat linking.
🔹 Pelajaran 8: Alur Kontrol Luar Biasa
Ringkasan: Pelajaran ini mengeksplorasi Alur Kontrol Luar Biasa (ECF), mekanisme di mana sistem komputer merespons perubahan status sistem. Kita mengeksplorasi bagaimana ECF diimplementasikan di semua tingkatan sistem, mulai dari Exception yang dipicu perangkat keras hingga Context Switching dan Control Proses tingkat sistem operasi (fork, wait, execve), hingga Signal dan Jump Nonlokal tingkat perangkat lunak. Mahasiswa akan belajar mengelola konkurensi, menangani kesalahan sistem, dan menulis kode yang tangguh dan aman terhadap sinyal.
Hasil Pembelajaran:
- Membedakan antara empat kelas exception tingkat perangkat keras (Interrupts, Traps, Faults, Aborts) dan mekanisme penanganannya.
- Mengelola siklus hidup proses menggunakan panggilan sistem untuk pembuatan (
fork), penerimaan (waitpid), dan eksekusi (execve). - Menerapkan handler sinyal yang aman yang mempertimbangkan konkurensi, sinyal non-antrian, dan keamanan asinkron.
🔹 Pelajaran 9: Memori Virtual
Ringkasan: Pelajaran ini mengeksplorasi Memori Virtual (VM) sebagai abstraksi dasar yang memberikan setiap proses ruang alamat yang besar, kontinu, dan privat. Kami membahas tiga peran utamanya: alat untuk caching efisien di DRAM, mekanisme manajemen dan perlindungan memori, serta dasar bagi pemetaan memori. Selain itu, pelajaran ini membahas mekanisme translasi alamat (TLB), alokasi memori dinamis (manajemen heap), dan prinsip pengumpulan sampah otomatis, diakhiri dengan kesalahan penting terkait memori dalam pemrograman C.
Hasil Pembelajaran:
- Membedakan antara pengalamatan fisik dan virtual serta menjelaskan peran Unit Manajemen Memori (MMU).
- Melakukan translasi alamat virtual ke fisik menggunakan Tabel Halaman dan Buffer Translasi Alamat (TLB).
- Menganalisis dan menerapkan strategi alokasi memori dinamis, termasuk daftar implisit/eksplisit dan penggabungan (coalescing).
🔹 Pelajaran 10: I/O Tingkat Sistem
Ringkasan: Pelajaran ini mengeksplorasi antarmuka dasar antara sistem operasi Linux dan program aplikasi untuk melakukan input dan output. Pelajaran ini mencakup panggilan sistem I/O Unix dasar, berbagai jenis file yang ditemui dalam filesystem Linux, serta struktur data tingkat kernel yang digunakan untuk mengelolanya. Selain itu, pelajaran ini memperkenalkan paket I/O Robust (RIO) untuk menangani "short counts" dan memberikan panduan memilih antara I/O Standar dan I/O Tingkat Sistem dalam konteks pemrograman yang berbeda, seperti pemrograman jaringan.
Hasil Pembelajaran:
- Implementasi operasi file dasar menggunakan antarmuka I/O Unix (
open,close,read,write). - Bedakan antara file biasa, direktori, dan tautan sambil meminta metadata file menggunakan
stat. - Gunakan paket RIO untuk melakukan operasi I/O yang robust, berbuffer, dan tidak berbuffer.
🔹 Pelajaran 11: Pemrograman Jaringan
Ringkasan: Pelajaran ini mengeksplorasi arsitektur dasar aplikasi berbasis jaringan, berpusat pada model pemrograman Client-Server dan Internet IP Global. Mahasiswa akan belajar menavigasi antarmuka Sockets—API utama untuk komunikasi jaringan tingkat sistem—and bergerak menuju implementasi server web fungsional (TINY) yang mampu mengirimkan file statis dan konten dinamis melalui Interface Gateway Umum (CGI).
Hasil Pembelajaran:
- Memahami siklus permintaan-respons model client-server dan hierarki perangkat keras/perangkat lunak Internet IP Global.
- Memanipulasi dan mengonversi alamat IP, nama domain, dan struktur socket menggunakan fungsi yang tidak bergantung protokol seperti
getaddrinfo. - Menerapkan server web iteratif yang tangguh dan program CGI yang menggunakan kontrol proses dan redirect I/O untuk menyajikan konten dinamis.
🔹 Pelajaran 12: Pemrograman Konkuren
Ringkasan: Pelajaran ini mengeksplorasi model dasar konkurensi: proses, multiplexing I/O, dan thread. Pelajaran ini memberikan pemahaman mendalam tentang sinkronisasi menggunakan semaphore untuk menyelesaikan kondisi ras, pola arsitektur umum seperti produsen-konsumen dan server prethreaded, serta metrik yang digunakan untuk mengevaluasi kinerja paralel. Akhirnya, pelajaran ini membahas isu keandalan kritis seperti keamanan thread, reentransi, dan pencegahan deadlock.
Hasil Pembelajaran:
- Membedakan antara model konkurensi berbasis proses, multiplexing I/O, dan berbasis thread.
- Menerapkan operasi semaphore (P dan V) untuk memastikan eksklusi saling, serta menyelesaikan pola sinkronisasi.
- Menghitung metrik kinerja paralel seperti speedup dan efisiensi di bawah berbagai hukum skala.