Τι συμβαίνει στη διαδικασία εκκίνησης του Mac OS X;
Αναρωτηθήκατε ποτέ τι συμβαίνει κατά τη διαδικασία εκκίνησης και εκκίνησης του Mac OS X; Με το Mac OS X είναι λίγο πιο περίπλοκο από ό,τι ήταν κάποτε, και η εποχή του Κλασικού Mac OS (Σύστημα 9, 8, 7, 6), όπου βλέποντας τα Mac μας να εκκινούν με μια σειρά από επεκτάσεις και πίνακες ελέγχου που μπορούσαμε πάντα να αναγνωρίζουμε μόνο από το εικονίδιο τους και, στη συνέχεια, να ψάξουμε στο φάκελο Extensions για να προσαρμόσουμε εύκολα τι φορτώνεται και συμβαίνει στην εκκίνηση του Mac.Σήμερα, με τη βάση Unix του Mac OS X, πολλοί χρήστες δεν γνωρίζουν εντελώς τι συμβαίνει στα παρασκήνια.
Τι ακριβώς συμβαίνει λοιπόν κατά τη διαδικασία εκκίνησης του Mac OS X; Μπορείτε πάντα να έχετε μια καλύτερη ματιά κάνοντας εκκίνηση ενός Mac σε λειτουργία Verbose, αλλά αυτό δεν εξηγεί απαραίτητα όλα αυτά που βλέπετε. Ευτυχώς, μια εξαιρετική εξήγηση είναι διαθέσιμη μέσω τμήματος στο KernelThread, το οποίο παραθέτει προσεκτικά τη σειρά των συμβάντων εκκίνησης του Mac OS X, από την αρχή μέχρι το τέλος. Είναι αρκετά εμπεριστατωμένο και αξίζει να το διαβάσετε, επαναλαμβάνεται παρακάτω για τους περίεργους χρήστες Mac εκεί έξω.
σημείωση: Όπως επεσήμανε ένας αναγνώστης, η PPC χρησιμοποιεί το OF (Openfirmware), το i386 χρησιμοποιεί το EFI (Extensible Firmware Interface)
Τι συμβαίνει λοιπόν κατά τη διαδικασία εκκίνησης του Mac OS X; Ανοίξτε το Mac σας και συμβαίνει αυτό:
- Η τροφοδοσία είναι ενεργοποιημένη.
- OF ή κωδικός EFI εκτελείται.
- Συλλέγονται πληροφορίες υλικού και αρχικοποιείται το υλικό.
- Κάτι (συνήθως το λειτουργικό σύστημα, αλλά και πράγματα όπως το Apple Hardware Test, κ.λπ.) επιλέγεται για εκκίνηση. Μπορεί να ζητηθεί από τον χρήστη να επιλέξει τι θα εκκινήσει. Το
- Control περνά στο
/System/Library/CoreServices/BootX, το πρόγραμμα φόρτωσης εκκίνησης. Το BootX φορτώνει τον πυρήνα και επίσης σχεδιάζει τα σήματα του λειτουργικού συστήματος, εάν υπάρχουν.
Το - BootX προσπαθεί να φορτώσει μια λίστα προγραμμάτων οδήγησης συσκευών που είχε αποθηκευτεί στην προσωρινή μνήμη (δημιουργήθηκε/ενημερώθηκε από
/usr/sbin/kextcache
). Μια τέτοια κρυφή μνήμη είναι του τύπουmkext
και περιέχει τα λεξικά πληροφοριών και τα δυαδικά αρχεία για πολλαπλές επεκτάσεις πυρήνα. Σημειώστε ότι εάν η προσωρινή μνήμη mkext είναι κατεστραμμένη ή λείπει, το BootX θα αναζητήσει στο/System/Library/Extensions
για επεκτάσεις που απαιτούνται στο τρέχον σενάριο (όπως καθορίζεται από την τιμή της ιδιότηταςOSBundleRequired
στο αρχείοInfo.plist της δέσμης της επέκτασης.
- Η ρουτίνα
init του πυρήνα εκτελείται. Καθορίζεται η ριζική συσκευή του συστήματος εκκίνησης. Σε αυτό το σημείο, το υλικολογισμικό δεν είναι πλέον προσβάσιμο.
- Διάφορες δομές δεδομένων Mach/BSD αρχικοποιούνται από τον πυρήνα.
- Το κιτ εισόδου/εξόδου έχει αρχικοποιηθεί.
- Ο πυρήνας ξεκινάει
/sbin/mach_init
, ο δαίμονας ονομασίας της υπηρεσίας Mach (bootstrap).mach_init διατηρεί αντιστοιχίσεις μεταξύ των ονομάτων υπηρεσιών και των θυρών Mach που παρέχουν πρόσβαση σε αυτές τις υπηρεσίες.
Από εδώ και πέρα, η εκκίνηση γίνεται σε επίπεδο χρήστη:
mach_init
ξεκινά/sbin/init
, το παραδοσιακό BSD έναρξη της διαδικασίας. Το init καθορίζει το επίπεδο εκτέλεσης και εκτελεί το/etc/rc.boot, το οποίο ρυθμίζει το μηχάνημα αρκετά ώστε να λειτουργεί για έναν χρήστη.
Κατά την εκτέλεσή του, rc.boot
και το άλλο rc
πηγή σεναρίων /etc/rc.common
, ένα σενάριο φλοιού που περιέχει βοηθητικές συναρτήσεις, όπως
CheckForNetwork() (ελέγχει εάν το δίκτυο είναι ανοιχτό),
GetPID (), purgedir() (διαγράφει μόνο τα περιεχόμενα του καταλόγου, όχι τη δομή), κ.λπ.
-
Το
rc.boot
υπολογίζει τον τύπο εκκίνησης (Πολλαπλοί χρήστες, Ασφαλής, CD-ROM, Δίκτυο κ.λπ.). Σε περίπτωση εκκίνησης δικτύου (η μεταβλητήsysctl
kern.netboot
θα οριστεί σε1
στην οποία περίπτωση), εκτελεί/etc/rc.netboot
με έναstart επιχείρημα.
/etc/rc.netboot
χειρίζεται διάφορες πτυχές της εκκίνησης δικτύου. Για παράδειγμα, εκτελεί δικτυακές και (αν υπάρχουν) τοπικές προσαρτήσεις. Καλεί επίσης το /usr/bin/nbst για να συσχετίσει ένα σκιώδες αρχείο με το είδωλο του δίσκου που χρησιμοποιείται ως ριζική συσκευή.Η ιδέα είναι να ανακατευθύνετε τις εγγραφές στο σκιώδες αρχείο, το οποίο ελπίζουμε ότι βρίσκεται σε τοπική αποθήκευση.
-
Το
rc.boot
υπολογίζει εάν απαιτείται έλεγχος συνέπειας συστήματος αρχείων. Οι μπότες ενός χρήστη και οι μπότες CD-ROM δεν εκτελούν το fsck. Το SafeBoot εκτελεί πάντα το fsck. Τοrc.boot χειρίζεται επίσης την κατάσταση επιστροφής του fsck.
- Εάν
rc.boot
εξέλθει με επιτυχία,/etc/rc
, στη συνέχεια εκτελείται το σενάριο εκκίνησης πολλών χρηστών. Εάν γίνεται εκκίνηση από CD-ROM, το σενάριο αλλάζει σε/etc/rc.cdrom (εγκατάσταση).
/etc/rc
προσαρτά τοπικά συστήματα αρχείων (HFS+, HFS, UFS,/dev/ fd
,/.vol
), διασφαλίζει ότι ο κατάλογος/private/var/tmp
υπάρχει και εκτελεί το/etc/rc.installer_cleanup, εάν υπάρχει (που άφησε ένα πρόγραμμα εγκατάστασης πριν από την επανεκκίνηση).
/etc/rc.cleanup εκτελείται. "Καθαρίζει" έναν αριθμό καταλόγων/αρχείων που αφορούν συγκεκριμένα Unix και Mac.
- Το BootCache έχει ξεκινήσει.
- Διάφορες
sysctl
έχουν οριστεί μεταβλητές (όπως για μέγιστο αριθμό vnodes, System V IPC, κ.λπ.). Εάν υπάρχει/etc/sysctl.conf
(συν/etc/sysctl-macosxserver.conf
σε διακομιστή Mac OS X), διαβάζεται και ορίζονταιsysctl μεταβλητές που περιέχονται σε αυτόν.
syslogd έχει ξεκινήσει.
- Το αρχείο συμβόλων Mach δημιουργήθηκε.
/etc/rc
ξεκινάkextd, η διαδικασία δαίμονα που φορτώνει την επέκταση πυρήνα κατ' απαίτηση από διεργασίες πυρήνα ή πελάτη.
Το /usr/libexec/register_mach_bootstrap_servers
εκτελείται για να φορτώσει διάφορες υπηρεσίες που βασίζονται σε Mach bootstrap που περιέχονται στο/ etc/mach_init.d
portmap
καιnetinfo έχουν ξεκινήσει.
- Αν το
/System/Library/Extensions.mkext
είναι παλαιότερο από/System/Library/Extensions Το
,/etc/rc διαγράφει το υπάρχον mkext και δημιουργεί ένα νέο. Δημιουργεί επίσης ένα εάν δεν υπάρχει.
/etc/rc
ξεκινά/usr/sbin/update , ο δαίμονας που ξεπλένει συχνά τις εσωτερικές κρυφές μνήμες του συστήματος αρχείων στο δίσκο.
/etc/rc
ξεκινά το σύστημα εικονικής μνήμης. Το/private/var/vm
έχει ρυθμιστεί ως κατάλογος ανταλλαγής. Το/sbin/dynamic_pager ξεκινά με τα κατάλληλα ορίσματα (πρότυπο διαδρομής ονόματος αρχείου εναλλαγής, μέγεθος των αρχείων ανταλλαγής που δημιουργήθηκαν, ενεργοποιήσεις ειδοποίησης υψηλής και χαμηλής κατανάλωσης νερού που καθορίζουν πότε θα δημιουργηθεί πρόσθετη εναλλαγή αρχεία ή διαγράψτε τα υπάρχοντα).
/etc/rc
ξεκινά/usr/libexec/fix_prebindingγια να διορθώσετε εσφαλμένα προσδεδεμένα δυαδικά.
/etc/rc
εκτελεί/etc/rc.cleanupγια καθαρισμό και επαναφορά αρχείων και συσκευών.
/etc/rc
κυκλοφορεί τελικά το/sbin/SystemStarter
για χειρισμό στοιχείων εκκίνησης από τοποθεσίες όπως/System/Library/StartupItems
και/Library/StartupItems
Ένα StartupItem είναι ένα πρόγραμμα, συνήθως ένα σενάριο φλοιού, του οποίου το όνομα ταιριάζει με το όνομα του φακέλου. Ο φάκελος περιέχει ένα αρχείο λίστας ιδιοτήτων που περιέχει ζεύγη κλειδιών-τιμών όπωςDescription
,Provides
,Απαιτείται
,Προτίμηση παραγγελίας
, μηνύματα έναρξης/διακοπής κ.λπ. Μπορείτε να εκτελέσετεSystemStarter -n -D ως root για να έχετε το πρόγραμμα εκτύπωσης πληροφοριών εντοπισμού σφαλμάτων και εξάρτησης (χωρίς στην πραγματικότητα να εκτελείται τίποτα).
- Το στοιχείο εκκίνησης
CoreGraphics
ξεκινά τον δαίμονα Apple Type Services (ATSSserver
) καθώς και ο διακομιστής παραθύρου (WindowServer).
Και μετά γίνεται εκκίνηση του Mac σας!
Μπορείτε να δείτε μόνοι σας λίγη από αυτήν τη δραστηριότητα με τη λειτουργία Verbose Mode (την οποία μπορείτε να εκκινήσετε σε Verbose Mode ανά εκκίνηση ή μπορείτε ακόμη και να ρυθμίσετε ένα Mac ώστε να εκκινείται πάντα σε Verbose Mode εάν θέλετε να βλέπετε πάντα η εκκίνηση σε στυλ unix), αλλά αυτή είναι μια αρκετά λεπτομερής εξήγηση.
Η Apple διαθέτει επίσης κάποια τεκμηρίωση σχετικά με τη διαδικασία εκκίνησης Mac διαθέσιμη εδώ στη βιβλιοθήκη documentaiton προγραμματιστή της εδώ.
Σημειώστε ότι η αρχική διεύθυνση URL που παρέχει τις παραπάνω πληροφορίες δεν είναι πλέον ενεργή, επομένως η ανάρτηση έχει συμπεριληφθεί παραπάνω για μεταγενέστερους μέσω της προσωρινής μνήμης. Η αρχική πηγή ήταν ένα νήμα στο KernelThread στην ακόλουθη διεύθυνση url: http://www.kernelthread.com/mac/osx/arch_startup.html που είναι προς το παρόν εκτός σύνδεσης και δεν ανακατευθύνεται σε νέα τοποθεσία.
Αν έχετε κάποια στοιχεία ή άλλες προσθήκες να προσθέσετε στην ακολουθία εκκίνησης του Mac OS X, μοιραστείτε τα στα σχόλια!