Apa yang terjadi dalam proses boot Mac OS X?
Lama berlalu adalah hari-hari OS 9, menyaksikan Mac kami boot dengan serangkaian ekstensi dan panel kontrol yang selalu bisa kami identifikasi. Hari ini dengan dasar-dasar Unix dari OS X, banyak pengguna yang sama sekali tidak menyadari apa yang terjadi di belakang layar. Jadi apa yang sebenarnya terjadi selama proses boot Mac OS X? Segmen di KernelThread hati-hati daftar urutan peristiwa, dari awal hingga selesai. Ini cukup teliti dan layak dibaca. Diulang di bawah ini untuk pengguna Mac OS X yang ingin tahu di luar sana.
Catatan: Seperti yang ditunjukkan oleh pembaca, PPC menggunakan OF, i386 menggunakan EFI
Anda menghidupkan Mac Anda, dan inilah yang terjadi:
- Daya dihidupkan.
- Atau kode EFI dijalankan.
- Informasi perangkat keras dikumpulkan dan perangkat keras diinisialisasi.
- Sesuatu (biasanya OS, tetapi juga hal-hal seperti Apple Hardware Test, dll.) Dipilih untuk boot. Pengguna mungkin diminta untuk memilih apa yang akan di-boot.
- Kontrol melewati ke
/System/Library/CoreServices/BootX
, boot loader. BootX memuat kernel dan juga menarik lencana OS, jika ada. - BootX mencoba memuat daftar driver perangkat yang di-cache sebelumnya (dibuat / diperbarui oleh
/usr/sbin/kextcache
). Cache semacam itu adalah jenismkext
dan berisi kamus info dan file biner untuk beberapa ekstensi kernel. Perhatikan bahwa jika cache mkext rusak atau hilang, BootX akan melihat di/System/Library/Extensions
untuk ekstensi yang diperlukan dalam skenario saat ini (sebagaimana ditentukan oleh nilai propertiOSBundleRequired
dalam fileInfo.plist
dari bundel ekstensi . - Rutin
init
dari kernel dijalankan. Perangkat root dari sistem boot ditentukan. Pada titik ini, Firmware tidak dapat diakses lagi. - Berbagai struktur data Mach / BSD diinisialisasi oleh kernel.
- I / O Kit diinisialisasi.
- Kernel memulai
/sbin/mach_init
, daemon penamaan layanan Mach (bootstrap).mach_init
mempertahankan pemetaan antara nama layanan dan port Mach yang menyediakan akses ke layanan tersebut.
Mulai sekarang, startup menjadi level pengguna:
mach_init
dimulai/sbin/init
, proses init BSD tradisional. init menentukan runlevel, dan menjalankan/etc/rc.boot
, yang mengatur mesin cukup untuk menjalankan satu pengguna.
Selama pelaksanaannya, rc.boot
dan sumber skrip rc
lain /etc/rc.common
, skrip shell yang berisi fungsi utilitas, seperti CheckForNetwork()
(memeriksa apakah jaringan sudah aktif), GetPID()
, purgedir()
(menghapus isi direktori saja, bukan struktur), dll.
rc.boot
mengetahui jenis boot (Multi-User, Safe, CD-ROM, Network, dll.). Dalam kasus boot jaringan (variabelsysctl
kern.netboot
akan diatur ke1
dalam hal ini), ia menjalankan/etc/rc.netboot
dengan argumenstart
.
/etc/rc.netboot
menangani berbagai aspek boot jaringan. Misalnya, ia melakukan jaringan dan (jika ada) tunggangan lokal. Ini juga memanggil /usr/bin/nbst
untuk mengaitkan file bayangan dengan gambar disk yang digunakan sebagai perangkat root. Idenya adalah untuk mengarahkan menulis ke file bayangan, yang semoga ada di penyimpanan lokal.
- Angka
rc.boot
jika diperlukan pemeriksaan konsistensi sistem file. Sepatu single-user dan CD-ROM tidak menjalankan fsck. SafeBoot selalu menjalankan fsck.rc.boot
menangani status kembalinya fsck. - Jika
rc.boot
berhasil,/etc/rc
, skrip startup multi-user kemudian dijalankan. Jika boot dari CD-ROM, skrip beralih ke/etc/rc.cdrom
(instalasi). /etc/rc
mounts file system lokal (HFS +, HFS, UFS,/dev/fd
,/.vol
), memastikan bahwa direktori/private/var/tmp
ada, dan menjalankan/etc/rc.installer_cleanup
, jika ada ( ditinggalkan oleh installer sebelum reboot)./etc/rc.cleanup
dijalankan. Ini "membersihkan" sejumlah direktori / file khusus Unix dan Mac.- BootCache dimulai.
- Berbagai variabel
sysctl
ditetapkan (seperti untuk jumlah maksimum vnode, System V IPC, dll.). Jika/etc/sysctl.conf
ada (plus/etc/sysctl-macosxserver.conf
pada Mac OS X Server), ini dibaca dan variabelsysctl
terkandung di dalamnya ditetapkan. syslogd
dimulai.- File simbol Mach dibuat.
/etc/rc
startskextd
, proses daemon yang memuat ekstensi kernel pada permintaan dari kernel atau proses klien./usr/libexec/register_mach_bootstrap_servers
dijalankan untuk memuat berbagai layanan berbasis bootstrap Mach yang terdapat di/etc/mach_init.d
portmap
dannetinfo
dimulai.- Jika
/System/Library/Extensions.mkext
lebih lama dari/System/Library/Extensions
,/etc/rc
menghapus mkext yang ada dan membuat yang baru. Ini juga menciptakan satu jika tidak ada. /etc/rc
starts/usr/sbin/update
, daemon yang mengosongkan cache sistem file internal ke disk secara berkala./etc/rc
memulai sistem memori virtual./private/var/vm
diatur sebagai direktori swap./sbin/dynamic_pager
dimulai dengan argumen yang tepat (templat path nama file, ukuran file swap yang dibuat, pemicu peringatan tinggi dan rendah yang menentukan kapan harus membuat file swap tambahan atau menghapus yang sudah ada)./etc/rc
starts/usr/libexec/fix_prebinding
untuk memperbaiki binari yang tidak dapat dijalankan sebelumnya./etc/rc
mengeksekusi/etc/rc.cleanup
untuk membersihkan dan mereset file dan perangkat./etc/rc
akhirnya meluncurkan/sbin/SystemStarter
untuk menangani item startup dari lokasi seperti/System/Library/StartupItems
dan/Library/StartupItems
. StartupItem adalah sebuah program, biasanya skrip shell, yang namanya cocok dengan nama folder. Folder berisi file daftar properti yang berisi pasangan nilai-kunci sepertiDescription
,Provides
,Requires
,OrderPreference
, memulai / menghentikan pesan, dll. Anda dapat menjalankanSystemStarter -n -D
sebagai root agar program mencetak debugging dan informasi ketergantungan (tanpa benar-benar menjalankan apa saja).- Item startup
CoreGraphics
memulai daemon Apple Type Services (ATSServer
) serta Server Window (WindowServer
).
Sumber: KernelThread