Główna » jak » Dlaczego nie ma niepoprawnych identyfikatorów procesów Windows?

    Dlaczego nie ma niepoprawnych identyfikatorów procesów Windows?

    Jeśli uwielbiasz majsterkowanie w systemie Windows i uczenie się z dowolnego miejsca, możesz zauważyć, że identyfikatory procesów i wątków systemu Windows mają numer parzysty i wielokrotność czterech. Dlaczego? Dzisiejszy post z pytaniami i odpowiedziami dla SuperUser zawiera odpowiedzi na ciekawe pytania czytelnika.

    Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupowania witryn z pytaniami i odpowiedziami.

    Pytanie

    Czytnik SuperUser Peter Hahndorf chce wiedzieć, dlaczego nie ma niepoprawnych identyfikatorów procesów Windows:

    Istnieje wiele sposobów sprawdzania identyfikatorów procesów w systemie Windows. Korzystanie z PowerShell:

    Otrzymuję ten wynik:

    Jak widać, wszystkie identyfikatory procesów są parzyste, nie tylko to, wszystkie są wielokrotnościami czterech. Możesz wyglądać tak ciężko, jak chcesz i nigdy nie znajdziesz identyfikatora procesu o numerach nieparzystych, przynajmniej nie w żadnej wersji opartej na systemie Windows NT. Jaki jest tego powód?

    Dlaczego nie ma niepoprawnych identyfikatorów procesów systemu Windows?

    Odpowiedź

    Pomocnik SuperUser DavidPostill ma dla nas odpowiedź:

    Dlaczego nie ma niepoprawnych identyfikatorów procesów systemu Windows?

    Ten sam kod, który przydziela uchwyty jądra, służy również do przydzielania identyfikatorów procesów i wątków. Ponieważ uchwyty jądra są wielokrotnością czterech, tak samo są identyfikatory procesów i wątków.

    Dlaczego identyfikatory procesów i wątków są wielokrotnością czterech?

    W systemach operacyjnych Windows NT identyfikatory procesów i wątków zawsze są wielokrotnością czterech. Czy to tylko zbieg okoliczności?

    Tak, to tylko zbieg okoliczności i nie powinieneś na nim polegać, ponieważ nie jest to częścią umowy programistycznej. Na przykład identyfikator procesu i wątku systemu Windows 95 nie zawsze był wielokrotnością czterech. Dla porównania, powód, dla którego jądro obsługuje zawsze wielokrotność czterech, jest częścią specyfikacji i będzie zagwarantowany w przewidywalnej przyszłości.

    Identyfikatory procesów i wątków to wielokrotności czterech jako efekt uboczny ponownego użycia kodu. Ten sam kod, który przydziela uchwyty jądra, służy również do przydzielania identyfikatorów procesów i wątków. Ponieważ uchwyty jądra są wielokrotnościami czterech, są to także identyfikatory procesów i wątków. Jest to szczegół implementacji, więc nie pisz kodu, który na nim polega. Po prostu mówię ci, żebyś zaspokoił swoją ciekawość.

    Źródło: Dlaczego identyfikatory procesów i wątków są wielokrotnością czterech?

    Dlaczego jądro obsługuje zawsze wielokrotność czwórki?

    Coś, co nie jest dobrze znane, to to, że dwa dolne bity uchwytów jądra są zawsze zerowe; innymi słowy, ich wartość liczbowa jest zawsze wielokrotnością czterech. Zauważ, że odnosi się to tylko do uchwytów jądra; nie ma zastosowania do pseudo-uchwytów ani do żadnego innego typu uchwytu (obsługa USER, uchwyty GDI, uchwyty multimedialne itp.). Uchwyty jądra to rzeczy, które można przekazać do funkcji CloseHandle.

    To, że co najmniej dolny bit uchwytów jądra ma zawsze wartość zero, jest implikowane przez funkcję GetQueuedCompletionStatus, która wskazuje, że można ustawić dolny bit uchwytu zdarzenia, aby wyłączyć powiadamianie o porcie zakończenia. Aby to zadziałało, dolny bit musi normalnie wynosić zero.

    Ta informacja nie jest przydatna dla większości programów piszących, które powinny traktować uchwyty jako wartości nieprzezroczyste. Ludzie, którzy byliby zainteresowani bitami znaczników, to ci, którzy implementują biblioteki klas niskiego poziomu lub owijają obiekty jądra w większe ramy.

    Źródło: Dlaczego jądro obsługuje zawsze wielokrotność czwórki?

    Dalsze czytanie

    The Old New Thing: Praktyczny rozwój w całym systemie Windows Raymonda Chena (Główny inżynier ds. Projektowania oprogramowania w firmie Microsoft)


    Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.