18Aug
Kui sulle meeldib Windowsiga suhtlemine ja õppimine läheb, võib-olla olete märganud, et Windowsi protsessi ja niidi ID-d on ümara numbritega ja need on neljakordsed. Miks nii? Tänane SuperUser Q & post sisaldab vastuseid uudishimulikule lugeja küsimustele.
tänapäeva küsimus &Vastuste seanss tuleb meile viisakalt SuperUseriga - Q & A veebisaitide kogukonnapõhise grupi Stack Exchange jagunemisest.
Küsimus
SuperUser lugeja Peter Hahndorf soovib teada, miks pole paarituarvulisi Windowsi protsesside ID-sid:
Windowsi protsesside ID-de vaatamiseks on palju võimalusi. PowerShelli kasutamine:
. Saan selle tulemuse:
Nagu näete, on kõik protsessi ID-d võrdsed numbritega, mitte ainult, et need on kõik neljakordsed. Võite vaadata nii kõvasti kui soovite ja te ei leia kunagi paaritu numbriga protsessi ID-d, vähemalt mitte ühtegi Windows NT-põhist versiooni. Mis on selle põhjus?
Miks pole odava numbriga Windowsi protsesside ID-d?
Vastuseks
SuperUseri kaastöötaja DavidPostilile on meile vastus:
Miks pole paarituarvulisi Windowsi protsesside ID-sid?
Sama koodi, mis eraldab kerneli käepidemeid, kasutatakse ka protsessi- ja niit ID-de eraldamiseks. Kuna kerneli käepidemed on neljakordne, on ka protsessi- ja niit ID-id.
Miks on protsessi- ja niit ID-d korrutatuna neljaga?
Windows NT-põhistes operatsioonisüsteemides on protsessi- ja nn ID-d alati neljakordne. Kas see on lihtsalt kokkusattumus?
Jah, see on lihtsalt kokkusattumus, ja te ei tohiks sellele tugineda, kuna see ei kuulu programmitöölepingusse. Näiteks Windows 95 protsessi ja ID-id ei olnud alati neljakordne. Võrdluseks on põhjus, et kerneli käepidemed on alati neljakordne, on osa spetsifikatsioonist ja tagatakse lähitulevikus.
protsessi ja keerme ID on kordumatu koodi korduvkasutuseks kõrvalekalded neli korda. Sama koodi, mis eraldab kerneli käepidemeid, kasutatakse ka protsessi- ja niit ID-de eraldamiseks. Kuna kerneli käepidemed on neljakordsed, on ka protsessi- ja niit ID-id. See on rakenduse detail, nii et ärge kirjutage koodi, mis sellele tugineb. Ma lihtsalt ütlen sulle oma uudishimu rahuldamist.
Allikas: Miks protsessi- ja niit ID-d on neljakordne?
Miks on kerneli käepidemed alati neljakordne?
Midagi, mis pole eriti hästi teada, on see, et kaks kerneli käepideme alt on alati null;Teisisõnu on nende arvuline väärtus alati neljakordne. Pange tähele, et see kehtib ainult kerneli käepidemete kohta;seda ei kohaldata pseudokäepidemete ega muud tüüpi käepideme suhtes( USER käepidemed, GDI käepidemed, multimeedium käepidemed jne).Kerneli käepidemed on asjad, mida saate käsku CloseHandle edastada.
See, et vähemalt kerneli käepideme alumine bitis on alati null, tuleneb funktsioonist GetQueuedCompletionStatus, mis näitab, et saate määrata sündmuse käepideme alumise biti, et suruda lõpetamise porti teade. Et seda tööd teha, peab alumine osa olema null.
See teave ei ole enamike rakenduse kirjanike jaoks kasulik, sest käepidemed peaksid jätkuma läbipaistmatute väärtustega. Inimesed, kes oleksid huvitatud sildistest, on need, kes rakendavad madala taseme klassi raamatukogusid või pakuvad kerneli objekte suurema raamistiku sees.
Allikas: Miks on kerneli käepidemed alati neljakordne?
Lisateave
Vana uus asi: praktiline arendus kogu Windowsi arengus Raymond Chen( peamine tarkvarainvesteerija, Microsoft )
Kas teil on seletamiseks midagi lisada? Helistage kommentaarides. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Tutvu täieliku arutelu teemaga siit.