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 jenis mkext 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 properti OSBundleRequired dalam file Info.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 (variabel sysctl kern.netboot akan diatur ke 1 dalam hal ini), ia menjalankan /etc/rc.netboot dengan argumen start .

/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 variabel sysctl terkandung di dalamnya ditetapkan.
  • syslogd dimulai.
  • File simbol Mach dibuat.
  • /etc/rc starts kextd, 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 dan netinfo 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 seperti Description, Provides, Requires, OrderPreference, memulai / menghentikan pesan, dll. Anda dapat menjalankan SystemStarter -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