2008-12-29: Changed title, cause this is only for 104 Tiger system.
注:这一篇文章详细地描述了OS X的启动过程,包括了从power up到login的全部过程,是看到的最详尽的讲解,对于troubleshoting/system maintenance等都有很高的使用和参考价值。
Mac OS X System Startup
This page briefly describes the sequence of events that happen when Mac OS X boots.
Some details of the boot process from power-on until the kernel is up and running are covered in Booting Mac OS X and XNU: The Kernel. To recapitulate:
- Power is turned on.
- Open Firmware code is executed.
- Hardware information is collected and hardware is initialized.
- Something (usually the OS, but also things like the Apple Hardware Test, etc.) is selected to boot. The user may be prompted to select what to boot.
- Control passes to
/System/Library/CoreServices/BootX, the boot loader. BootX loads the kernel and also draws the OS badges, if any. - BootX tries to load a previously cached list of device drivers (created/updated by
/usr/sbin/kextcache). Such a cache is of the typemkextand contains the info dictionaries and binary files for multiple kernel extensions. Note that if the mkext cache is corrupt or missing, BootX would look in/System/Library/Extensionsfor extensions that are needed in the current scenario (as determined by the value of theOSBundleRequiredproperty in theInfo.plistfile of the extension's bundle. - The
initroutine of the kernel is executed. The root device of the booting system is determined. At this point, Open Firmware is not accessible any more. - Various Mach/BSD data structures are initialized by the kernel.
- The I/O Kit is initialized.
- The kernel starts
/sbin/mach_init, the Mach service naming (bootstrap) daemon.mach_initmaintains mappings between service names and the Mach ports that provide access to those services.
From here on, the startup becomes user-level:
-
mach_initstarts/sbin/init, the traditional BSD init process. init determines the runlevel, and runs/etc/rc.boot, which sets up the machine enough to run single-user.
During its execution, rc.boot and the other rc scripts source /etc/rc.common, a shell script containing utility functions, such as CheckForNetwork() (checks if the network is up), GetPID(), purgedir() (deletes directory contents only, not the structure), etc.
-
rc.bootfigures out the type of boot (Multi-User, Safe, CD-ROM, Network etc.). In case of a network boot (thesysctlvariablekern.netbootwill be set to1in which case), it runs/etc/rc.netbootwith astartargument.
/etc/rc.netboot handles various aspects of network booting. For example, it performs network and (if any) local mounts. It also calls /usr/bin/nbst to associate a shadow file with the disk image being used as the root device. The idea is to redirect writes to the shadow file, which hopefully is on local storage.
-
rc.bootfigures out if a file system consistency check is required. Single-user and CD-ROM boots do not run fsck. SafeBoot always runs fsck.rc.boothandles the return status of fsck as well. - If
rc.bootexits successfully,/etc/rc, the multi-user startup script is then run. If booting from a CD-ROM, the script switches over to/etc/rc.cdrom(installation). -
/etc/rcmounts local file systems (HFS+, HFS, UFS,/dev/fd,/.vol), ensures that the directory/private/var/tmpexists, and runs/etc/rc.installer_cleanup, if one exists (left by an installer before reboot). -
/etc/rc.cleanupis run. It "cleans" a number of Unix and Mac specific directories/files. - BootCache is started.
- Various
sysctlvariables are set (such as for maximum number of vnodes, System V IPC, etc.). If/etc/sysctl.confexists (plus/etc/sysctl-macosxserver.confon Mac OS X Server), it is read andsysctlvariables contained therein are set. -
syslogdis started. - The Mach symbol file is created.
-
/etc/rcstartskextd, the daemon process that loads kernel extension on demand from kernel or client processes. -
/usr/libexec/register_mach_bootstrap_serversis run to load various Mach bootstrap based services contained in/etc/mach_init.d -
portmapandnetinfoare started. - If
/System/Library/Extensions.mkextis older than/System/Library/Extensions,/etc/rcdeletes the existing mkext and creates a new one. It also creates one if one doesn't exist. -
/etc/rcstarts/usr/sbin/update, the daemon that flushes internal file system caches to disk frequently. -
/etc/rcstarts the virtual memory system./private/var/vmis set up as the swap directory./sbin/dynamic_pageris started with the appropriate arguments (swap filename path template, size of swap files created, high and low water alert triggers specifying when to create additional swap files or delete existing ones). -
/etc/rcstarts/usr/libexec/fix_prebindingto fix incorrectly prebound binaries. -
/etc/rcexecutes/etc/rc.cleanupto clean up and reset files and devices. -
/etc/rcfinally launches/sbin/SystemStarterto handle startup items from locations such as/System/Library/StartupItemsand/Library/StartupItems. A StartupItem is a program, usually a shell script, whose name matches the folder name. The folder contains a property list file containing key-value pairs such asDescription,Provides,Requires,OrderPreference, start/stop messages etc. You can runSystemStarter -n -Das root to have the program print debugging and dependency information (without actually running anything). - The
CoreGraphicsstartup item starts the Apple Type Services daemon (ATSServer) as well as the Window Server (WindowServer).
By default, the loginwindow application (loginwindow.app under /System/Library/CoreServices) is executed for the console device. You can change this line in /etc/ttys if you do not want a graphical login.
本文详细介绍了MacOSX系统的启动流程,从开机到登录界面的全过程,包括Open Firmware初始化、BootX加载内核、核心服务启动及用户级进程的运行等内容,对故障排查和系统维护具有很高的参考价值。
4673

被折叠的 条评论
为什么被折叠?



