Apa yang terjadi dalam proses booting Mac OS X?

Anonim

Pernah bertanya-tanya apa yang terjadi selama proses boot dan startup Mac OS X? Dengan Mac OS X ini sedikit lebih rumit daripada sebelumnya, dan sudah lama berlalu adalah hari-hari Mac OS Klasik (Sistem 9, 8, 7, 6), di mana menonton Mac kita boot dengan serangkaian ekstensi dan panel kontrol yang kami selalu dapat mengidentifikasi hanya dengan ikonnya, lalu mencari-cari di folder Ekstensi untuk dengan mudah menyesuaikan apa yang dimuat dan terjadi pada boot Mac.Hari ini dengan dasar-dasar Unix dari Mac OS X, banyak pengguna sama sekali tidak menyadari apa yang terjadi di balik layar.

Jadi apa yang sebenarnya terjadi selama proses booting Mac OS X? Anda selalu bisa mendapatkan tampilan yang lebih baik dengan mem-boot Mac dalam Mode Verbose, tetapi itu tidak selalu menjelaskan semua yang Anda lihat. Untungnya penjelasan yang sangat baik tersedia melalui segmen di KernelThread, yang dengan hati-hati mencantumkan urutan peristiwa booting Mac OS X, dari awal hingga akhir. Ini cukup menyeluruh dan layak dibaca, diulangi di bawah untuk pengguna Mac yang ingin tahu di luar sana.

catatan: Seperti yang ditunjukkan oleh pembaca, PPC menggunakan OF (Openfirmware), i386 menggunakan EFI (Extensible Firmware Interface)

Jadi apa yang terjadi selama proses booting Mac OS X? Anda menyalakan Mac Anda, dan inilah yang terjadi:

  • Daya dihidupkan.
  • OF atau kode EFI dijalankan.
  • Informasi perangkat keras dikumpulkan dan perangkat keras diinisialisasi.
  • Sesuatu (biasanya OS, tetapi juga hal-hal seperti Tes Perangkat Keras Apple, dll.) dipilih untuk melakukan booting. Pengguna mungkin diminta untuk memilih apa yang akan di-boot.
  • Kontrol beralih ke /System/Library/CoreServices/BootX, boot loader. BootX memuat kernel dan juga menggambar lencana OS, jika ada.
  • BootX mencoba memuat daftar driver perangkat yang sebelumnya di-cache (dibuat/diperbarui oleh /usr/sbin/kextcache). Cache tersebut bertipe mkext dan berisi kamus info dan file biner untuk banyak ekstensi kernel. Perhatikan bahwa jika mkext cache rusak atau hilang, BootX akan mencari di /System/Library/Extensions untuk ekstensi yang diperlukan dalam skenario saat ini (sebagaimana ditentukan oleh nilai properti OSBundleRequired properti di Info.plist file bundel ekstensi.
  • Rutinitas init rutin 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.
  • Kit I/O diinisialisasi.
  • Kernel dimulai /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 dari sini, startup menjadi tingkat pengguna:

  • mach_init mulai /sbin/init, BSD tradisional proses init. init menentukan runlevel, dan menjalankan /etc/rc.boot, yang menyiapkan mesin cukup untuk menjalankan pengguna tunggal.

Selama eksekusi, rc.boot dan yang lainnya rc sumber skrip /etc/rc.common , skrip shell yang berisi fungsi utilitas, seperti CheckForNetwork() (memeriksa apakah jaringan aktif), GetPID (), purgedir() (hanya menghapus isi direktori, bukan struktur), dll.

  • rc.boot mengetahui jenis boot (Multi-Pengguna, Aman, CD-ROM, Jaringan, dll.). Dalam kasus booting jaringan (variabel sysctl variabel kern.netboot akan disetel ke1 dalam hal ini), itu berjalan /etc/rc.netboot dengan mulai argumen.

/etc/rc.netboot menangani berbagai aspek boot jaringan. Misalnya, ia melakukan pemasangan jaringan dan (jika ada) lokal. Itu juga memanggil /usr/bin/nbst untuk mengaitkan file bayangan dengan gambar disk yang digunakan sebagai perangkat root.Idenya adalah untuk mengalihkan penulisan ke file bayangan, yang diharapkan ada di penyimpanan lokal.

  • rc.boot mengetahui apakah pemeriksaan konsistensi sistem file diperlukan. Boot single-user dan CD-ROM tidak menjalankan fsck. SafeBoot selalu menjalankan fsck. rc.boot juga menangani status pengembalian fsck.
  • Jika rc.boot berhasil keluar, /etc/rc , skrip startup multi-pengguna kemudian dijalankan. Jika mem-boot dari CD-ROM, skrip beralih ke /etc/rc.cdrom (instalasi).
  • /etc/rc memasang sistem file lokal (HFS+, HFS, UFS, /dev/ fd, /.vol), memastikan bahwa direktori /private/var/tmp ada, dan menjalankan /etc/rc.installer_cleanup, jika ada (ditinggalkan oleh penginstal sebelum reboot).
  • /etc/rc.cleanup dijalankan. Itu "membersihkan" sejumlah direktori/file khusus Unix dan Mac.
  • BootCache dimulai.
  • Berbagai sysctl variabel 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), itu dibaca dan sysctl variabel yang terkandung di dalamnya diatur.
  • syslogd dimulai.
  • File simbol Mach dibuat.
  • /etc/rc dimulai kextd, proses daemon yang memuat ekstensi kernel sesuai permintaan dari proses kernel atau klien.
  • /usr/libexec/register_mach_bootstrap_servers dijalankan untuk memuat berbagai layanan berbasis bootstrap Mach yang terdapat dalam / 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. Itu juga membuat satu jika tidak ada.
  • /etc/rc dimulai /usr/sbin/update , daemon yang sering membersihkan cache sistem file internal ke disk.
  • /etc/rc memulai sistem memori virtual. /private/var/vm diatur sebagai direktori swap. /sbin/dynamic_pager dimulai dengan argumen yang sesuai (template jalur nama file swap, ukuran file swap yang dibuat, pemicu peringatan air tinggi dan rendah yang menentukan kapan harus membuat swap tambahan file atau hapus yang sudah ada).
  • /etc/rc dimulai /usr/libexec/fix_prebindinguntuk memperbaiki biner prebound yang salah.
  • /etc/rc mengeksekusi /etc/rc.cleanupuntuk membersihkan dan mengatur ulang file dan perangkat.
  • /etc/rc akhirnya diluncurkan /sbin/SystemStarter untuk menangani item startup dari lokasi seperti /System/Library/StartupItems dan /Library/StartupItems StartupItem adalah program, biasanya skrip shell, yang namanya cocok dengan nama folder. Folder tersebut berisi file daftar properti yang berisi key-value pair seperti Deskripsi, Provides, Membutuhkan, OrderPreference, memulai/menghentikan pesan, dll. Anda dapat menjalankan SystemStarter -n -D sebagai root agar program mencetak informasi debug dan dependensi (tanpa benar-benar menjalankan apa pun).
  • Item startup CoreGraphics memulai daemon Apple Type Services (ATSServer ) serta Window Server (WindowServer).

Dan kemudian Mac Anda di-boot!

Anda dapat melihat sendiri sedikit aktivitas ini dengan Mode Verbose (yang dapat Anda boot ke Mode Verbose per boot, atau Anda bahkan dapat menyetel Mac agar selalu boot dalam Mode Verbose jika Anda ingin selalu melihat boot gaya unix), tetapi ini adalah penjelasan yang cukup menyeluruh.

Apple juga memiliki beberapa dokumentasi yang tersedia pada proses boot Mac yang tersedia di sini di perpustakaan dokumen pengembang mereka di sini.

Perhatikan URL asli yang memberikan informasi di atas tidak lagi aktif, sehingga postingan tersebut telah disertakan di atas untuk anak cucu melalui cache. Sumber aslinya adalah thread di KernelThread di url berikut: http://www.kernelthread.com/mac/osx/arch_startup.html yang saat ini offline dan tidak dialihkan ke lokasi baru.

Jika Anda memiliki informasi tambahan atau tambahan lain untuk ditambahkan ke urutan boot Mac OS X, bagikan di komentar!

Apa yang terjadi dalam proses booting Mac OS X?