Pagina inicial » como » Por que não há IDs de processo do Windows ímpares?

    Por que não há IDs de processo do Windows ímpares?

    Se você adora mexer com o Windows e aprender como funciona, pode ter notado que os IDs de processos e encadeamentos do Windows têm numeração par e múltiplos de quatro. Por que é que? O post de perguntas e respostas do SuperUser de hoje tem as respostas para as perguntas de um curioso leitor.

    A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..

    A questão

    O leitor do SuperUser Peter Hahndorf quer saber por que não existem IDs de processo do Windows de numeração ímpar:

    Há muitas maneiras de examinar os IDs de processo no Windows. Usando o PowerShell:

    Eu recebo este resultado:

    Como você pode ver, todos os IDs de processo são numerados por pares, não apenas isso, eles são todos múltiplos de quatro. Você pode parecer tão difícil quanto quiser e nunca encontrará um ID de processo de numeração ímpar, pelo menos não em qualquer versão que seja baseada no Windows NT. Qual é a razão para isto?

    Por que não há IDs de processo do Windows de numeração ímpar?

    A resposta

    DavidPostill, colaborador do SuperUser, tem a resposta para nós:

    Por que não há IDs de processo do Windows de numeração ímpar?

    O mesmo código que aloca as alças do kernel também é usado para alocar IDs de processos e encadeamentos. Como as alças de kernel são múltiplas de quatro, também são IDs de processo e encadeamento.

    Por que os IDs de processo e encadeamento são múltiplos de quatro?

    Nos sistemas operacionais baseados no Windows NT, os IDs de processo e encadeamento sempre são um múltiplo de quatro. Isso é apenas uma coincidência?

    Sim, é apenas uma coincidência, e você não deve confiar nisso, pois não faz parte do contrato de programação. Por exemplo, o processo do Windows 95 e os IDs de encadeamento não eram sempre múltiplos de quatro. Por comparação, a razão pela qual as alças do kernel são sempre um múltiplo de quatro é parte da especificação e será garantida para o futuro previsível.

    Os IDs de processo e encadeamento são múltiplos de quatro como um efeito colateral da reutilização de código. O mesmo código que aloca as alças do kernel também é usado para alocar IDs de processos e encadeamentos. Como os manipuladores de kernel são múltiplos de quatro, também são IDs de processo e encadeamento. Esse é um detalhe de implementação, portanto, não escreva código que dependa dele. Estou apenas lhe dizendo para satisfazer sua curiosidade.

    Fonte: Por que os IDs de processo e encadeamento são múltiplos de quatro?

    Por que o kernel é sempre um múltiplo de quatro?

    Algo que não é muito conhecido é que os dois bits inferiores das alças do kernel são sempre zero; Em outras palavras, seu valor numérico é sempre um múltiplo de quatro. Observe que isso se aplica somente às alças do kernel; não se aplica a pseudo-alças ou a qualquer outro tipo de alça (identificadores USER, alças GDI, alças de multimídia, etc.). Alças do kernel são coisas que você pode passar para a função CloseHandle.

    Que pelo menos o bit inferior de identificadores de kernel seja sempre zero é implícito pela função GetQueuedCompletionStatus, que indica que você pode definir o bit inferior do manipulador de eventos para suprimir a notificação de porta de conclusão. Para que isso funcione, o bit inferior deve normalmente ser zero.

    Essas informações não são úteis para a maioria dos criadores de aplicativos, que devem continuar a tratar os identificadores como valores opacos. As pessoas que estariam interessadas em tags bits são aquelas que estão implementando bibliotecas de classes de baixo nível ou estão agrupando objetos do kernel dentro de uma estrutura maior..

    Fonte: Por que o kernel é sempre um múltiplo de quatro?

    Leitura Adicional

    The Old New Thing: Desenvolvimento Prático Através da Evolução do Windows por Raymond Chen (Engenheiro Principal de Design de Software na Microsoft)


    Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.