琴雪7100 发表于 2016-5-16 08:37:38

Mac OS X 1.4 Tiger: System Startup

Update:
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 HardwareTest, etc.) is selected to boot. The user may be prompted to selectwhat 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 type mkextand contains the info dictionaries and binary files for multiple kernelextensions. Note that if the mkext cache is corrupt or missing, BootXwould look in /System/Library/Extensions for extensions that are needed in the current scenario (as determined by the value of the OSBundleRequired property in the Info.plist file of the extension's bundle.
[*]The init routine of the kernel is executed. The rootdevice of the booting system is determined. At this point, OpenFirmware 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_init maintains mappings between service names and the Mach ports that provide access to those services.
  From here on, the startup becomes user-level:

[*]mach_init starts /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.boot figures out the type of boot (Multi-User, Safe, CD-ROM, Network etc.). In case of a network boot (the sysctl variable kern.netboot will be set to 1 in which case), it runs /etc/rc.netboot with a start argument.
  /etc/rc.netboot handles various aspects of network booting. For example, it performs network and (if any) local mounts. It also calls /usr/bin/nbstto associate a shadow file with the disk image being used as the rootdevice. The idea is to redirect writes to the shadow file, whichhopefully is on local storage.


[*]rc.boot figures out if a file system consistency checkis required. Single-user and CD-ROM boots do not run fsck. SafeBootalways runs fsck. rc.boot handles the return status of fsck as well.
[*]If rc.boot exits 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/rc mounts local file systems (HFS+, HFS, UFS, /dev/fd, /.vol), ensures that the directory /private/var/tmp exists, and runs /etc/rc.installer_cleanup, if one exists (left by an installer before reboot).
[*]/etc/rc.cleanup is run. It "cleans" a number of Unix and Mac specific directories/files.
[*]BootCache is started.
[*]Various sysctl variables are set (such as for maximum number of vnodes, System V IPC, etc.). If /etc/sysctl.conf exists (plus /etc/sysctl-macosxserver.conf on Mac OS X Server), it is read and sysctl variables contained therein are set.
[*]syslogd is started.
[*]The Mach symbol file is created.
[*]/etc/rc starts kextd, the daemon process that loads kernel extension on demand from kernel or client processes.
[*]/usr/libexec/register_mach_bootstrap_servers is run to load various Mach bootstrap based services contained in /etc/mach_init.d
[*]portmap and netinfo are started.
[*]If /System/Library/Extensions.mkext is older than /System/Library/Extensions, /etc/rc deletes the existing mkext and creates a new one. It also creates one if one doesn't exist.
[*]/etc/rc starts /usr/sbin/update, the daemon that flushes internal file system caches to disk frequently.
[*]/etc/rc starts the virtual memory system. /private/var/vm is 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 triggersspecifying when to create additional swap files or delete existingones).
[*]/etc/rc starts /usr/libexec/fix_prebinding to fix incorrectly prebound binaries.
[*]/etc/rc executes /etc/rc.cleanup to clean up and reset files and devices.
[*]/etc/rc finally launches /sbin/SystemStarter to handle startup items from locations such as /System/Library/StartupItems and /Library/StartupItems.A StartupItem is a program, usually a shell script, whose name matchesthe folder name. The folder contains a property list file containingkey-value pairs such as Description, Provides, Requires, OrderPreference, start/stop messages etc. You can run SystemStarter -n -D as root to have the program print debugging and dependency information (without actually running anything).
[*]The CoreGraphics startup 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.
页: [1]
查看完整版本: Mac OS X 1.4 Tiger: System Startup