Αρχική σελίδα » πως να » Γιατί οι επεξεργαστές x86 χρησιμοποιούν μόνο δύο από τέσσερις δακτυλίους;

    Γιατί οι επεξεργαστές x86 χρησιμοποιούν μόνο δύο από τέσσερις δακτυλίους;

    Όταν μάθετε περισσότερα σχετικά με το πώς τα λειτουργικά συστήματα και το υλικό που λειτουργούν λειτουργούν και αλληλεπιδρούν μεταξύ τους, μπορεί να εκπλαγείτε να δείτε τι φαίνεται να είναι περίεργο ή υπολειτουργία των «πόρων» που συμβαίνουν. Γιατί αυτό? Η σημερινή θέση SuperUser Q & A έχει την απάντηση σε μια ερώτηση περίεργου αναγνώστη.

    Η σημερινή συνάντηση ερωτήσεων και απαντήσεων έρχεται σε επαφή με το SuperUser - μια υποδιαίρεση του Stack Exchange, μια κοινότητα που κατευθύνεται από τους ιστότοπους ερωτήσεων & απαντήσεων.

    Φωτογραφία ευγενική προσφορά της Lemsipmatt (Flickr).

    Το ερώτημα

    Ο αναγνώστης SuperUser AdHominem θέλει να μάθει γιατί οι CPU x86 χρησιμοποιούν μόνο δύο από τους τέσσερις δακτυλίους:

    Τα συστήματα x86 που βασίζονται σε Linux και Windows χρησιμοποιούν μόνο Δακτύλιος 0 για λειτουργία πυρήνα και Δακτύλιος 3 για τη λειτουργία χρήστη. Γιατί οι επεξεργαστές διακρίνουν ακόμη και τέσσερις διαφορετικούς δακτυλίους αν όλα καταλήγουν να χρησιμοποιούν μόνο δύο από αυτά ούτως ή άλλως; Αυτό έχει αλλάξει με την αρχιτεκτονική AMD64?

    Γιατί οι επεξεργαστές x86 χρησιμοποιούν μόνο δύο από τα τέσσερα κουδουνίσματα?

    Η απάντηση

    Ο συνεργάτης SuperUser Jamie Hanrahan έχει την απάντηση για εμάς:

    Υπάρχουν δύο κύριοι λόγοι.

    Το πρώτο είναι ότι, παρόλο που οι επεξεργαστές x86 προσφέρουν τέσσερις προστασία δακτυλίων μνήμης, ο βαθμός προστασίας που τους προσφέρεται είναι μόνο σε επίπεδο ανά τομέα. Δηλαδή, κάθε τμήμα μπορεί να ρυθμιστεί σε ένα συγκεκριμένο δακτύλιο (επίπεδο προνομίων) μαζί με άλλες προστασίες όπως η απενεργοποίηση εγγραφής. Αλλά δεν υπάρχουν αρκετοί περιγραφείς τομέων διαθέσιμοι. Τα περισσότερα λειτουργικά συστήματα θα ήθελαν να έχουν μια πολύ λεπτότερη προστασία από τη μνήμη, όπως ... για μεμονωμένες σελίδες.

    Έτσι, εισάγετε την προστασία βάσει πίνακα. Τα περισσότερα, αν όχι όλα, σύγχρονα λειτουργικά συστήματα x86 παραβλέπουν λίγο ή πολύ τον μηχανισμό διαχωρισμού (όσο μπορούν ούτως ή άλλως) και βασίζονται στην προστασία που παρέχεται από τα bits χαμηλής τάξης στις καταχωρήσεις του πίνακα σελίδων. Ένα από αυτά ονομάζεται το "προνομιούχο" κομμάτι. Αυτό το bit ελέγχει αν ο επεξεργαστής πρέπει να είναι σε ένα από τα "προνομιούχα" επίπεδα για να αποκτήσει πρόσβαση στη σελίδα. Τα "προνομιούχα" επίπεδα είναι PL 0, 1 και 2. Αλλά είναι μόνο ένα κομμάτι, έτσι στο επίπεδο προστασίας ανά σελίδα, ο αριθμός των "διαθέσιμων" τρόπων που αφορούν την προστασία μνήμης είναι μόνο δύο: Μια σελίδα μπορεί να είναι προσβάσιμη από μη προνομιούχο τρόπο λειτουργίας ή όχι. Ως εκ τούτου, μόλις δύο δακτύλιοι. Για να έχουν τέσσερις δυνατούς δακτυλίους για κάθε σελίδα, θα έπρεπε να έχουν δύο bit προστασίας σε κάθε καταχώρηση πίνακα σελίδων για να κωδικοποιήσουν έναν από τους τέσσερις δυνατούς αριθμούς δακτυλίων (ακριβώς όπως και οι περιγραφείς τμήματος). Ωστόσο, δεν το κάνουν.

    Ο άλλος λόγος είναι η επιθυμία για φορητότητα του λειτουργικού συστήματος. Δεν είναι μόνο x86? Το Unix μας δίδαξε ότι ένα λειτουργικό σύστημα θα μπορούσε να είναι σχετικά φορητό σε πολλές αρχιτεκτονικές επεξεργαστών και ότι ήταν καλό. Και ορισμένοι επεξεργαστές υποστηρίζουν μόνο δύο δακτυλίους. Χωρίς να εξαρτάται από τους πολλούς δακτυλίους της αρχιτεκτονικής, οι εκτελεστές του λειτουργικού συστήματος καθιστούν τα λειτουργικά συστήματα πιο φορητά.

    Υπάρχει ένας τρίτος λόγος που είναι συγκεκριμένος για την ανάπτυξη των Windows NT. Οι σχεδιαστές της ΝΤ (David Cutler και η ομάδα του, τις οποίες η Microsoft προσέλαβε από την DEC Western Lab Labs) είχε εκτεταμένη εμπειρία στο VMS. Στην πραγματικότητα, ο Cutler και μερικοί από τους άλλους ήταν μεταξύ των αρχικών σχεδιαστών του VMS. Και ο επεξεργαστής VAX για τον οποίο σχεδιάστηκε το VMS έχει τέσσερις δακτυλίους (το VMS χρησιμοποιεί τέσσερις δακτυλίους).

    Αλλά τα στοιχεία που έτρεξαν σε VMS του Δακτύλιοι 1 και 2 (Record Management Services και CLI, αντίστοιχα) απομακρύνθηκαν από το σχεδιασμό NT. Δακτύλιος 2 στο VMS δεν αφορούσε πραγματικά την ασφάλεια του λειτουργικού συστήματος, αλλά μάλλον για τη διατήρηση του περιβάλλοντος CLI του χρήστη από το ένα πρόγραμμα στο άλλο και τα Windows δεν είχαν αυτή την έννοια. ο CLI λειτουργεί ως συνηθισμένη διαδικασία. Όσο για το VMS Δακτύλιος 1, τον κωδικό RMS στο Δακτύλιος 1 έπρεπε να καλέσει Δακτύλιος 0 αρκετά συχνά, και οι μεταβάσεις δακτυλίων είναι δαπανηρές. Αποδείχθηκε ότι ήταν πολύ πιο αποτελεσματικό να πάει κανείς Δακτύλιος 0 και να γίνει με αυτό αντί να έχουν πολλά Δακτύλιος 0 μεταβάσεις μέσα στο Δακτύλιος 1 κώδικα (και πάλι, όχι ότι το NT έχει κάτι σαν RMS ούτως ή άλλως).

    Όσον αφορά το γιατί το x86 υλοποίησε τέσσερις δακτυλίους ενώ τα λειτουργικά συστήματα δεν τα χρησιμοποίησαν, μιλάτε για λειτουργικά συστήματα πολύ πιο πρόσφατου σχεδιασμού από το x86. Πολλά από τα χαρακτηριστικά γνωρίσματα προγραμματισμού του συστήματος x86 σχεδιάστηκαν πολύ πριν εφαρμοστούν NT ή πραγματικοί πυρήνες Unix-ish και δεν γνώριζαν τι θα χρησιμοποιούσε το λειτουργικό σύστημα. Δεν ήταν μέχρι που πήραμε paging στο x86 ότι θα μπορούσαμε να εφαρμόσουμε true πυρήνες Unix-ish ή VMS.

    Όχι μόνο τα σύγχρονα λειτουργικά συστήματα x86 αγνοούν σε μεγάλο βαθμό την κατάτμηση (απλώς δημιουργούν τα τμήματα C, D και S με μια διεύθυνση βάσης 0 και μέγεθος 4 GB · τα τμήματα F και G χρησιμοποιούνται μερικές φορές για την επισήμανση των δομών δεδομένων του λειτουργικού συστήματος ), αγνοούν επίσης σε μεγάλο βαθμό πράγματα όπως "τμήματα κρατικών εργασιών". Ο μηχανισμός TSS σχεδιάστηκε σαφώς για την εναλλαγή πλαισίων νήματος, αλλά αποδεικνύεται ότι έχει πάρα πολλές παρενέργειες, έτσι τα σύγχρονα λειτουργικά συστήματα x86 το κάνουν "με το χέρι". Η μοναδική φορά που το x86 NT αλλάζει εργασίες του υλικού είναι για ορισμένες πραγματικά εξαιρετικές συνθήκες, όπως μια εξαίρεση διπλού σφάλματος.

    Όσον αφορά την αρχιτεκτονική x64, πολλά από αυτά τα αχρησιμοποίητα χαρακτηριστικά είχαν αποκλειστεί. Για την πίστη τους, η AMD μίλησε πραγματικά με τις ομάδες του πυρήνα του λειτουργικού συστήματος και ρώτησε τι χρειάζονταν από το x86, τι δεν χρειάζονταν ή δεν ήθελαν και τι θα ήθελαν να προσθέσουν. Τα τμήματα στο x64 υπάρχουν μόνο σε αυτό που μπορεί να ονομαστεί τύπος υποβάθρου, η αλλαγή της κατάστασης εργασίας δεν υπάρχει κ.λπ. και τα λειτουργικά συστήματα συνεχίζουν να χρησιμοποιούν μόνο δύο δακτυλίους.


    Έχετε κάτι να προσθέσετε στην εξήγηση; Απενεργοποιήστε τα σχόλια. Θέλετε να διαβάσετε περισσότερες απαντήσεις από άλλους τεχνολογικούς χρήστες Stack Exchange; Δείτε το πλήρες νήμα συζήτησης εδώ.