Jos pidät tinkeringistä Windows-ohjelmistosta ja oppimista ajettaessasi, 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- ja vastausistunto tulee meihin SuperUserin hyväksi - Stack Exchangein alaosasto, joka on yhteisöllinen Q & A-sivustojen ryhmittely.
SuperUser-lukija Peter Hahndorf haluaa tietää, miksi ei ole olemassa parittomia Windows-prosessin tunnuksia:
On monia tapoja tarkastella prosessin tunnuksia Windowsissa. PowerShellin käyttäminen:
Saan tämän tuloksen:
Kuten näet, 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?
SuperUser-avustaja DavidPostilla 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 keskustelulomakkeiden sattuu aina olla nelinkertainen. Onko tämä vain sattuma?
Kyllä, se on vain sattumaa, eikä sinun pitäisi luottaa siihen, koska se ei ole osa ohjelmasopimusta. 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.
Prosessin ja säikeen tunnukset ovat neljän kerran kertoja 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.
Tämä ainakin ydinten kädensijoiden pohjabitti on aina nolla, mikä johtuu GetQueuedCompletionStatus-toiminnosta, mikä osoittaa, että voit määrittää tapahtumakahvan alareunan tukahduttamaan loppuraporttiilmoituksen. 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 kahvat ovat aina nelinkertainen?
Lue lisää
Vanha uusi asia: Raymond Chenin käytännön kehitys koko Windowsin kehityksessä (Principal Software Design Engineer Microsoftissa)
Onko jokin asia lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä? Katso koko keskusteluketju täältä.