Úvodná » ako » Prečo neexistujú žiadne procesné ID systému Windows s nepárnymi číslami?

    Prečo neexistujú žiadne procesné ID systému Windows s nepárnymi číslami?

    Ak máte záujem o to, aby ste prechádzali systémom Windows a učili sa tak, ako ste išli, 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á relácia otázok a odpovedí sa k nám pridelí zdvorilosťou SuperUser - podskupiny Stack Exchange, zoskupenia webových stránok typu Q & A.

    Otázka

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

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

    Mám tento výsledok:

    Ako môžete vidieť, 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 ID nepárneho procesu, aspoň nie na žiadnej verzii, ktorá je založená na systéme Windows NT. Aký je dôvod pre to?

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

    Odpoveď

    Dodávateľ služby SuperUser 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, slúži aj na prideľovanie identifikátorov procesov a vlákien. Keďže kľučky jadra sú násobkom štyroch, ide o ID procesov a vlákien.

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

    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 proces Windows 95 a ID vlákien neboli vždy násobky štyroch. Na porovnanie, dôvodom, 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ý prideľuje kľučky jadra, slúži aj na prideľovanie identifikátorov procesov a vlákien. Keďže kľučky jadra sú násobky štyroch, tak ide o ID procesov a vlákien. Toto je detaily 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, spočíva v tom, ž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 prejsť 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 ručičky udalosti na potlačenie upozornenia na dokončenie portu. Aby to fungovalo, spodný bit musí normálne byť 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 neprístupné 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

    The Old New Thing: Praktický vývoj v priebehu vývoja Windows od Raymonda Chena (Hlavný inžinier softvéru v spoločnosti Microsoft)


    Máte niečo doplniť vysvetlenie? Znie to v komentároch. Chcete sa dozvedieť viac odpovedí od iných používateľov technickej úrovne Stack Exchange? Pozrite sa na celý diskusný príspevok tu.