Početna » kako da » Zašto nema neparnih brojeva Windowsovih procesa?

    Zašto nema neparnih brojeva Windowsovih procesa?

    Ako volite tinkering sa sustavom Windows i učenje kao što ste i vi, možda ste primijetili da Windows proces i nit ID su parne brojeve i više od četiri. Zašto je to? Današnja postova s ​​pitanjima o odgovorima korisnika imaju odgovore na pitanja znatiželjnog čitatelja.

    Današnja sesija pitanja i odgovora dolazi nam ljubaznošću SuperUser-a, podjele Stack Exchangea, grupiranja web-lokacija za pitanja i odgovore u zajednici.

    Pitanje

    Čitač SuperUser Peter Hahndorf želi znati zašto nema neparnih ID-ova procesa u sustavu Windows:

    Postoji mnogo načina na koje možete pogledati ID-ove procesa u sustavu Windows. Korištenje programa PowerShell:

    Dobivam ovaj rezultat:

    Kao što možete vidjeti, svi ID-ovi procesa su parni, ne samo to, oni su svi višestruki od četiri. Možete izgledati koliko god želite i nikada nećete pronaći neparni ID procesa, barem ne na bilo kojoj verziji koja se temelji na sustavu Windows NT. Koji je razlog tome?

    Zašto nema neparnih ID-ova procesa u sustavu Windows?

    Odgovor

    Suradnik SuperPorisnik DavidPostill ima odgovor za nas:

    Zašto nema neparnih ID-ova procesa u sustavu Windows?

    Isti kôd koji dodjeljuje ručke kernela također se koristi za dodjelu procesa i ID-ova niti. Budući da su ručke kernela višestruke od četiri, to su procesni i nitni ID-ovi.

    Zašto su procesni i nitni ID-ovi višekratnici četiri?

    U operacijskim sustavima Windows NT procesni i nitni ID-ovi uvijek su višestruki od četiri. Je li to samo slučajnost?

    Da, to je samo slučajnost i na nju se ne biste smjeli oslanjati jer nije dio ugovora o programiranju. Na primjer, Windows 95 procesni i nitni ID-ovi nisu uvijek bili višestruki od četiri. Za usporedbu, razlog zbog kojeg su ručke kernela uvijek višestruke od četiri je dio specifikacije i bit će zajamčene u doglednoj budućnosti.

    ID-ovi procesa i niti su višestruki od četiri kao nuspojava ponovnog korištenja koda. Isti kôd koji dodjeljuje ručke kernela također se koristi za dodjelu procesa i ID-ova niti. Budući da su ručke kernela višestruke od četiri, tako su i procesni i nitni ID-ovi. Ovo je detalj provedbe, stoga nemojte pisati kod koji se oslanja na njega. Samo ti govorim da zadovoljiš svoju znatiželju.

    Izvor: Zašto su procesni i nitni ID-ovi višekratnici četiri?

    Zašto su kerneli uvijek višestruki od četiri?

    Nešto što nije jako dobro poznato je da su dna dva bita kernel ručke uvijek nula; drugim riječima, njihova brojčana vrijednost uvijek je višestruka od četiri. Napominjemo da se to odnosi samo na ručke jezgre; ne odnosi 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 prenijeti na funkciju CloseHandle.

    Da je barem donji dio kernel ručke uvijek nula podrazumijeva se pomoću funkcije GetQueuedCompletionStatus, što ukazuje na to da možete podesiti donji bit ručice događaja kako bi spriječio obavijest o portu završetka. Da bi ovo funkcioniralo, donji bit mora normalno biti nula.

    Ove informacije nisu korisne za većinu pisaca aplikacija, koji bi trebali nastaviti tretirati ručke kao neprozirne vrijednosti. Ljudi koji će biti zainteresirani za bitove oznaka su oni koji implementiraju knjižnice nižih razina ili pakuju kernel objekte unutar većeg okvira.

    Izvor: Zašto su kerneli uvijek višestruki od četiri?

    Daljnje čitanje

    Stara nova stvar: praktični razvoj kroz evoluciju sustava Windows Raymond Chen (Glavni inženjer dizajna softvera u Microsoftu)


    Imate li što dodati objašnjenju? Zvuk isključen u komentarima. Želite li pročitati više odgovora od drugih tehničkih korisnika Stack Exchangea? Pogledajte cjelokupnu temu za raspravu ovdje.