Miért nincsenek páratlan számú Windows folyamatazonosítók?
Ha szereted a Windows-t és a tanulást, ahogyan megy, akkor észrevehette, hogy a Windows folyamat és szál azonosítók párosak és négyszeresek. Miért van az, hogy? A mai SuperUser Q&A postai válaszok egy furcsa olvasó kérdéseire.
A mai Kérdések és válaszok munkamenet a Jóvagyon - a Stack Exchange alosztályának, a közösség által vezérelt Q&A webhelyek csoportjának köszönhetően..
A kérdés
A SuperUser olvasó, Peter Hahndorf tudni akarja, hogy miért nincsenek páratlan számú Windows folyamatazonosítók:
Számos módja van annak, hogy a Windows rendszerprofiljait megnézhesse. A PowerShell használata:
Ezt az eredményt kapom:
Mint látható, az összes folyamatazonosító páros, nem csak az, hogy mindegyik négyszeres. Olyan keményen nézhet ki, amennyit csak akar, és soha nem talál egy páratlan számú folyamatazonosítót, legalábbis nem olyan verzióra, amely Windows NT alapú. Mi az oka ennek?
Miért nincsenek páratlan számú Windows folyamatazonosítók?
A válasz
A DavidLinkill SuperUser közreműködője válaszol nekünk:
Miért nincsenek páratlan számú Windows folyamatazonosítók?
Ugyanez a kód, amely kernelfogantyúkat rendel, a folyamat és a menetazonosítók elosztására is szolgál. Mivel a rendszermag kezelői négyszeresek, így a folyamat és a menetazonosítók is.
Miért van a folyamat és a szál azonosítója négyszerese?
Windows NT alapú operációs rendszereken a folyamat- és szálazonosítók mindig négyszeresek. Ez csak egybeesés?
Igen, ez csak egybeesés, és nem szabad erre támaszkodnia, mivel ez nem része a programozási szerződésnek. Például a Windows 95 folyamat és szálazonosítók nem mindig négyszeresek voltak. Összehasonlításképpen, az a körülmény, hogy a kernelfogantyúk mindig négyszeresek, része a specifikációnak és garantált lesz a közeljövőben.
A folyamat- és szálazonosítók négyszeres többszöröse a kód újrafelhasználásának mellékhatásaként. Ugyanez a kód, amely kernelfogantyúkat rendel, a folyamat és a menetazonosítók elosztására is szolgál. Mivel a rendszermag kezelői négyszeresek, így a folyamat és a menetazonosítók is. Ez egy végrehajtási részlet, ezért ne írjon olyan kódot, amelyre támaszkodik. Csak azt mondom nektek, hogy kielégítse kíváncsiságát.
Forrás: Miért van a folyamat és a szál azonosítója négyszerese?
Miért kezeli a kernel mindig négyszeresét?
Valami, ami nem nagyon ismert, az, hogy a kernelfogók két alsó bitje mindig nulla; Más szóval, számértékük mindig négyszeres. Ne feledje, hogy ez csak a kernel fogantyúira vonatkozik; ez nem vonatkozik a pszeudo-fogantyúkra vagy más típusú fogantyúkra (USER fogantyúk, GDI fogantyúk, multimédiás fogantyúk stb.). A kernel fogantyúk olyan dolgok, amelyeket át lehet vinni a CloseHandle funkcióhoz.
Az, hogy legalább a kernelfogantyúk alsó bitje mindig nulla, a GetQueuedCompletionStatus függvény, amely azt jelzi, hogy beállíthatja az eseményfogantyú alsó részét, hogy elnyomja a kikötői értesítés befejezését. Ahhoz, hogy ez működjön, az alsó bitnek általában nullának kell lennie.
Ez az információ nem hasznos a legtöbb alkalmazásíró számára, amely továbbra is kezeli a fogantyúkat átlátszatlan értékként. Azok, akiket érdeklődnek a címke bitek, azok, akik alacsony szintű osztálykönyvtárakat hajtanak végre, vagy a kernel objektumokat egy nagyobb keretbe csomagolják.
Forrás: Miért kezeli a kernel mindig négyszeresét?
További irodalom
A régi új dolog: gyakorlati fejlesztés a Windows fejlesztése során Raymond Chen (A Microsoft fő szoftverfejlesztő mérnöke)
Van valami, amit hozzá kell adni a magyarázathoz? Kikapcsolja a megjegyzéseket. Szeretne további válaszokat olvasni más tech-savvy Stack Exchange felhasználóktól? Nézze meg a teljes beszélgetés szálát itt.