Αρχική σελίδα » πως να » Γιατί δεν υπάρχουν αριθμητικά στοιχεία διαδικασιών παράξενων αριθμών των Windows;

    Γιατί δεν υπάρχουν αριθμητικά στοιχεία διαδικασιών παράξενων αριθμών των Windows;

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

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

    Το ερώτημα

    Ο αναγνώστης του SuperUser Peter Hahndorf θέλει να μάθει γιατί δεν υπάρχουν παράμετροι επεξεργασίας παράξενων αριθμών των Windows:

    Υπάρχουν πολλοί τρόποι για να δείτε τα αναγνωριστικά διαδικασίας στα Windows. Χρήση του PowerShell:

    Παίρνω αυτό το αποτέλεσμα:

    Όπως μπορείτε να δείτε, όλα τα αναγνωριστικά διαδικασίας είναι αβαθή, όχι μόνο ότι είναι όλα πολλαπλάσια των τεσσάρων. Μπορείτε να δούμε τόσο σκληρά όσο θέλετε και ποτέ δεν θα βρείτε ένα ID περιγράμματος με περιττές αριθμήσεις, τουλάχιστον όχι σε οποιαδήποτε έκδοση που βασίζεται στα Windows NT. Ποιος είναι ο λόγος για αυτό?

    Γιατί δεν υπάρχουν παράμετροι επεξεργασίας παράξενων αριθμών των Windows?

    Η απάντηση

    Ο συνδρομητής του SuperUser DavidPostill έχει την απάντηση για εμάς:

    Γιατί δεν υπάρχουν παράμετροι επεξεργασίας παράξενων αριθμών των Windows?

    Ο ίδιος κώδικας που εκχωρεί τις λαβές του πυρήνα χρησιμοποιείται επίσης για την κατανομή αναγνωριστικών διαδικασίας και νήματος. Δεδομένου ότι οι λαβές του πυρήνα είναι πολλαπλάσιες των τεσσάρων, οι ταυτότητες διεργασίας και νήματος.

    Γιατί τα αναγνωριστικά διεργασίας και τα νήματα πολλαπλασιάζονται με τέσσερα?

    Στα λειτουργικά συστήματα που βασίζονται στα Windows NT, τα αναγνωριστικά διεργασίας και τα νήματα είναι πάντα ένα πολλαπλάσιο των τεσσάρων. Είναι απλά μια σύμπτωση?

    Ναι, είναι απλώς μια σύμπτωση και δεν πρέπει να το επικαλεστείτε επειδή δεν αποτελεί μέρος της σύμβασης προγραμματισμού. Για παράδειγμα, η διαδικασία των Windows 95 και τα αναγνωριστικά νήματος δεν ήταν πάντα πολλαπλάσια των τεσσάρων. Συγκριτικά, ο λόγος που οι λαβές του πυρήνα είναι πάντοτε πολλαπλάσιο των τεσσάρων είναι μέρος των προδιαγραφών και θα εγγυηθούν για το προβλέψιμο μέλλον.

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

    Πηγή: Γιατί τα αναγνωριστικά διεργασίας και τα νήματα πολλαπλασιάζονται με τέσσερα?

    Γιατί οι λαβές του πυρήνα είναι πάντα ένα πολλαπλάσιο των τεσσάρων?

    Κάτι που δεν είναι πολύ γνωστό είναι ότι τα κάτω δύο κομμάτια των λαβών του πυρήνα είναι πάντα μηδέν. με άλλα λόγια, η αριθμητική αξία τους είναι πάντα πολλαπλάσια των τεσσάρων. Σημειώστε ότι αυτό ισχύει μόνο για τις λαβές του πυρήνα. Δεν ισχύει για ψευδο-λαβές ή για οποιοδήποτε άλλο χειρισμό (χειρολαβές USER, λαβές GDI, λαβές πολυμέσων κλπ.). Οι λαβές του πυρήνα είναι πράγματα που μπορείτε να περάσετε στη λειτουργία CloseHandle.

    Ότι τουλάχιστον το κάτω κομμάτι των λαβών του πυρήνα είναι πάντα μηδέν υπονοείται από τη συνάρτηση GetQueuedCompletionStatus, η οποία δείχνει ότι μπορείτε να ορίσετε το κάτω bit της λαβής συμβάντος για να καταστείλει την ειδοποίηση ολοκλήρωσης θύρας. Για να λειτουργήσει αυτό, το κάτω τμήμα πρέπει κανονικά να είναι μηδέν.

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

    Πηγή: Γιατί οι λαβές του πυρήνα είναι πάντα ένα πολλαπλάσιο των τεσσάρων?

    Περαιτέρω ανάγνωση

    Το παλιό νέο πράγμα: Πρακτική ανάπτυξη καθ 'όλη την εξέλιξη των Windows από τον Raymond Chen (Κύριος Μηχανικός Σχεδιασμού Λογισμικού στη Microsoft)


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