If-Koubou

Zašto nema ID-ova s ​​ID brojevima s brojem?

Zašto nema ID-ova s ​​ID brojevima s brojem? (Kako da)

Ako volite igrati s Windowsom i učiti dok idete, možda ste primijetili da su procesni i ID zapisi teksta jednaki broju i višekratnici četiriju. Zašto je to? Danas SuperUser Q & A post ima odgovore na znatiželjna pitanja čitatelja.

Današnja pitanja i odgovori nam se javljaju zahvaljujući SuperUseru - podjele Stack Exchange-a, zajednice-driven grupiranja Q & A web stranica.

Pitanje

SuperUser čitač Peter Hahndorf želi znati zašto nema čudnih brojeva procesnih ID-ova:

Postoji mnogo načina da pogledate ID-ove procesa u sustavu Windows. Koristeći PowerShell:

Dobivam ovaj rezultat:

Kao što možete vidjeti, svi ID-ovi procesa su jednake brojeve, ne samo to, oni su sve višekratnici od četiri. Možete izgledati toliko teško koliko želite i nikad nećete pronaći ID procesnog broja, barem ne na bilo kojoj verziji koja se temelji na sustavu Windows NT. Koji je razlog za to?

Zašto ne postoje čudovi s brojem procesnih ID-ova sustava Windows?

Odgovor

Usluga SuperUser DavidPostill ima odgovor za nas:

Zašto ne postoje čudovi s brojem procesnih ID-ova sustava Windows?

Isti kôd koji alocira ručke kernela također se koristi za dodjeljivanje ID-ova procesa i navoda. Budući da su jezgri kernela višestruki od četiri, tako su i ID-ovi procesa i niti.

Zašto su ID-ovi procesa i ID-ova s ​​više od četiri?

Na operacijskim sustavima koji se temelje na operacijskom sustavu Windows NT, procesni i ID-ovi niti uvijek se događaju kao višestruki od četiri. Je li to samo slučajnost?

Da, to je samo slučajnost i ne biste se trebali osloniti na njega jer nije dio ugovora o programiranju. Na primjer, ID-ovi procesa i ID-ova u sustavu Windows 95 nisu bili uvijek višekratnici od četiri. Usporedbe radi, razlog zbog kojeg su ručke jezgre uvijek višestruko od četiri je dio specifikacije i bit će zajamčeno u doglednoj budućnosti.

ID-ovi procesa i niti su višekratnici od četiri kao nuspojava ponovnog korištenja koda. Isti kôd koji alocira ručke kernela također se koristi za dodjeljivanje ID-ova procesa i navoda. Budući da su jezgrene ručke višekratnici od četiri, tako su i ID-ovi procesa i niti. Ovo je detalj implementacije, stoga nemojte pisati kôd koji se oslanja na nju. Samo vam kažem da zadovoljiš svoju znatiželju.

Izvor: Zašto su ID-ovi procesa i ID-ova s ​​više od četiri?

Zašto ručke zrna uvijek imaju više od četiri?

Nešto što nije dobro poznato je da dno dva bita jezgrih jezgri su uvijek nula; drugim riječima, njihova numerička vrijednost je uvijek više od četiri. Imajte na umu da se to odnosi samo na ručke za kernel; ne primjenjuje se na pseudo-ručke ili na bilo koju drugu vrstu ručke (USER ručke, GDI ručke, multimedijske ručke itd.). Kernel ručke su stvari koje možete proći do CloseHandle funkcije.

Da je barem dno donjeg dijela jezgrih jezgri uvijek nula implicirana je funkcija GetQueuedCompletionStatus, što znači da možete postaviti donji dio okvira događaja kako biste spriječili obavijest o dovršetku portova. Da bi to funkcioniralo, donji bit mora normalno biti nula.

Ove informacije nisu korisne za većinu aplikacijskih pisača, koje bi i dalje trebale tretirati ručke kao neprozirne vrijednosti. Ljudi koji bi bili zainteresirani za tag bita su oni koji provode niske razine klase knjižnica ili pakiranje kernel objekata unutar većeg okvira.

Izvor: Zašto ručke zrna uvijek imaju više od četiri?

Daljnje čitanje

Stara nova stvar: praktični razvoj tijekom razvoja sustava Windows Raymond Chen (Glavni inženjer za dizajn softvera u Microsoftu)

Imate li nešto za objašnjenje? Zvuči u komentarima. Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.