18Aug

Proč neexistují žádné ID procesů Windows s lichým číslem?

Pokud máte rádi práci s Windows a učení se, jak jste vy, možná jste si všimli, že procesní a vláknové ID systému 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í otázka &Odpověď na zasedání se k nám dostala s laskavým svolením SuperUser - podřízenou výměnou Stack Exchange, skupině webů Q & A založených na komunitě.

Otázka

Čtenář SuperUser Peter Hahndorf chce vědět, proč neexistují liché 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ískávám 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ědka odpovědi

SuperUser DavidPostill má pro nás odpověď:

Proč neexistují liché ID procesů systému Windows?

Stejný kód, který přiděluje úchyty jádra, se také používá k přidělování identifikátorů procesů a podprocesů.Jelikož jádra jsou více než čtyři, tak se jedná o ID procesů a podprocesů.

Proč jsou ID procesů a podprocesů násobeny čtyřmi?

V operačních systémech se systémem Windows NT se ID procesů a podprocesů vždy jedná o násobek č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 proces Windows 95 a ID vlákna nebyly vždy násobky čtyř.Pro srovnání, důvod, proč jádro rukojeti jsou 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, tak se jedná o 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 vaši zvědavost.

Zdroj: Proč jsou ID procesů a podprocesů násobeny čtyřmi?

Proč jsou klíče jádra vždy násobkem čtyř?

Něco, co není příliš známé, je, ž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 jakýkoli jiný typ 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 úchyty jsou vždy nula je předpokládá funkce GetQueuedCompletionStatus, což naznačuje, že můžete nastavit spodní bit popisovače události potlačit oznámení o dokončení portu. Aby to fungovalo, spodní bit musí být normálně nulový.

Tato informace není užitečná pro většinu spisovatelů aplikací, které by měly zacházet jako s neprůsvitnými hodnotami. Lidé, kteří by se zajímali o tagy, jsou ti, kteří provádějí knihovny tříd nízké úrovně nebo zabírají 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 Raymond Chen( Hlavní inženýr designu softwaru na )

Musíte něco přidat k vysvětlení?Zní to 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.