Pagrindinis » kaip » Kodėl nėra nelyginių „Windows“ procesų ID?

    Kodėl nėra nelyginių „Windows“ procesų ID?

    Jei jums patinka tinkavimas su „Windows“ ir mokymasis, kaip jūs einate, galbūt pastebėjote, kad „Windows“ procesų ir gijų ID yra lygūs ir keturių kartų. Kodėl taip? Šiandienos „SuperUser“ atsakymų ir atsakymų atsakymai yra įdomūs skaitytojo klausimai.

    Šiandienos „Klausimų ir atsakymų“ sesija mums suteikiama pagal „SuperUser“ - „Stack Exchange“ padalinį, bendruomenės sukurtą „Q&A“ svetainių grupavimą.

    Klausimas

    „SuperUser“ skaitytuvas Peteris Hahndorfas nori sužinoti, kodėl nėra nelyginių „Windows“ procesų ID:

    Yra daug būdų ieškoti procesų ID Windows sistemoje. „PowerShell“ naudojimas:

    Gaunu šį rezultatą:

    Kaip matote, visi proceso ID yra lygūs, o ne tik tai, kad jie visi yra keturi kartotiniai. Galite atrodyti taip sunkiai, kaip norite, ir niekada nerasite nelyginio numerio ID, bent jau ne bet kurioje Windows NT pagrindu. Kokia yra priežastis?

    Kodėl nėra nelyginių „Windows“ procesų ID?

    Atsakymas

    „SuperUser“ autorius DavidPostill mums atsako:

    Kodėl nėra nelyginių „Windows“ procesų ID?

    Tas pats kodas, skiriantis branduolio rankenas, taip pat naudojamas proceso ir gijų ID paskirstymui. Kadangi branduolio rankenos yra keturių kartotinių, tai yra proceso ir gijų ID.

    Kodėl procesų ir siūlų ID kartoja keturis?

    Windows NT pagrindu veikiančiose operacinėse sistemose procesų ir siūlų ID visada būna keturių kartų. Ar tai tik sutapimas?

    Taip, tai tik atsitiktinumas, ir jūs neturėtumėte pasikliauti tuo, nes jis nėra programavimo sutarties dalis. Pvz., „Windows 95“ procesų ir sriegių ID ne visada buvo keturi kartotiniai. Palyginimui, priežastis, dėl kurios branduolio rankenos visada yra keturių kartotinių dalių, yra specifikacijos dalis ir bus garantuota artimiausioje ateityje.

    Proceso ir siūlų ID yra keturių kartotinių kodų pakartotinio panaudojimo efektai. Tas pats kodas, skiriantis branduolio rankenas, taip pat naudojamas proceso ir gijų ID paskirstymui. Kadangi branduolio rankenos yra keturios kartos, tai yra proceso ir gijų ID. Tai yra įgyvendinimo detalė, taigi nereikia rašyti kodo, kuris priklauso nuo jo. Aš tiesiog sakau jums patenkinti savo smalsumą.

    Šaltinis: Kodėl procesų ir siūlų ID kartoja keturis?

    Kodėl branduolys visada valdo keturis kartus?

    Kažkas, kas nėra labai gerai žinoma, yra tai, kad du branduolio rankenų du batai visada yra nuliniai; kitaip tariant, jų skaitmeninė vertė visada yra keturių kartų. Atkreipkite dėmesį, kad tai taikoma tik branduolio rankenoms; jis netaikomas pseudo rankenoms ar kitoms rankenoms (USER rankenos, GDI rankenos, multimedijos rankenos ir pan.). Kernelio rankenos yra dalykai, kuriuos galite pereiti į CloseHandle funkciją.

    „GetQueuedCompletionStatus“ funkcija reiškia, kad bent jau branduolio rankenų apatinė bitė yra lygi nuliui, o tai rodo, kad galite nustatyti apatinę įvykio rankenos bitą, kad sustabdytumėte pranešimo apie prievadą užbaigimą. Kad tai veiktų, apatinė bitė paprastai turi būti lygi nuliui.

    Ši informacija nėra naudinga daugeliui programų autorių, kurie turėtų toliau tvarkyti rankenas kaip nepermatomas vertes. Žmonės, kurie domisi žymos bitais, yra tie, kurie įgyvendina žemos klasės klasės bibliotekas arba įveda branduolio objektus didesnėje sistemoje.

    Šaltinis: Kodėl branduolys visada valdo keturis kartus?

    Papildoma literatūra

    Senasis naujas dalykas: praktinis vystymasis „Raymond Chen“ „Windows“ evoliucijos metu (Pagrindinis „Microsoft“ programinės įrangos projektavimo inžinierius)


    Ar ką nors papildyti paaiškinimu? Garsas išjungtas komentaruose. Norite perskaityti daugiau atsakymų iš kitų „tech-savvy Stack Exchange“ vartotojų? Čia rasite visą diskusijų temą.