Nighpher, saya akan mencoba menjawab pertanyaan Anda, tetapi untuk deskripsi yang lebih komprehensif tentang proses boot, coba artikel IBM .
Ok, saya berasumsi, bahwa Anda menggunakan GRUB atau GRUB2 sebagai bootloader untuk penjelasan. Pertama, ketika BIOS mengakses disk Anda untuk memuat bootloader, ia menggunakan rutinitas bawaannya untuk akses disk, yang disimpan dalam interupsi 13 jam yang terkenal. Bootloader (dan kernel pada tahap setup) menggunakan rutinitas tersebut ketika mereka mengakses disk. Perhatikan bahwa BIOS berjalan dalam mode real (16 bit) mode prosesor, sehingga tidak dapat mengatasi lebih dari 2 ^ 20 byte RAM (2 ^ 20 bukan 2 ^ 16 karena setiap alamat dalam mode nyata terdiri dari segment_address * 16 + offset , di mana alamat segmen dan offset 16-bit, lihat http://en.wikipedia.org/wiki/X86_memory_segmentation ). Dengan demikian, rutinitas ini tidak dapat mengakses lebih dari 1 MiB RAM, yang merupakan batasan ketat dan ketidaknyamanan utama.
BIOS memuat kode bootloader langsung dari MBR - 512 byte pertama dari disk Anda dan menjalankannya. Jika Anda menggunakan GRUB, kode itu adalah GRUB tahap 1. Kode itu memuat GRUB tahap 1.5, yang terletak di ruang disk 32 KiB pertama, yang disebut wilayah kompatibilitas DOS atau dari alamat tetap sistem file. Tidak perlu memahami sistem file untuk melakukan ini, karena bahkan tahap 1.5 ada dalam sistem file, itu adalah kode "mentah" dan dapat langsung dimuat ke RAM dan dieksekusi: http://www.pixelbeat.org/ docs / disk / . Memuat stage1.5 dari disk ke RAM menggunakan rutinitas akses disk BIOS.
Stage1.5 berisi utilitas filesystem, sehingga ia dapat membaca stage2 dari filesystem (well, masih menggunakan BIOS 13h untuk membaca dari disk ke RAM, tetapi sekarang ia dapat menguraikan informasi sistem file tentang inodes dll. Dan mendapatkan kode mentah dari disk). BIOS yang lebih lama mungkin tidak dapat mengakses seluruh HD karena keterbatasan dalam mode pengalamatan disk - mereka mungkin menggunakan sistem Cylinder-Head-Sector, tidak dapat mengatasi lebih dari 8 GiB ruang disk pertama: http: //en.wikipedia. org / wiki / Cylinder-head-sector .
Stage2 memuat kernel ke dalam RAM (sekali lagi, menggunakan utilitas disk BIOS). Jika kernel 2.6+, kernel ini juga memiliki initramfs yang dikompilasi, jadi tidak perlu memuatnya. Jika ini adalah kernel yang lebih lama, bootloader juga memuat gambar initrd mandiri ke dalam memori, sehingga kernel bisa memasangnya dan mendapatkan driver untuk memasang sistem file nyata dari disk.
Masalahnya adalah kernel (dan ramdisk) memiliki berat lebih dari 1 MiB, sehingga untuk memuatnya ke RAM Anda harus memuat kernel ke 1 MiB pertama, kemudian lompat ke mode terproteksi (32 bit), pindahkan kernel yang dimuat ke memori tinggi (gratis 1 MiB pertama untuk mode real), lalu kembali ke mode real (16 bit) lagi, dapatkan ramdisk dari disk ke 1 MiB pertama (jika kernel initrd dan yang lebih lama terpisah), mungkin beralih ke mode terproteksi (32 bit) lagi, letakkan di tempat yang seharusnya, mungkin kembali ke mode nyata (atau tidak: /programming/4821911/does-grub-switch-to-protected-mode ) dan jalankan kode kernel. Peringatan: Saya tidak sepenuhnya yakin tentang ketelitian dan ketepatan bagian deskripsi ini.
Sekarang, ketika Anda akhirnya menjalankan kernel, Anda sudah memilikinya dan ramdisk dimuat ke RAM oleh bootloader , jadi kernel dapat menggunakan utilitas disk dari ramdisk untuk me-mount sistem file root Anda dan root pivot untuk itu. driver ramfs hadir di kernel, sehingga dapat memahami isi initramfs, tentu saja.