Zakaj nimajo ID-jev procesov Windows?
Če vam je všeč tinkanje z operacijskim sistemom Windows in učenje, ko ste na poti, ste morda opazili, da so procesi v sistemu Windows in ID-ji niti nizi in večkratniki štirih. Zakaj? Današnja objava za vprašanja in odgovore SuperUser ima odgovore na vprašanja radovednega bralca.
Današnja seja vprašanj in odgovorov prihaja z namenom SuperUser-a, ki je del skupine Stack Exchange, ki temelji na skupnostih spletnih mest za vprašanja in odgovore.
Vprašanje
Bralnik SuperUser Peter Hahndorf želi vedeti, zakaj ni nobenih neobičajnih ID-jev operacijskega sistema Windows:
IDje procesov v sistemu Windows lahko pregledate na več načinov. Uporaba programa PowerShell:
Dobim ta rezultat:
Kot lahko vidite, so vsi ID-ji procesov parni, ne samo to, da so vsi mnogokratniki štirih. Izgledate lahko tako težko, kot želite, in nikoli ne boste našli liho ID-jev procesa, vsaj ne na kateri koli različici, ki temelji na operacijskem sistemu Windows NT. Kaj je razlog za to?
Zakaj ni nobenih neobičajnih ID-jev operacijskega sistema Windows?
Odgovor
Sodelavec SuperUser DavidPostill ima odgovor za nas:
Zakaj ni nobenih neobičajnih ID-jev operacijskega sistema Windows?
Ista koda, ki dodeljuje ročice jedra, se uporablja tudi za dodeljevanje ID-jev procesa in niti. Ker so jedra jedra večkratnik štirih, so tudi procesni in nitni ID-ji.
Zakaj so procesni in nitni ID-ji večkratniki štirih?
V operacijskih sistemih, ki temeljijo na Windows NT, so procesni in nitni ID-ji vedno večkratniki štirih. Je to samo naključje?
Ja, to je samo naključje in ne zanašajte se nanj, ker ni del pogodbe o programiranju. Na primer, procesi in ID-ji niti Windows 95 niso bili vedno večkratniki štirih. Za primerjavo, razlog, da so jedra jedra vedno večkratnik štirih, je del specifikacije in bo zagotovljena v bližnji prihodnosti..
ID-ji procesov in niti so mnogokratniki štirih kot stranski učinek ponovne uporabe kode. Ista koda, ki dodeljuje ročice jedra, se uporablja tudi za dodeljevanje ID-jev procesa in niti. Ker so jedra jedra večkratnik štirih, so tudi procesni in nitni ID-ji. To je podrobnost izvajanja, zato ne pišite kode, ki se zanese na to. Pravim ti, da zadovoljiš svojo radovednost.
Vir: Zakaj so procesni in nitni ID-ji večkratniki štirih?
Zakaj jedro obravnava vedno večkratnik štirih?
Nekaj, kar ni zelo dobro znano, je, da sta spodnja dva bitov jedra jedra vedno nič; z drugimi besedami, njihova številčna vrednost je vedno večkratnik štirih. Upoštevajte, da to velja samo za ročaje jedra; ne velja za psevdo-ročaje ali za katerokoli drugo vrsto ročice (USER ročaji, GDI ročaji, multimedijski ročaji itd.). Ročaji jedra so stvari, ki jih lahko prenesete v funkcijo CloseHandle.
To, da je vsaj spodnji del jedra jedra vedno nič, se nanaša na funkcijo GetQueuedCompletionStatus, ki kaže, da lahko nastavite spodnji bit ročice dogodka, da preprečite obvestilo o pristanišču dokončanja. Da bi to delovalo, mora biti spodnji bit običajno nič.
Te informacije niso uporabne za večino pisateljev aplikacij, ki bi morali še naprej obravnavati ročice kot neprozorne vrednosti. Ljudje, ki bi jih zanimali bitov oznak, so tisti, ki izvajajo nizke knjižnice razredov ali pakirajo jedrne objekte v večji okvir..
Vir: Zakaj jedro obravnava vedno večkratnik štirih?
Nadaljnje branje
Stara nova stvar: praktični razvoj skozi razvoj sistema Windows Raymond Chen (Glavni inženir za programsko opremo Microsofta)
Imate kaj dodati pojasnilu? Zvok v komentarjih. Želite prebrati več odgovorov drugih uporabnikov tehnologije Stack Exchange? Oglejte si celotno nit razprave tukaj.