18Aug
Če imate radi povezovanje z operacijskim sistemom Windows in učenje, ko ste mimo, ste morda opazili, da sta proces Windows in ID-ji niti številčno in večkratnik štirih. Zakaj? Današnji SuperUser Q & Objava ima odgovore na radovedna vprašanja bralca.
Današnje vprašanje &S sejo odgovora prihaja uporaba SuperUserja, ki je razdeljena na Stack Exchange, skupinsko spletno stran Q & A.
Vprašanje
bralec SuperUserja Peter Hahndorf želi vedeti, zakaj ni ID-jev procesorskih številk z liho številko:
Obstaja veliko načinov za pregledovanje ID-jev procesov v sistemu Windows. Z uporabo PowerShell-a:
dobim ta rezultat:
Kot vidite, so vsi ID-ji procesa celo številski, ne le, da so vsi večkratniki štirih. Izgledate lahko tako težko, kot želite in nikoli ne boste našli neobdelanega ID-ja procesa, vsaj ne na različici, ki temelji na sistemu Windows NT.Kaj je razlog za to?
Zakaj ni ID-jev procesorskih številk z neštetimi številkami?
Odzivnik odgovora
SuperUser DavidPostill ima odgovor za nas:
Zakaj ni ID-jev procesorskih številk z neštetimi številkami?
Ista koda, ki dodeljuje ročice jedra, se uporablja tudi za dodeljevanje procesov in ID-jev navojev. Ker so ročaji jedra večkratnik štirih, so tudi procesne in nitne številke.
Zakaj so procesne in nitne številke štirikrat večje?
V operacijskih sistemih, ki temeljijo na operacijskem sistemu Windows NT, so procesi in navadni ID-ji vedno večkratni od štirih. Je to samo naključje?
Da, to je samo naključje in se ne bi smeli zanašati na to, ker ni vključen v programsko pogodbo. Na primer, postopek Windows 95 in ID-ji niti niso bili vedno večkratniki štirih. Za primerjavo je del specifikacije razlog, da se jedro obravnava vedno večkratnik štirih in bo zagotovljeno v bližnji prihodnosti.
Procesni in nitni identifikatorji so večkratniki štiri kot stranski učinek ponovne uporabe kode. Ista koda, ki dodeljuje ročice jedra, se uporablja tudi za dodeljevanje procesnih in navadnih ID-jev. Ker so ročaji jedra večkratniki štirih, so tudi procesne in nitne. To je izvedbeni podatek, zato ne pišite kode, ki se zanese na to. Pravim, da ste zadovoljni s svojo radovednostjo.
Vir: Zakaj so procesni in nitni podatki večkratniki štirih?
Zakaj je jedro vedno večkratnik štirih?
Nekaj, kar ni dobro znano, je, da sta spodnji dve bitovi ročic jedra vedno enaka nič;z drugimi besedami, njihova številčna vrednost je vedno štirikratna. Upoštevajte, da to velja samo za ročke jedra;ne velja za psevdo-ročke ali za katero koli drugo vrsto ročaja( ročaji USER, ročaji GDI, ročaji za večpredstavnost itd.).Ročaji jedra so stvari, ki jih lahko preidete v funkcijo CloseHandle.
Da je funkcija GetQueuedCompletionStatus vsaj za spodnji del ročk jedra vedno nič, pomeni, da lahko spodnji del ročaja dogodka nastavite tako, da zatisne obvestilo o zaključenem pristanišču. Da bi to delovalo, mora biti spodnji bit običajno nič.
Te informacije niso uporabne za večino pisateljev aplikacij, ki morajo še naprej obravnavati ročke kot neprozorne vrednosti. Ljudje, ki bi bili zainteresirani za oznake bitov, so tisti, ki izvajajo knjižnice razredov na nižji ravni ali pa zavrtijo predmete jedra znotraj večjega okvira.
Vir: Zakaj je jedro vedno večkratnik štirih?
Nadaljnje branje
Stara nova stvar: Praktični razvoj skozi razvoj sistema Windows, ki ga izvaja Raymond Chen( glavni inženir za načrtovanje programske opreme v Microsoft )
Ali imate kaj dodati k razlagi? Zvok v komentarjih.Želite prebrati več odgovorov od drugih uporabniških članov stack Exchange? Oglejte si celotno temo za razpravo tukaj.