waarom zijn er geen oneven ramen proces ids?

Als je houdt van knutselen met Windows en leren als je gaat, heb je misschien gemerkt dat Windows proces en thread-id’s zijn even genummerde en veelvouden van vier. Waarom is dat? Today’s SuperUser Q & A bericht heeft de antwoorden op de vragen van een nieuwsgierige lezer.

Today’s Vraag & antwoord-sessie tot ons komt beleefdheid van SuperUser-een onderverdeling van Stack Exchange, een community-gedreven groepering van Q & A websites.

SuperUser lezer Peter Hahndorf wil weten waarom er geen oneven Windows proces-id’s

Er zijn vele manieren om te kijken naar het proces-id’s in Windows. Met behulp van PowerShell

Ik krijg dit resultaat

Zoals u kunt zien, het hele proces ID’s met even nummers, niet alleen dat, ze zijn allemaal veelvouden van vier. Je kunt zo hard kijken als je wilt en je zult nooit vinden een oneven genummerde proces-ID, althans niet op elke versie die Windows NT-gebaseerde. Wat is de reden hiervoor?

Waarom zijn er geen oneven Windows proces-id’s?

SuperUser inzender DavidPostill heeft het antwoord voor ons

Waarom zijn er geen oneven Windows proces-id’s?

Dezelfde code die kernel handles toewijst wordt ook gebruikt voor het verwerken wijzen en draad IDs. Sinds kernel handgrepen zijn een veelvoud van vier, dus zijn proces en thread-id’s.

Waarom zijn proces en thread-id’s veelvouden van vier?

Op Windows NT-gebaseerde besturingssystemen, proces- en thread-ID’s altijd gebeuren op een veelvoud van vier zijn. Is dit gewoon toeval?

Ja, het is gewoon een toeval, en je moet niet op vertrouwen, omdat het geen deel uitmaakt van de programmering contract. Bijvoorbeeld, Windows 95 proces en thread-id’s waren niet altijd een veelvoud van vier. Ter vergelijking, de reden dat handles kernel altijd een veelvoud van vier is onderdeel van de beschrijving en zullen worden gegarandeerd in de nabije toekomst.

Proces en thread-id’s zijn veelvouden van vier als een neveneffect van hergebruik van code. Dezelfde code die kernel handles toewijst wordt ook gebruikt voor het verwerken wijzen en draad IDs. Sinds kernel handgrepen zijn veelvouden van vier, dus zijn proces en thread-id’s. Dit is een implementatie detail, dus code die is gebaseerd op het niet schrijven. Ik vertel u om uw nieuwsgierigheid te bevredigen.

Bron: Waarom zijn proces en thread-id’s veelvouden van vier?

Waarom zijn kernel handgrepen altijd een veelvoud van vier?

Iets dat niet goed bekend is dat de onderste twee bits van kernel handgrepen zijn altijd nul, met andere woorden, de numerieke waarde is altijd een veelvoud van vier. Merk op dat dit alleen geldt voor handgrepen kernel, het is niet van toepassing op pseudo-handgrepen of aan een ander type handvat (USER handgrepen, GDI handvatten, multimedia handvatten, etc.). Kernel handgrepen zijn dingen die je kunt doorgeven aan de CloseHandle functie.

Dat ten minste het onderste stukje kernel handgrepen zijn altijd nul wordt geïmpliceerd door de GetQueuedCompletionStatus functie, wat aangeeft dat je op de bodem wat het evenement handvat kan ingesteld op poort-melding te onderdrukken. Om dit te laten werken, moet de bodem beetje normaal nul.

Deze informatie is niet nuttig voor de meeste toepassingen schrijvers, die moet blijven handvatten als ondoorzichtig waarden te behandelen. De mensen die geïnteresseerd in tag stukjes zijn degenen die de uitvoering van low-level class libraries of wikkelen kernel objecten in een ruimer kader.

Bron: Waarom zijn kernel handgrepen altijd een veelvoud van vier?

verder lezen

The Old New Thing: Praktische ontwikkeling in de evolutie van Windows door Raymond Chen (Principal Software Design Engineer bij Microsoft)

Hebben iets toe te voegen aan de verklaring? Geluid uit in de commentaren. Wil je meer antwoorden van andere tech-savvy Stack Exchange-gebruikers te lezen? Bekijk de volledige bespreking draad hier.

Britse militaire tanks zijn verplicht om een ​​kookvat station voor het zetten van thee of andere warme dranken (en verwarming kook-in-de-zak maaltijden) aan boord te hebben.