Hjemmeside » hvordan » Hvorfor er der ikke ulige nummererede Windows-proces-id'er?

    Hvorfor er der ikke ulige nummererede Windows-proces-id'er?

    Hvis du elsker at tinkere med Windows og lære, mens du går, har du måske bemærket, at Windows-proces- og tråd-id'er er lige nummererede og mange gange med fire. Hvorfor det? Dagens SuperUser Q & A-indlæg har svarene på en nysgerrig læsers spørgsmål.

    Dagens Spørgsmål & Svar session kommer til os med venlig hilsen af ​​SuperUser-en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.

    Spørgsmålet

    SuperUser-læser Peter Hahndorf vil vide, hvorfor der ikke er nogen ulige nummererede Windows-proces-id'er:

    Der er mange måder at se på proces-id'er i Windows. Brug af PowerShell:

    Jeg får dette resultat:

    Som du kan se, er alle proces-id'er ensartede, ikke kun det, de er alle fire gange fire. Du kan se så hårdt som du vil, og du vil aldrig finde et ulige nummereret proces-id, i det mindste ikke på nogen version, der er Windows NT-baseret. Hvad er årsagen til dette?

    Hvorfor er der ikke ulige nummererede Windows-proces-id'er?

    Svaret

    SuperUser bidragyder DavidPostill har svaret for os:

    Hvorfor er der ikke ulige nummererede Windows-proces-id'er?

    Den samme kode, som tildeler kernehåndtag, bruges også til at allokere proces- og tråd-id'er. Da kernehåndtag er et flertal på fire, er det også proces- og tråd-id'er.

    Hvorfor er proces- og tråd-id'er multiple af fire?

    På Windows NT-baserede operativsystemer forekommer proces- og tråd-id'er altid at være et flertal på fire. Er dette bare et tilfælde?

    Ja, det er bare et tilfælde, og du bør ikke stole på det, da det ikke er en del af programmeringsaftalen. For eksempel var Windows 95 proces- og tråd-id'er ikke altid mange gange fire. Til sammenligning er årsagen til, at kerne håndterer altid et flertal på fire, en del af specifikationen og garanteres i overskuelig fremtid.

    Proces- og tråd-id'er er multipler af fire som en bivirkning ved genbrug af kode. Den samme kode, som tildeler kernehåndtag, bruges også til at allokere proces- og tråd-id'er. Da kernehåndtag er multipler af fire, så er proces- og tråd-id'er. Dette er en implementeringsdetalje, så skriv ikke kode, der er afhængig af det. Jeg fortæller bare dig at tilfredsstille din nysgerrighed.

    Kilde: Hvorfor er proces- og tråd-id'er multiple af fire?

    Hvorfor er kernehåndtag altid et flertal på fire?

    Noget, som ikke er meget kendt, er, at de to nederste to kerner af kernelhåndtag altid er nul; med andre ord er deres numeriske værdi altid et flertal på fire. Bemærk, at dette kun gælder for kernelhåndtag; Det gælder ikke for pseudohåndtag eller andre typer håndtag (USER-håndtag, GDI-håndtag, multimediehåndtag osv.). Kernelhåndtag er ting, du kan overføre til CloseHandle-funktionen.

    At i det mindste bunden af ​​kernelhåndtagene altid er nul, er underforstået af GetQueuedCompletionStatus-funktionen, hvilket indikerer, at du kan indstille bundbitten i hændelseshåndtaget for at undertrykke fuldførelsesportmeddelelsen. For at dette skal fungere, skal bundstykket normalt være nul.

    Disse oplysninger er ikke nyttige for de fleste applikationsforfattere, som fortsat bør behandle håndtag som uigennemsigtige værdier. De mennesker, der ville være interesserede i tagbits, er dem, der gennemfører klassebiblioteker på lavt niveau eller wrapper kernelobjekter inde i en større ramme.

    Kilde: Hvorfor er kernehåndtag altid et flertal på fire?

    Yderligere læsning

    Den Gamle Nyhed: Praktisk Udvikling Gennem Udviklingen af ​​Windows af Raymond Chen (Principal Software Design Engineer hos Microsoft)


    Har du noget at tilføje til forklaringen? Lyde af i kommentarerne. Vil du læse flere svar fra andre tech-savvy Stack Exchange brugere? Tjek den fulde diskussionstråd her.