18Aug

Prečo neexistujú žiadne ID procesov Windows s nepárnymi číslami?

Ak máte záujem o prechádzanie s Windows a učiť sa za sebou, možno ste si všimli, že ID procesov a vlákien Windows sú sudé a násobky štyroch. Prečo to je? Dnešný príspevok SuperUser Q & A má odpovede na otázky zvedavého čitateľa.

Dnešná otázka &Odpoveď na zasadnutie nám príde s láskavým dovolením SuperUser - subdivíziu Stack Exchange, komunitne riadeného zoskupenia webových stránok Q & A.

Otázka

čítačka SuperUser Peter Hahndorf chce vedieť, prečo neexistujú nepárne ID procesov systému Windows:

Existuje veľa spôsobov, ako sa pozrieť na ID procesu v systéme Windows. Použitie PowerShell:

Získam tento výsledok:

Ako vidíte, všetky ID procesov sú sudé, nielen to, že sú všetky násobky štyroch. Môžete vyzerať tak ťažko, ako chcete, a nikdy nenájdete nepárny proces ID, aspoň nie na žiadnej verzii, ktorá je založená na Windows NT.Aký je dôvod pre to?

Prečo neexistujú žiadne nepárne ID procesov systému Windows?

Odpoveď

SuperUser prispievateľ DavidPostill má pre nás odpoveď:

Prečo neexistujú žiadne nepárne ID procesov systému Windows?

Rovnaký kód, ktorý prideľuje kľučky jadra, sa tiež používa na priradenie identifikátorov procesov a vlákien. Keďže kľučky jadra sú násobkom štyroch, ide o identifikátory procesov a vlákien.

Prečo sú ID procesov a vlákien násobky štyroch?

V operačných systémoch so systémom Windows NT sa identifikácia procesov a vlákien vždy stáva násobkom štyroch. Je to len náhoda?

Áno, je to len náhoda a nemali by ste sa na ňu spoliehať, pretože nie je súčasťou programovej zmluvy. Napríklad ID procesov a vlákien systému Windows 95 neboli vždy násobky štyroch. Pre porovnanie, dôvod, prečo sú jadrá rukoväte vždy násobkom štyroch, je súčasťou špecifikácie a bude zaručené v dohľadnej budúcnosti.

ID procesov a vlákien sú násobky štyroch ako vedľajší účinok opätovného použitia kódu. Rovnaký kód, ktorý alokuje úchytky jadra, sa používa aj na prideľovanie identifikátorov procesov a vlákien. Keďže kľučky jadra sú násobky štyroch, ide o identifikátory procesov a vlákien. Toto je detail implementácie, takže nepíšte kód, ktorý sa na ne spolieha. Len vám poviem, aby ste uspokojili vašu zvedavosť.

Zdroj: Prečo sú identifikátory procesov a vlákien násobené štyrmi?

Prečo sú kľučky jadra vždy násobkom štyroch?

Niečo, čo nie je veľmi dobre známe, je, že spodné dva kúsky jadra kľuky sú vždy nula;inými slovami, ich číselná hodnota je vždy násobkom štyroch. Upozorňujeme, že toto platí len pre kľučky jadra;nevzťahuje sa na pseudo-rukoväte ani na žiadny iný typ rukoväte( rukoväti USER, rukoväte GDI, multimediálne kľučky atď.).Držadlá jadra sú veci, ktoré môžete preniesť na funkciu CloseHandle.

To, že najmenej spodný bit jadra kľučky sú vždy nula je implikovaná funkciou GetQueuedCompletionStatus, čo naznačuje, že môžete nastaviť spodný bit rukoväte udalosti na potlačenie oznámenia dokončenia portu. Ak to funguje, spodný bit musí byť normálne nulový.

Táto informácia nie je užitočná pre väčšinu spisovateľov aplikácií, ktoré by mali naďalej zaobchádzať s úchytmi ako nepriehľadné hodnoty.Ľudia, ktorí by sa zaujímali o tagy bitov, sú tí, ktorí implementujú knižnice triedy nízkej úrovne alebo združujú objekty jadra vo väčšom rámci.

Zdroj: Prečo sú kľučky jadra vždy násobkom štyroch?

Ďalšie čítanie

Stará nová vec: Praktický vývoj v priebehu vývoja systému Windows Raymond Chen( hlavný inžinier pre návrh softvéru na )

Máte niečo doplniť vysvetlenie? Znížte komentáre. Chcete si prečítať viac odpovedí od iných používateľov technológie Stack Exchange? Pozrite sa na celý diskusný príspevok tu.