1 poin oleh GN⁺ 2024-07-16 | 1 komentar | Bagikan ke WhatsApp
  • Orang membedakan antara hal yang kompleks dan hal yang sekadar rumit. Kompleksitas dianggap menarik, tetapi kerumitan dianggap merugikan. Proses penyiapan CPU x86_64 sebagian besar adalah kerumitan.
  • Menjelaskan cara menyiapkan CPU dari mode real 16-bit ke long mode 64-bit dari boot sector yang dimuat oleh BIOS. Penyiapan ini bersifat dasar, dan masih diperlukan lebih banyak pekerjaan.
  • Diperlukan Intel 64 and IA-32 Architectures Software Developer’s Manual, assembler (menggunakan nasm), dan QEMU. Anda harus memahami assembly x86 dan sintaks nasm.

Titik awal: BIOS

  • Setelah reset, CPU x86 berada dalam "real mode". Mode ini memiliki ukuran operand default 16-bit. Dengan menggunakan segmentasi, mode ini dapat mengalamati memori 1MB.
  • Kode pertama yang dijalankan setelah BIOS berada di boot sector. BIOS mencari sektor pertama pada sistem yang berakhir dengan 0xaa55, lalu memuat boot sector tersebut ke alamat memori 0x7c00.
  • BIOS menyediakan 512 byte, dan ini harus digunakan untuk melakukan bootstrap sisa bootloader.

Menyiapkan boot sector

  • Menyiapkan boot sector sederhana yang menggunakan rutin BIOS untuk mencetak pesan ke layar lalu berhenti. Ini dapat digunakan untuk memeriksa apakah alat-alatnya bekerja.
  • Boot sector disiapkan menggunakan kode assembly dan Makefile.

Langkah 1 – Memuat tahap 2 dari disk

  • Bootloader dapat dibagi menjadi dua tahap. Tahap 1 adalah kode pada boot sector, yaitu semua yang dimuat oleh BIOS. Satu-satunya tujuan tahap 1 adalah memuat tahap 2 ke memori.
  • Pada tahap 2, sistem berpindah dari mode real 16-bit ke protected mode 32-bit. Di protected mode, rutin BIOS tidak dapat digunakan. Memuat sektor dari disk menjadi jauh lebih rumit.
  • Menjelaskan cara mengakses disk menggunakan BIOS.

Protected mode 32-bit

  • CPU dipindahkan dari real mode (16-bit) ke protected mode (32-bit). Di protected mode, segmentasi digunakan untuk menerapkan perlindungan memori.
  • Sebelum berpindah ke protected mode, Global Descriptor Table (GDT) harus didefinisikan. GDT didefinisikan sebagai struktur berurutan di memori.
  • Menjelaskan cara mendefinisikan GDT dan beralih ke protected mode.

Long mode 64-bit

  • Sebelum berpindah ke long mode, CPU harus berada dalam protected mode dan paging harus diaktifkan. Protected mode sudah disiapkan, tetapi paging masih diperlukan.
  • Paging menggantikan segmentasi untuk mengelola ruang alamat virtual, izin, dan lainnya. Menjelaskan cara membuat page table untuk transisi ke long mode.
  • Menjelaskan cara mendefinisikan GDT untuk long mode, serta cara beralih dari protected mode ke long mode.

Ringkasan GN⁺

  • Artikel ini menjelaskan secara rinci proses menyiapkan CPU x86_64 dari real mode 16-bit ke long mode 64-bit. Ini dapat membantu memperdalam pemahaman tentang bootloader dan pengembangan kernel sistem operasi.
  • Mencakup berbagai konsep seperti BIOS, boot sector, protected mode, dan long mode, serta menyediakan kode assembly dan metode konfigurasi yang diperlukan untuk setiap tahap.
  • Artikel ini berguna bagi orang-orang yang tertarik pada pengembangan sistem operasi, khususnya karena memberikan pemahaman mendalam tentang arsitektur x86. Proyek dengan fungsi serupa antara lain "Writing a Simple Operating System – from Scratch".

1 komentar

 
GN⁺ 2024-07-16
Komentar Hacker News
  • Ada cara untuk beralih ke long mode tanpa langsung beralih ke protected mode
    • Membuat bootloader yang memuat kernel 64-bit kecil ke boot sector
    • Termasuk proses memuat kernel dari disk dan mengatur mode VESA
  • 80286 memiliki MSW, register 16-bit, dan 80386 memperluasnya menjadi CR0 32-bit
    • Long mode 64-bit menambahkan EFER MSR dan memperluas CR0 menjadi 64-bit
    • Saat ini hanya 11 bit dari CR0 dan 8 bit dari EFER yang digunakan
    • Penasaran mengapa Intel/AMD tidak memakai bit kosong di register yang sudah ada
  • Bagian yang paling tidak perlu rumit dalam tulisan ini adalah Makefile dan linker script
    • NASM bisa menghasilkan output biner datar, tetapi tampaknya penulis menganggap penggunaan itu terlalu "hacky"
  • Semua langkah yang diperlukan untuk mengalihkan CPU ke mode yang benar terasa terlalu rumit tanpa perlu
    • Semuanya tampak sebagai langkah yang diperlukan demi kompatibilitas ke belakang
    • Intel sebenarnya bisa saja menyediakan flag atau instruksi untuk memulai langsung dalam mode yang benar sejak awal
    • Atau menghapus semua kompatibilitas ke belakang
    • Seingat saya, saya pernah meneliti apakah ARM64 punya masalah serupa
    • Penasaran apakah ada CPU yang sejak awal dirancang sebagai 64-bit
    • Tujuan/desain Itanium tampaknya memang seperti itu
  • Mungkin ada pendukung UEFI yang tidak memahami alasan dibuatnya pendekatan bootloader baru ini
    • Seperti kata penulis, "kalau sudah sampai sejauh ini, itu keren"
  • Penasaran sudah berapa lama UEFI ada
    • Disayangkan BIOS tidak ikut dipensiunkan saat long mode diperkenalkan
  • Penasaran apakah prosedur boot ini kompatibel dengan EFI/UEFI
    • Penasaran apakah supervisor UEFI mengemulasikan real mode/protected mode/long mode pada perangkat keras nyata
  • Penasaran apakah proses ini lebih sederhana di ARM