18Aug

Miksi ei ole Odd-numeroituja Windows-prosessin tunnuksia?

Jos pidät tinkeringistä Windows-ohjelmistosta ja oppii käymälläsi, saatat huomata, että Windowsin prosessi- ja keskustelulomakkeet ovat parillisia ja nelinkertaisia. Miksi niin? Tänään SuperUser Q & A -postilla on vastauksia utelias lukijan kysymyksiin.

Tämän päivän kysymys &Vastausistunto tulee meille kohteliaasti SuperUser-osastoon Stack Exchange, yhteisöllinen ryhmittely Q & A verkkosivuilla.

Kysymys

SuperUser-lukija Peter Hahndorf haluaa tietää, miksi ei ole olemassa parittomia Windows-prosessin tunnuksia:

Prosessin tunnuksia Windowsissa voi monin tavoin tarkastella. Käyttämällä PowerShell:

saan tämän tuloksen:

Kuten näette, kaikki prosessin tunnukset ovat parillisia, paitsi että ne ovat kaikki nelinkertaisia. Voit katsoa niin kovaa kuin haluat, ja et löydä koskaan parittomalta prosessidunnusta, ainakaan missään Windows NT -versioon perustuvassa versiossa. Mikä on syy tähän?

Miksi ei ole parittomia Windows-prosessin tunnuksia?

Vastaus

SuperUser avustaja DavidPostill on meille vastaus:

Miksi ei ole parittomia Windows-prosessin tunnuksia?

Sama koodi, joka jakaa ytimen kädensijat, käytetään myös jakamaan prosessi- ja ketjun tunnukset. Koska ytimen kahvat ovat moninkertainen neljä, niin ovat prosessi- ja säikeen tunnukset.

Miksi prosessin ja viestien tunnukset ovat neljä?

Windows NT-pohjaisissa käyttöjärjestelmissä prosessi- ja keskustelulomakkeet sattuvat aina olemaan nelinkertainen. Onko tämä vain sattuma?

Kyllä, se on vain sattumaa, eikä sinun pitäisi luottaa siihen, koska se ei ole osa ohjelmointisopimusta. Esimerkiksi Windows 95: n prosessi- ja säikeen tunnukset eivät aina olleet nelinkertaisia. Vertailun vuoksi syy siihen, että ytimen kädensijat ovat aina nelinkertainen, on osa spesifikaatiota ja taataan tulevassa tulevaisuudessa.

Prosessi- ja ketjun tunnukset ovat neljän kerrannaisia ​​koodin uudelleenkäytön sivuvaikutuksena. Sama koodi, joka jakaa ytimen kädensijat, käytetään myös jakamaan prosessi- ja ketjun tunnukset. Koska ytimen kädensijat ovat neljänneksiä, niin ne ovat prosessi- ja säikeen tunnukset. Tämä on toteutuksen yksityiskohta, joten älä kirjoita koodia, joka perustuu siihen. Sanon vain, että tyydytät uteliaisuutesi.

Lähde: Miksi prosessin ja viestien tunnukset ovat neljä?

Miksi ytimen kahvat ovat aina nelinkertainen?

Jotain, jota ei tunneta hyvin, on, että ytimen kahvan pohja kaksi bittiä on aina nolla;toisin sanoen niiden numeerinen arvo on aina nelinkertainen. Huomaa, että tämä koskee vain ytimen kahvoja;se ei koske pseudo-kahvoja tai minkään muun tyyppisiä kahvoja( USER-kahvat, GDI-kahvat, multimedia-kahvat jne.).Kernelin kahvat ovat asioita, joita voit siirtää CloseHandle-toimintoon.

GetQueuedCompletionStatus -toiminto tarkoittaa ainakin sitä, että ytimen kädensijat ovat aina nolla, mikä tarkoittaa, että voit määrittää tapahtumakahvan alimman osan estääkseen valmiin portin ilmoituksen. Jotta tämä toimisi, pohjabitin on normaalisti oltava nolla.

Nämä tiedot eivät ole hyödyllisiä useimmille sovelluslukijoille, joiden pitäisi edelleen käsitellä kahvoja läpinäkyvinä arvoina. Ihmiset, jotka olisivat kiinnostuneita tag-biteistä, ovat niitä, jotka toteuttavat matalan tason kirjastoja tai jotka käärivät ytimen esineitä suuremmassa kehyksessä.

Lähde: Miksi ytimen kädensijat ovat aina nelinkertainen?

Lisää lukemista

Vanha uusi asia: käytännön kehitys koko Windowsin kehityksessä Raymond Chen( : n tärkein ohjelmistosuunnitteluinsinööri Microsoft : ssä)

Onko sinulla jotain lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä?Katso koko keskusteluketju täältä.