Τι συμβαίνει στη διαδικασία εκκίνησης του Mac OS X;

Anonim

Αναρωτηθήκατε ποτέ τι συμβαίνει κατά τη διαδικασία εκκίνησης και εκκίνησης του 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, μοιραστείτε τα στα σχόλια!

Τι συμβαίνει στη διαδικασία εκκίνησης του Mac OS X;