Mode apa yang digunakan chip PC Intel 64-bit modern menjalankan sektor boot?

12

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?

mring
sumber

Jawaban:

12

Semua komputer yang kompatibel dengan x86 saat ini (ini termasuk arsitektur x64 juga, baik dari Intel dan AMD, tetapi bukan Itanium) menjalankan kode sektor boot dalam mode nyata x86 , persis seperti yang dilakukan PC IBM asli 20+ tahun yang lalu. Ini bukan mode kernel, ini adalah mode segmentasi asli tanpa perlindungan memori, multitasking, atau level privilege kode.

Jika Anda bisa mendapatkan floppy drive, masukkan MS-DOS (atau FreeDOS ) di dalamnya, dan tersangkut di komputer sekarang, ia akan mulai booting.

Ini adalah tugas kode boot untuk beralih ke mode terproteksi, mengatur perlindungan memori, dll. Jadi tebakan Anda sebagian benar. Boot loader memulai eksekusi sebagai mode real x86 dan beralih ke mode terlindungi, memuat dan mulai menjalankan OS Kernel dalam mode "kernel" (ring 0).

Untuk informasi lebih lanjut, Anda dapat mengunjungi artikel Wikipedia tentang proses startup Windows NT , yang memiliki beberapa detail mengenai hal ini.

haim
sumber
haimg, terima kasih atas tautan dan klarifikasi itu. @Deshe, maaf mengambil jawaban terbaik.
mring
Sekaranglah waktunya untuk mengedit ini, jika tidak, Anda tidak setuju dengan jawaban Anda sendiri :-)
Daniel Beck
13

bagaimana dengan arsitektur 64-bit modern?

Itu tergantung dari firmware yang ada pada mesin 64-bit modern dengan arsitektur 64-bit modern. haimgJawabannya 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 CSregister 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.

JdeBP
sumber
Tautan ke proses bootstrap tampaknya rusak / mati. Saya tidak dapat menemukan penggantinya.
slm
1
Dan sekarang saya tahu nama Anda melihat URL 8-). Tidak berusaha memata-matai tidak bisa tidak memperhatikan.
slm
Saya pikir Anda memindahkan sesuatu dari ntlworld, apakah itu benar?
slm
Kemungkinan URL pengganti untuk tanggal 1 - jdebp.eu/FGA/pcat-boot-process.html . Tuhan tuhan salin / tempel A'er Anda di seluruh. Bahkan wikipedia ini memiliki A'er ini dikutip - en.wikipedia.org/wiki/Talk%3AReal_mode .
slm
1

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.

Deshe
sumber
1

Intel manual Volume 3 Panduan Pemrograman Sistem 325384-053US Januari 2015:

2.2 MODE OPERASI

Prosesor ditempatkan dalam mode alamat-nyata setelah power-up atau reset.

Hanya untuk iseng, diagram yang bagus dari manual:

masukkan deskripsi gambar di sini

GRUB memulai multiboot OS dalam mode terproteksi. Spesifikasi Multiboot 0.6.96 Status mesin :

'CR0' Bit 0 (PE) harus disetel.

Tidak yakin tentang GRUB dan x86_64.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
GRUB memulai OS yang memenuhi spesifikasi Multiboot dalam mode terproteksi. Itu termasuk * BSD, tetapi sejauh yang saya tahu, Linux tidak mengikuti spesifikasi ini dan melakukan hal sendiri. Saat mem-boot OS yang memenuhi spesifikasi Multiboot, konfigurasi GRUB menggunakan multibootkata kunci; untuk Linux, ada yang berdedikasi linux, linux16dan, dalam versi UEFI GRUB, linuxefikata kunci, memberi tahu GRUB untuk menggunakan protokol boot khusus Linux.
telcoM
@telcoM cukup adil
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件