Koduleht » kuidas » Miks ei ole paaritu numbriga Windowsi protsessi ID-sid?

    Miks ei ole paaritu numbriga Windowsi protsessi ID-sid?

    Kui sa armastad võrgutamist Windowsi ja õppimise ajal, siis võib-olla olete märganud, et Windowsi protsesside ja niitide ID-d on paarisarvulised ja neli korda. Miks nii? Tänase SuperUser Q&A postitusel on vastused uudishimulikule lugeja küsimustele.

    Tänane küsimuste ja vastuste seanss saabub meiega kohtades, kus on SuperUser-Stack Exchange'i alajaotis, kogukondlikult juhitav Q&A veebisaitide rühmitus.

    Küsimus

    SuperUser-lugeja Peter Hahndorf tahab teada, miks ei ole paarisarvulisi Windowsi protsessi ID-sid:

    Protsessi ID-de vaatamiseks Windowsis on mitmeid viise. PowerShelli kasutamine:

    Ma saan selle tulemuse:

    Nagu näete, on kõik protsessi ID-d paarisarvulised, mitte ainult, et need kõik on neli korda. Võite vaadata nii kõvasti kui soovid ja te ei leia kunagi paaritu numbri protsessi ID-d, mitte mitte mingil Windows NT-põhisel versioonil. Mis on selle põhjuseks?

    Miks ei ole paarisarvulisi Windowsi protsessi ID-sid?

    Vastus

    SuperUser'i toetaja DavidPostillil on meile vastus:

    Miks ei ole paarisarvulisi Windowsi protsessi ID-sid?

    Sama koodi, mis jaotab kerneli käepidemed, kasutatakse ka protsesside ja niitide ID-de määramiseks. Kuna kerneli käepidemed on nelja kordne, siis on protsesside ja niitide ID-d.

    Miks on protsesside ja niitide ID-d neli korda?

    Windows NT-põhistel operatsioonisüsteemidel on protsesside ja niitide ID-d alati neljakordsed. Kas see on lihtsalt juhus?

    Jah, see on vaid juhus ja te ei tohiks sellele tugineda, sest see ei ole programmitöö lepingu osa. Näiteks ei olnud Windows 95 protsesside ja niitide ID-d alati neli korda korrutatud. Võrdluseks, põhjus, miks kerneli käepidemed on alati neljakordne, on osa spetsifikatsioonist ja see tagatakse lähitulevikus.

    Protsessi- ja niiditunnused on koodide korduskasutuse kõrvalefektina nelja kordsed. Sama koodi, mis jaotab kerneli käepidemed, kasutatakse ka protsesside ja niitide ID-de määramiseks. Kuna kerneli käepidemed on neli korda, siis on protsesside ja niitide ID-d. See on rakenduse detail, nii et ärge kirjutage koodi, mis sellele tugineb. Ma lihtsalt ütlen teile, et rahuldada oma uudishimu.

    Allikas: Miks on protsesside ja niitide ID-d neli korda?

    Miks on kernel alati neljakordne?

    Midagi, mis ei ole väga hästi teada, on see, et kerneli kahest kahest bitist on alati null; teisisõnu, nende numbriline väärtus on alati neljakordne. Pange tähele, et see kehtib ainult kerneli käepidemete kohta; see ei kehti pseudo-käepidemetele ega muule käepidemele (USER käepidemed, GDI käepidemed, multimeediakäepidemed jne). Kerneli käepidemed on asjad, mida saab edasi kanda CloseHandle funktsiooni.

    GetQueuedCompletionStatus funktsiooni, mis näitab, et saab määrata sündmuse käepideme alumise biti, et lõpetada port-teate lõpetamine, eeldab vähemalt kerneli käepidemete alumine bit. Selleks, et see toimiks, peab põhi-bit olema tavaliselt null.

    See teave ei ole enamiku rakenduste kirjutajate jaoks kasulik, sest see peaks jätkama käepidemete käsitlemist läbipaistmatute väärtustena. Inimesed, keda huvipakkuvaks märgistamisbitiks on, on need, kes rakendavad madala taseme klassi raamatukogusid või pakuvad tuumaobjekte suuremasse raamistikku.

    Allikas: Miks on kernel alati neljakordne?

    Lisalugemist

    Vana uus asi: praktiline areng kogu Windowsi arengus Raymond Cheni poolt (Microsofti peamine tarkvara projekteerija)


    Kas teil on midagi lisada selgitusele? Heli on kommentaarides välja lülitatud. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Vaadake siin täielikku arutelu lõiku.