18Aug
Si vous aimez bricoler avec Windows et apprendre au fur et à mesure, vous avez peut-être remarqué que les identificateurs de processus et de thread Windows sont pairs et multiples de quatre. Pourquoi donc? Le SuperUser Q & A d'aujourd'hui a les réponses aux questions d'un lecteur curieux.
Question d'aujourd'hui &La session de réponse nous est offerte par SuperUser, une subdivision de Stack Exchange, un regroupement communautaire de sites Web Q & A.
La question Lecteur
SuperUser Peter Hahndorf veut savoir pourquoi il n'y a pas d'ID de processus Windows impairs:
Il y a plusieurs façons de regarder les identifiants de processus dans Windows. Utilisation de PowerShell:
J'obtiens ce résultat:
Comme vous pouvez le voir, tous les identifiants de processus ont un numéro pair, et pas seulement cela, ils sont tous des multiples de quatre. Vous pouvez regarder aussi fort que vous voulez et vous ne trouverez jamais un ID de processus impairs, du moins pas sur une version basée sur Windows NT.Quelle est la raison pour ça?
Pourquoi n'y a-t-il pas d'ID de processus Windows impairs?
La réponse
SuperUser contributeur DavidPostill a la réponse pour nous:
Pourquoi n'y a-t-il pas d'ID de processus Windows impairs?
Le même code qui alloue les poignées de noyau est également utilisé pour allouer les ID de processus et de threads.Étant donné que les poignées du noyau sont un multiple de quatre, les identificateurs de processus et de threads le sont également.
Pourquoi les ID de processus et de thread sont-ils multiples de quatre?
Sur les systèmes d'exploitation basés sur Windows NT, les ID de processus et de thread se présentent toujours comme un multiple de quatre. Est-ce juste une coïncidence?
Oui, c'est juste une coïncidence, et vous ne devriez pas compter dessus puisque cela ne fait pas partie du contrat de programmation. Par exemple, les identifiants de processus et de thread Windows 95 n'étaient pas toujours des multiples de quatre. Par comparaison, la raison pour laquelle les poignées de noyau sont toujours un multiple de quatre fait partie de la spécification et sera garantie dans un avenir prévisible.
Les ID de processus et de thread sont des multiples de quatre comme effet secondaire de la réutilisation du code. Le même code qui alloue les poignées de noyau est également utilisé pour allouer les ID de processus et de threads.Étant donné que les poignées du noyau sont des multiples de quatre, les identificateurs de processus et de threads le sont également. C'est un détail d'implémentation, donc n'écrivez pas de code qui en dépend. Je vous dis juste de satisfaire votre curiosité.
Source: Pourquoi les ID de processus et de threads sont-ils multiples de quatre?
Pourquoi les poignées du noyau sont-elles toujours un multiple de quatre?
Quelque chose qui n'est pas très connu est que les deux derniers bits des poignées du noyau sont toujours à zéro;en d'autres termes, leur valeur numérique est toujours un multiple de quatre. Notez que ceci s'applique seulement aux poignées de noyau;il ne s'applique pas aux pseudo-handles ou à tout autre type de handle( poignées USER, poignées GDI, poignées multimédias, etc.).Les poignées du noyau sont des choses que vous pouvez transmettre à la fonction CloseHandle.
Au moins le dernier bit des poignées du noyau est toujours nul est impliqué par la fonction GetQueuedCompletionStatus, qui indique que vous pouvez définir le bit du bas du handle d'événement pour supprimer la notification de port d'achèvement. Pour que cela fonctionne, le bit du bas doit normalement être nul.
Cette information n'est pas utile pour la plupart des rédacteurs d'applications, qui devraient continuer à traiter les poignées comme des valeurs opaques. Les gens qui seraient intéressés par les bits de balises sont ceux qui implémentent des bibliothèques de classes de bas niveau ou qui enveloppent des objets de noyau dans un cadre plus large.
Source: Pourquoi le noyau gère-t-il toujours un multiple de quatre?
Lectures complémentaires
L'ancienne nouvelle chose: un développement pratique tout au long de l'évolution de Windows par Raymond Chen( ingénieur de conception logiciel chez Microsoft )
Avez-vous quelque chose à ajouter à l'explication? Sonnez dans les commentaires. Vous voulez lire plus de réponses d'autres utilisateurs de Stack Exchange? Découvrez le fil de discussion complet ici.