18Aug

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

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

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

Η ερώτηση

Ο αναγνώστης 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;Δείτε το πλήρες νήμα συζήτησης εδώ.