18Aug

De ce nu există Id-uri de proces Windows cu numere impare?

click fraud protection

Dacă vă placeți tinkering cu Windows și de învățare ca te duci, ați observat că ID-ul procesului Windows și thread-ul sunt numerotate în par și multipli de patru. De ce este asta? Postul de astăzi SuperUser Q & A are răspunsurile la întrebările curioase ale unui cititor.

Întrebarea de astăzi &Sesiunea de răspuns vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.

Întrebarea Întrebarea

SuperUser cititorul Peter Hahndorf dorește să știe de ce nu există numere impare de procesare Windows:

Există mai multe moduri de a privi ID-urile de proces în Windows. Folosind PowerShell:

Obțineți acest rezultat:

După cum puteți vedea, toate ID-urile proceselor sunt numerotate în par, nu numai că acestea sunt toate multipli de patru. Puteți arăta la fel de mult cum doriți și nu veți găsi niciodată un ID de proces numit impar, cel puțin nu pe nici o versiune care este bazată pe Windows NT.Care este motivul pentru aceasta?

instagram viewer

De ce nu există ID-uri de procesare cu numere impare?

Răspunsul

contribuitor al SuperUser DavidPostill are răspunsul pentru noi:

De ce nu există numere de proces Windows cu numere impare?

Același cod care alocă mânerele kernelului este, de asemenea, utilizat pentru alocarea ID-urilor de proces și thread. Din moment ce mânerele kernel-ului sunt multipli de patru, identitatea proceselor și a thread-ului.

De ce ID-urile proceselor și thread-urilor sunt multipli de patru?

În sistemele de operare bazate pe Windows NT, ID-urile proceselor și thread-urilor se întâmplă întotdeauna să fie mai multe decât patru. E doar o coincidență?

Da, este doar o coincidență și nu trebuie să vă bazați pe ea deoarece nu face parte din contractul de programare. De exemplu, ID-urile proceselor Windows 95 și thread-urile nu au fost întotdeauna multiplii de patru. Prin comparație, motivul pentru care mânerele kernelului sunt întotdeauna un multiplu de patru, face parte din specificație și vor fi garantate pentru viitorul previzibil.

ID-urile proceselor și thread-urilor sunt multiplii de patru ca efect secundar al reutilizării codului. Același cod care alocă mânerele kernelului este, de asemenea, utilizat pentru a aloca ID-urile de proces și de fire. Deoarece mânerele kernel-ului sunt multiplii de câte patru, identitatea procesului și a thread-ului. Acesta este un detaliu al implementării, deci nu scrieți cod care se bazează pe acesta.Îți spun doar să îți satisfaci curiozitatea.

Sursa: De ce ID-urile procesului și thread-ului sunt multipli de patru?

De ce sunt mânerele kernelului întotdeauna un multiplu de patru?

Ceva care nu este foarte bine cunoscut este că cei doi biți de bază ai miezurilor kernel-ului sunt întotdeauna zero;cu alte cuvinte, valoarea lor numerică este întotdeauna un multiplu de patru. Rețineți că acest lucru se aplică numai mânerelor kernel-ului;nu se aplică pseudo-mânerelor sau altor tipuri de mâner( manere USER, mânere GDI, mânere multimedia etc.).Mânerele de kernel sunt lucruri pe care le puteți trece la funcția CloseHandle.

Că cel puțin bitul inferior al mânerelor kernelului este întotdeauna zero este impus de funcția GetQueuedCompletionStatus, ceea ce indică faptul că puteți seta bitul inferior al mânerului evenimentului pentru a suprima notificarea portului de finalizare. Pentru ca aceasta să funcționeze, bitul inferior trebuie în mod normal să fie zero.

Aceste informații nu sunt utile pentru majoritatea scriitorilor de aplicații, care ar trebui să continue tratarea mânerelor ca valori opace. Persoanele care ar fi interesate de biți tag-uri sunt cei care implementează biblioteci de clasă de nivel inferior sau împachetează obiecte kernel într-un cadru mai larg.

Sursa: De ce sunt mânerele kernelului întotdeauna un multiplu de patru?

Reading în continuare

Lucrul Vechi Nou: Dezvoltarea practică pe tot parcursul evoluției Windows de Raymond Chen( Principal Inginer de Software Design la Microsoft )

Aveți ceva de adăugat la explicație? Sunați în comentarii. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.