12 poin oleh GN⁺ 2025-06-29 | 4 komentar | Bagikan ke WhatsApp
  • Berbagi pengalaman mencoba mem-porting sistem operasi Xv6 menggunakan CPU berbasis RISC ISA yang dirancang sendiri dan kompiler C buatan sendiri dalam proyek saat kuliah
  • Proyek dijalankan dengan membuat sendiri semua elemennya, termasuk desain CPU, pengembangan kompiler C (Ucc), dan porting Xv6
  • Tim menantang diri untuk merancang fitur perangkat keras dan perangkat lunak inti seperti interupsi, memori virtual, dan cache agar OS dapat berjalan
  • Dalam proses porting Xv6, mereka menghadapi berbagai hambatan seperti masalah portabilitas, sulitnya debugging, dan bug cache, tetapi berhasil menyelesaikannya sendiri
  • Mereka akhirnya berhasil menjalankan aplikasi interaktif seperti SL, Minesweeper, 2048 serta program ray tracing, yang menjadi pencapaian besar secara edukatif maupun teknis

Gambaran proyek

  • Proyek ini merupakan salah satu tugas eksperimen representatif di Department of Information Science, Tokyo University, yang berfokus pada memberi mahasiswa pengalaman dalam perancangan CPU dan perangkat keras, pembuatan kompiler, serta menjalankan aplikasi
  • Tujuan proyek adalah mengimplementasikan langsung ISA CPU rancangan sendiri ke FPGA, membuat toolchain C (Ucc) untuknya, lalu memperluasnya ke porting sistem operasi seperti Xv6
  • Sebagian besar proses eksperimen dilakukan melalui pembelajaran mandiri

Eksperimen CPU dan tugas

  • Tim beranggotakan 4–5 orang masing-masing berpartisipasi dalam merancang arsitektur CPU baru, mengimplementasikannya di FPGA, serta mengembangkan kompiler untuk arsitektur tersebut
  • Setelah membuat kompiler subset OCaml, menjalankan program ray tracing menjadi komponen penilaian wajib
  • Jika ada waktu tambahan, mahasiswa dapat menetapkan tantangan unik sendiri; beberapa di antaranya melakukan eksperimen lanjutan seperti mempercepat CPU, mengembangkan multicore, atau menjalankan musik/game
  • Tim Group 6 secara khusus menargetkan porting sistem operasi, dan dari sinilah tim gabungan baru (Group X) dibentuk

Xv6 OS dan tantangan porting

  • Mereka memilih Xv6 sebagai target porting, OS berbasis Unix v6 untuk x86 yang dikembangkan MIT untuk tujuan pendidikan
  • Xv6 adalah OS berbasis Unix yang sederhana, tetapi untuk berjalan di perangkat keras nyata terdapat berbagai kendala seperti kebutuhan kompiler C89, interupsi khusus, dukungan alamat virtual, dan kurangnya portabilitas
  • Xv6 dibuat dengan asumsi karakteristik x86 seperti char 1 byte dan int 4 byte dalam bahasa C, sehingga banyak masalah muncul saat dipindahkan

Pengembangan kompiler dan toolchain (Ucc)

  • Dalam eksperimen sebelumnya, pengembangan kompiler OCaml adalah standar, tetapi untuk menjalankan Xv6 dibutuhkan kompiler C89, sehingga mereka memutuskan untuk membuatnya sendiri
  • Berdasarkan prototipe kompiler C milik salah satu anggota tim, mereka membangun toolchain baru sendiri (Ucc)
  • Selain kompiler, mereka juga merancang sendiri Primitive Linker serta alat debugging

Desain CPU dan simulator

  • Setelah merancang rangkaian CPU dengan hardware description language (HDL, misalnya Verilog / VHDL), mereka mengimplementasikannya ke FPGA fisik melalui proses sintesis logika seperti Vivado/Quartus
  • Proses sintesis logika yang berulang memakan waktu sangat lama, sehingga dalam praktiknya banyak waktu habis untuk menunggu
  • Setelah fungsi dasar CPU selesai, dukungan perangkat keras yang dibutuhkan OS seperti interupsi, MMU, dan TLB juga dirancang secara terpisah
  • CPU tersebut selesai dibuat dengan nama GAIA
  • Pada simulator juga ditambahkan interupsi nyata, translasi alamat virtual, dan alat debugging

Masalah dalam proses porting dan solusinya

  • Karena kurangnya portabilitas pada Xv6, perilaku tidak normal muncul tergantung spesifikasi CPU dan kompiler
    • Contoh: saat char dan int didefinisikan sebagai 32-bit, operasi pointer dan struktur stack menjadi rusak
    • Di kompiler Ucc, mereka memperbaikinya agar char sesuai menjadi 8-bit
  • Penanganan interupsi merupakan area yang sangat sulit, sehingga mereka menambahkan alat debugging seperti disassembler dan dump status ke simulator buatan sendiri
  • Masalah cache alias terjadi karena GAIA menggunakan alamat virtual sebagai indeks cache, dan diselesaikan dengan menerapkan teknik Page Coloring

Hasil akhir: menjalankan OS dan aplikasi

  • Pada 1 Maret, mereka akhirnya berhasil menjalankan Xv6 sepenuhnya baik di simulator maupun CPU fisik (perangkat keras)
  • Mereka berhasil menjalankan aplikasi interaktif seperti mini curses buatan sendiri, perintah SL, Minesweeper, dan 2048
    • Khusus 2048, ditambahkan desain dukungan input non-canonical
    • Dengan memodifikasi Xv6, mereka juga menambahkan fungsi yang setara dengan ioctl dan termios bergaya POSIX
    • Assembler kecil, mini vi, dan lain-lain juga diimplementasikan, sehingga terwujud lingkungan pemrograman real-time yang nyata
  • Program ray tracing juga dijalankan di atas sistem operasi, melampaui tujuan awal eksperimen

Makna proyek dan contoh lanjutan

  • Setelah eksperimen ini, beberapa generasi mahasiswa berikutnya terus membuat CPU dan OS sendiri untuk melakukan berbagai eksperimen
    • Misalnya berkembang ke adopsi ISA RISC-V, OS buatan sendiri, hingga menjalankan Linux
  • Melalui praktik langsung di seluruh stack perangkat keras/perangkat lunak, mereka memperoleh pemahaman nyata tentang algoritme, integrasi perangkat keras-perangkat lunak, dan struktur tingkat rendah
  • Ada kritik bahwa “menciptakan ulang roda” itu tidak efisien, tetapi efek belajar dan kesenangan dari benar-benar membuatnya sendiri sangat besar

Pengalaman langsung dan kode sumber

Kesimpulan

  • Dengan pelajaran bahwa “tidak ada yang lebih mengajarkan daripada membuatnya sendiri”, artikel ini menekankan pentingnya pengalaman integrasi perangkat keras-perangkat lunak
  • Mahasiswa generasi berikutnya juga terus menantang target baru, dengan harapan suatu hari Linux atau VM bisa berjalan di atas ISA buatan sendiri
  • Cerita ditutup dengan menyebut nama para anggota yang berpartisipasi dalam proyek

4 komentar

 
regentag 2025-07-01

Saya iri bisa mendapatkan pengalaman seperti itu di kampus. Sepertinya akan sangat menyenangkan..

 
qlghwp123 2025-06-30

Pasti sangat seru.

 
iolothebard 2025-06-30

Coba gulir lebih ke bawah sedikit lagi…

Membuat CPU 8-bit…?
https://eater.net/8bit

 
GN⁺ 2025-06-29
Komentar Hacker News
  • Ini mengingatkanku pada proyek kelompok yang dulu kami kerjakan bertiga selama 3 minggu saat kuliah. Dari beberapa topik, ada juga opsi membuat sistem operasi yang sangat dasar sendiri, lalu kami bertanya kepada para profesor apakah boleh mem-porting MINIX3 ke Raspberry Pi, dan mereka mengizinkannya (karena MINIX3 sudah punya port ARM untuk BeagleBoard, jadi kelihatannya mungkin dilakukan).<br>Tingkat kesulitannya jauh lebih tinggi dari perkiraan, dan masalah teknis yang sama sekali tak terbayangkan terus bermunculan. Yang paling merepotkan, Raspberry Pi 3 melakukan boot ke mode hypervisor alih-alih mode supervisor, dan akurasi emulasi Raspberry Pi di QEMU sangat buruk sehingga hampir tidak berguna untuk pengembangan OS. Kami sampai menghabiskan seminggu penuh untuk debugging hardware level rendah demi mencari solusi. <br>Pada akhirnya kami berhasil membuat port yang berfungsi lengkap dengan driver UART, GPIO, dan framebuffer, lalu sukses menjalankannya di Raspberry Pi 2 dan 3. Presentasi dilakukan di hardware sungguhan, menampilkan image ramdisk lewat shell script, memantau pin GPIO untuk memajukan atau memundurkan slide, dan mengoperasikannya langsung dengan men-short pin memakai pisau. Dari sisi originality, itu presentasi yang luar biasa keren, dan sepertinya aku masih menyimpan image SD card-nya sampai sekarang

    • Kedengarannya seperti pengalaman yang keren<br>Saat kalian mengusulkan untuk mem-porting MINIX3 ke Raspberry Pi, mungkin para profesor sudah menduga itu akan gagal<br>Ketika akurasi emulasi Raspberry Pi di QEMU buruk, aku memakai strategi membuat OS-nya berjalan dulu di QEMU lalu menyerahkan sisanya pada keberuntungan saat dijalankan di hardware. Tetap lumayan berhasil<br>Aku penasaran bagaimana kalian melakukan debugging di Raspberry Pi yang sebenarnya

    • Mendengar kamu memakai pisau untuk men-short GPIO mengingatkanku pada pengalaman men-short dua pin daya di motherboard ATX untuk menyalakannya tanpa tombol power<br>Tapi setup-mu jauh lebih keren. Kerja bagus

  • Di SFU, aku pernah melakukan sesuatu yang mirip 25~30 tahun lalu. Waktu itu aku tidak sampai menjalankan OS dan compiler di atasnya, dan itu juga bukan proyek tim<br>Kalau tertarik dengan eksperimen seperti ini, aku merekomendasikan Turing Complete, yang punya panduan dan tooling yang mudah diakses. Kamu bisa membangun dari beberapa gate sampai menjadi komputer sungguhan. Komunitas dan komponennya juga bisa dibagikan, dan ada core RiscV juga. Serius menyenangkan, jadi layak dicoba di Steam<br>Turing Complete Steam tautan

    • Ini mengingatkanku pada nand2tetris yang dulu sangat seru dimainkan, seperti versi game-nya. Ini juga rekomendasi yang patut dicoba
  • Tulisan ini entah kenapa mengingatkanku pada proyek akademis(?) yang mirip. Setidaknya aku ingat ada custom C compiler dan custom OS. Nama tepatnya sudah tidak kuingat

  • Sebagai referensi, ini topik terkait yang pernah muncul sebelumnya tautan tulisan sebelumnya

  • Saat membuat CPU + compiler + OS sendiri, sama sekali tidak ada platform yang mendasarinya. Akulah platform itu sendiri.<br>Bug adalah hukum sistemnya. Biasanya kita melakukan debugging di atas lapisan abstraksi yang dibuat orang lain, tetapi di sini bahkan aturan-aturannya pun kita definisikan sendiri. OP pada dasarnya men-debug aturan buatannya sendiri

  • Benar-benar mengesankan. Pekerjaan di ranah low-end biasanya membosankan dan menyita banyak waktu, apalagi kalau tidak ada alat penting seperti debugger

    • Kalau belum pernah men-debug kprintf yang aneh dengan osiloskop, berarti belum benar-benar merasakan dunia low-level
  • Magic-1 dan BMOW juga pernah melakukan hal serupa dulu<br>Untuk detail lebih lanjut, lihat homebrewcpu.com<br>Untuk daftar situs orang-orang yang membuat CPU sendiri, lihat homebrewcpuring.org

  • Sekarang saatnya berhenti mengimplementasikannya di FPGA dan lari ke lab semikonduktor untuk meminta mereka membuatkan CPU secara langsung