Kotisivu » miten » Miksi ei ole parittomien Windows-prosessien tunnuksia?

    Miksi ei ole parittomien Windows-prosessien tunnuksia?

    Jos rakastat tinkeringiä Windowsilla ja oppimisen aikana, olet ehkä huomannut, että Windows-prosessi- ja langatunnukset ovat parillisia ja neljän kertoja. Miksi niin? Tämän päivän SuperUser Q&A -postissa on vastaukset utelias lukijan kysymyksiin.

    Nykypäivän Kysymys- ja vastaus -istunto tulee meille suotuisasti SuperUserin - Stack Exchange -alueen, yhteisöpohjaisen Q & A-sivustojen ryhmittymän - kautta..

    Kysymys

    SuperUser-lukija Peter Hahndorf haluaa tietää, miksi Windows-prosessi-tunnuksia ei ole parittomasti:

    Voit tarkastella Windows-prosessien tunnuksia monella eri tavalla. PowerShellin käyttäminen:

    Saan tämän tuloksen:

    Kuten näette, kaikki prosessitunnukset numeroidaan tasaisesti, ei vain, että ne ovat kaikki neljän kerrannaisia. Voit näyttää niin kovalta kuin haluat ja et löydä koskaan paritonta numeroprosessitunnusta, ei ainakin missään Windows NT -versiossa. Mikä on syy tähän?

    Miksi ei ole parittomia Windows-prosessi-tunnuksia?

    Vastaus

    SuperUserin avustaja DavidPostillilla on vastaus meille:

    Miksi ei ole parittomia Windows-prosessi-tunnuksia?

    Samaa koodia, joka allokoi ytimen kädensijoja, käytetään myös prosessien ja säikeiden ID: iden varaamiseen. Koska ytimen kahvat ovat neljän kertaisia, niin prosessin ja langan tunnukset ovat.

    Miksi prosessin ja langan tunnukset kertovat neljästä?

    Windows NT -käyttöjärjestelmissä prosessi- ja langatunnukset ovat aina neljä. Onko tämä vain sattumaa?

    Kyllä, se on vain sattumaa, eikä sinun pitäisi luottaa siihen, koska se ei ole osa ohjelmasopimusta. Esimerkiksi Windows 95: n prosessi- ja langatunnukset eivät aina olleet neljän kerrannaisia. Vertailun vuoksi syy siihen, että ytimen kädensijat ovat aina neljän kerrannainen, on osa eritelmää, ja se taataan lähitulevaisuudessa.

    Prosessin ja langan tunnukset ovat neljän kertoja koodin uudelleenkäytön sivuvaikutuksena. Samaa koodia, joka allokoi ytimen kädensijoja, käytetään myös prosessien ja säikeiden ID: iden varaamiseen. Koska ytimen kädensijat ovat neljän kerrannaisia, niin prosessin ja langan tunnukset. Tämä on yksityiskohtainen toteutus, joten älä kirjoita koodia, joka perustuu siihen. Kerron vain, että täytätte uteliaisuutesi.

    Lähde: Miksi prosessin ja langan tunnukset kertovat neljästä?

    Miksi ydin käsittelee aina neljän kerran?

    Jotain, joka ei ole kovin hyvin tiedossa, on se, että ytimen kahvan alareunat ovat aina nolla; toisin sanoen niiden numeerinen arvo on aina neljän kerrannainen. Huomaa, että tämä koskee vain ytimen kahvoja; se ei koske pseudo-kahvoihin tai mihinkään muuhun kahvaan (USER-kahvat, GDI-kahvat, multimediakahvat jne.). Kernel-kahvat ovat asioita, joita voit siirtää CloseHandle-toimintoon.

    GetQueuedCompletionStatus-toiminto, joka ilmoittaa, että voit asettaa tapahtumakahvan alarivin tukahduttamaan portin ilmoituksen loppuunsaattamisen, viittaavat siihen, että ainakin ytimen kädensijan alareuna on nolla. Jotta tämä toimisi, pohjabitin on tavallisesti oltava nolla.

    Nämä tiedot eivät ole käyttökelpoisia useimmissa sovelluskirjoittajissa, joiden pitäisi edelleen käsitellä kahvoja läpinäkymättöminä arvoina. Ihmiset, jotka haluaisivat merkkibittejä, ovat niitä, jotka toteuttavat matalan tason luokkakirjastoja tai käärittävät ydinobjektit suuremman kehyksen sisällä.

    Lähde: Miksi ydin käsittelee aina neljän kerran?

    Lue lisää

    Vanha uusi asia: käytännön kehittäminen Raymond Chenin Windows-evoluution aikana (Microsoftin ohjelmistosuunnittelija)


    Onko jotain lisättävää selitykseen? Ääni pois kommenteista. Haluatko lukea lisää vastauksia muilta tech-savvy Stack Exchange -käyttäjiltä? Tutustu koko keskusteluketjuun täällä.