Lebih dekat, saya akan mencoba menjawab pertanyaan Anda, tetapi untuk deskripsi proses booting yang lebih komprehensif, coba artikel ini di IBM.
Oke, saya asumsikan, Anda menggunakan GRUB atau GRUB2 sebagai bootloader untuk penjelasan. Pertama, ketika BIOS mengakses disk Anda untuk memuat bootloader, BIOS menggunakan rutinitas bawaannya untuk akses disk, yang disimpan dalam interupsi 13 jam yang terkenal. Bootloader (dan kernel pada fase penyiapan) memanfaatkan rutinitas tersebut saat mengakses disk. Perhatikan bahwa BIOS berjalan dalam mode nyata (mode 16-bit) dari prosesor, sehingga tidak dapat mengatasi lebih dari 2^20 byte RAM (2^20, bukan 2^16, karena setiap alamat dalam mode nyata terdiri dari alamat_segmen* 16 + offset, di mana alamat segmen dan offset adalah 16-bit, lihat "segmentasi memori x86" di Wikipedia). Oleh karena itu, rutinitas ini tidak dapat mengakses RAM lebih dari 1MiB, yang merupakan batasan ketat dan ketidaknyamanan utama.
BIOS memuat kode bootloader langsung dari MBR – 512byte pertama disk Anda – dan menjalankannya. Jika Anda menggunakan GRUB, kode tersebut adalah GRUB tahap 1. Kode tersebut memuat GRUB tahap 1.5, yang terletak di ruang disk 32KiB pertama, yang disebut wilayah kompatibilitas DOS, atau dari alamat tetap sistem file. Tidak perlu memahami struktur sistem file untuk melakukan ini, karena meskipun tahap 1.5 ada di sistem file, ini adalah kode "mentah" dan dapat langsung dimuat ke RAM dan dieksekusi:Lihat "Rincian GRUB di PC " di pixelbeat.org, yang merupakan sumber gambar di bawah ini. Pemuatan stage1.5 dari disk ke RAM memanfaatkan rutinitas akses disk BIOS.
Stage1.5 berisi utilitas sistem file, sehingga dapat membaca tahap 2 dari sistem file (masih menggunakan BIOS 13h untuk membaca dari disk ke RAM, tetapi sekarang dapat menguraikan info sistem file tentang inode, dll., dan mendapatkan kode mentah keluar dari disk). BIOS lama mungkin tidak dapat mengakses seluruh HD karena keterbatasan dalam mode pengalamatan disk mereka – mereka mungkin menggunakan sistem Cylinder-Head-Sector, tidak dapat menangani lebih dari 8GiB ruang disk pertama:http://en.wikipedia. org/wiki/Cylinder-head-sector.
Tahap 2 memuat kernel ke dalam RAM (sekali lagi, menggunakan utilitas disk BIOS). Jika kernel 2.6+, ia juga memiliki initramfs yang dikompilasi di dalamnya, jadi tidak perlu memuatnya. Jika ini adalah kernel lama, bootloader juga memuat gambar initrd mandiri ke dalam memori, sehingga kernel dapat memasangnya dan mendapatkan driver untuk memasang sistem file nyata dari disk.
Masalahnya adalah kernel (dan ramdisk) memiliki berat lebih dari 1MiB; jadi, untuk memuatnya ke dalam RAM, Anda harus memuat kernel ke dalam 1MiB pertama, lalu beralih ke mode terproteksi (32-bit), pindahkan kernel yang dimuat ke memori tinggi (bebaskan 1MiB pertama untuk mode nyata), lalu kembali ke mode nyata (16-bit) lagi, dapatkan ramdisk dari disk ke 1MiB pertama (jika initrd terpisah dan kernel yang lebih lama), mungkin beralih ke mode terlindungi (32-bit) lagi, letakkan di tempatnya, mungkin dapatkan kembali ke mode nyata (atau tidak:https://stackoverflow.com/questions/4821911/does-grub-switch-to-protected-mode) dan jalankan kode kernel. Peringatan:Saya tidak sepenuhnya yakin tentang ketelitian dan keakuratan bagian deskripsi ini.
Sekarang, ketika Anda akhirnya menjalankan kernel, Anda sudah memilikinya dan ramdisk dimuat ke dalam RAM oleh bootloader , sehingga kernel dapat menggunakan utilitas disk dari ramdisk untuk me-mount sistem file root asli Anda dan melakukan pivot root ke sana. driver ramfs ada di kernel, jadi tentu saja bisa memahami isi initramfs.