Saya tahu dengan mesin yang lebih tua seperti 286s, 512 byte pertama yang dimuat dari sektor pertama dari boot drive ke 0000: 7C00 dalam memori dijalankan dalam mode nyata 16-bit, tetapi bagaimana dengan arsitektur 64-bit modern?
Sunting: Saya kira ini adalah pertanyaan yang salah saat memikirkannya. Penulis bootloader adalah penentu instruksi perakitan mode mana yang harus digunakan, bukan? Perangkat keras hanya melakukan apa yang diperintahkan. Maka pertanyaan saya seharusnya, mode apa yang dilakukan boot loader OS utama seperti Windows 7, Mac OS X (terbaru) dan GRUB pada mesin 64-bit yang digunakan?
Itu tergantung dari firmware yang ada pada mesin 64-bit modern dengan arsitektur 64-bit modern.
haimg
Jawabannya mungkin sekitar lima hingga enam tahun yang lalu untuk dunia x86, tetapi sudah ketinggalan zaman untuk dunia x86 saat ini.Firmware PC / AT lama
Beberapa mesin 64-bit modern memiliki firmware gaya PC / AT lama. Seperti dicatat dalam jawaban lain, mereka memuat dan menjalankan program bootstrap dari sektor # 0 dari disk dengan cara yang hampir sama dengan PC / AT. Ini adalah proses bootstrap PC / AT lama.
Firmware EFI baru
Mesin 64-bit modern lainnya memiliki firmware EFI baru. Ini tidak memuat program bootstrap dari sektor # 0 disc sama sekali . Mereka bootstrap oleh EFI Boot Manager memuat dan menjalankan aplikasi boot loader EFI . Program semacam itu dijalankan dalam mode terproteksi. Ini adalah proses bootstrap EFI.
Firmware EFI secara umum beralih ke mode terlindungi dalam beberapa instruksi untuk keluar dari reset prosesor. Beralih ke mode terlindungi dilakukan sejak dini dalam apa yang disebut "Fase SEC" dari inisialisasi firmware EFI. Secara teknis, prosesor x86 32-bit dan lebih besar bahkan tidak memulai dalam mode real yang sebenarnya, tetapi dalam apa yang secara sehari-hari dikenal sebagai mode tidak nyata . (Deskriptor segmen awal untuk
CS
register tidak menggambarkan pemetaan mode real konvensional dan inilah yang membuat ini "tidak nyata".)Dengan demikian, dapat dikatakan bahwa sistem EFI tersebut tidak pernah masuk ke mode nyata dengan benar , ketika bootstrap secara native ke bootloader EFI (yaitu ketika mereka tidak menggunakan modul dukungan kompatibilitas ), karena mereka beralih dari mode tidak nyata langsung ke mode terlindungi dan tetap dalam mode terproteksi sejak saat itu.
sumber
Sejauh yang saya tahu, kode boot selalu berjalan dalam mode Kernel.
Pertama, tidak mungkin bagi siapa pun untuk memutuskan mode apa yang akan digunakan karena dijalankan dari sektor boot, hanya karena itu adalah instruksi pertama yang dijalankan oleh firmware. Tidak ada cara bagi kode untuk mengatur instruksi apa yang tersedia untuknya sebelum mulai berjalan. Dengan demikian, secara desain, set perakitan yang tersedia untuk kode pada sektor boot ditentukan oleh arsitektur.
Jika ada mode yang kurang mampu yang dipilih untuk itu, mustahil untuk menggunakan instruksi dari mode istimewa yang lebih tinggi, yang cukup memaksa fakta bahwa kode boot berjalan dengan mode paling istimewa yang tersedia.
sumber
Intel manual Volume 3 Panduan Pemrograman Sistem 325384-053US Januari 2015:
Hanya untuk iseng, diagram yang bagus dari manual:
GRUB memulai multiboot OS dalam mode terproteksi. Spesifikasi Multiboot 0.6.96 Status mesin :
Tidak yakin tentang GRUB dan x86_64.
sumber
multiboot
kata kunci; untuk Linux, ada yang berdedikasilinux
,linux16
dan, dalam versi UEFI GRUB,linuxefi
kata kunci, memberi tahu GRUB untuk menggunakan protokol boot khusus Linux.