Proč neexistují žádné ID procesů Windows s lichým číslem?
Pokud máte rádi práci s Windows a učíte se tak, jak jste vy, můžete si všimnout, že ID procesů a podprocesů Windows jsou sudé a násobky čtyř. Proč je to tak? Dnešní příspěvek SuperUser Q & A má odpovědi na zvědavé čtenářské otázky.
Dnešní zasedání Otázky a odpovědi nás přichází s laskavým svolením SuperUser - podřízené rozdělení Stack Exchange, které je založeno na komunitě prostřednictvím skupin webových stránek.
Otázka
Čtenář SuperUser Peter Hahndorf chce vědět, proč neexistují nepatrné ID procesů systému Windows:
Existuje mnoho způsobů, jak se podívat na procesní ID v systému Windows. Použití funkce PowerShell:
Získal jsem tento výsledek:
Jak je vidět, všechny ID procesů jsou sudé, nejen to, že jsou všechny násobky čtyř. Můžete vypadat tak tvrdě, jak chcete, a nikdy nenajdete ID nepárného procesu, přinejmenším ne na žádné verzi, která je založena na systému Windows NT. Jaký je důvod pro to?
Proč neexistují liché ID procesů systému Windows??
Odpověď
Příspěvek SuperUser DavidPostill má pro nás odpověď:
Proč neexistují liché ID procesů systému Windows??
Stejný kód, který přiděluje jádra klíče, se také používá k přidělování identifikátorů procesů a podprocesů. Jelikož jádra jsou více než čtyřnásobná, jsou to ID procesů a podprocesů.
Proč jsou identifikátory procesů a podprocesů násobeny čtyřmi?
V operačních systémech se systémem Windows NT jsou ID procesů a podprocesů vždy násobkem čtyř. Je to jen náhoda?
Ano, je to jen náhoda a neměli byste se na ně spoléhat, protože to není součástí programovací smlouvy. Například ID procesů a podprocesů systému Windows 95 nebyly vždy násobky čtyř. Pro srovnání, důvod, proč jsou jádro rukojeti vždy násobkem čtyř, je součástí specifikace a bude zaručeno v dohledné budoucnosti.
ID procesů a podprocesů jsou násobky čtyř znaků jako vedlejší účinek opakovaného použití kódu. Stejný kód, který přiděluje jádra klíče, se také používá k přidělování identifikátorů procesů a podprocesů. Jelikož jsou jádra klíče násobena čtyřmi, jsou to ID procesů a podprocesů. Jedná se o detaily implementace, takže nepíšte kód, který se na ně spoléhá. Jen vám říkám, abyste uspokojili svou zvědavost.
Zdroj: Proč jsou identifikátory procesů a podprocesů násobeny čtyřmi?
Proč jsou klíče jádra vždy násobkem čtyř?
Něco, které není příliš známé, spočívá v tom, že spodní dva bity jaderných úchytů jsou vždy nulové; jinými slovy, jejich číselná hodnota je vždy násobkem čtyř. Všimněte si, že to platí pouze pro jádra jádra; nevztahuje se na pseudo-rukojeti ani na žádný jiný druh rukojeti (rukojeti USER, rukojeti GDI, multimediální rukojeti atd.). Jádra jádra jsou věci, které můžete předat funkci CloseHandle.
To, že minimálně spodní bit jádra úchytů je vždy nula, vyplývá z funkce GetQueuedCompletionStatus, což znamená, že můžete nastavit spodní bit popisovače událostí k potlačení oznámení o dokončení portu. Aby to fungovalo, musí být spodní bit normálně nulový.
Tato informace není užitečná pro většinu spisovatelů aplikací, které by měly zacházet s úchyty jako neprůsvitné hodnoty. Lidé, kteří by se zajímali o tagy, jsou ti, kteří provádějí knihovny tříd nízké úrovně nebo obklopují objekty jádra uvnitř většího rámce.
Zdroj: Proč jsou klíče jádra vždy násobkem čtyř?
Další čtení
Stará novinka: Praktický vývoj v průběhu vývoje Windows Raymonem Chenem (Hlavní inženýr designu softwaru společnosti Microsoft).
Musíte něco přidat k vysvětlení? Vyjměte v komentářích. Chcete se dozvědět více odpovědí od ostatních uživatelů technologie Stack Exchange? Podívejte se na celý diskusní příspěvek zde.