Página principal » cómo » ¿Por qué no hay ID de proceso de Windows con número impar?

    ¿Por qué no hay ID de proceso de Windows con número impar?

    Si te encanta jugar con Windows y aprender sobre la marcha, es posible que hayas notado que los procesos y las ID de subprocesos de Windows son números pares y múltiplos de cuatro. ¿Porqué es eso? La publicación de preguntas y respuestas de SuperUser de hoy tiene las respuestas a las preguntas de un lector curioso.

    La sesión de Preguntas y Respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, un grupo de sitios web de preguntas y respuestas impulsado por la comunidad..

    La pregunta

    El lector superusuario Peter Hahndorf quiere saber por qué no hay ID de proceso de Windows impares:

    Hay muchas formas de ver las identificaciones de proceso en Windows. Utilizando PowerShell:

    Obtengo este resultado:

    Como puede ver, todos los identificadores de proceso son números pares, no solo eso, son todos múltiplos de cuatro. Puede mirar todo lo que quiera y nunca encontrará una identificación de proceso impar, al menos no en ninguna versión que esté basada en Windows NT. Cuál es la razón para esto?

    ¿Por qué no hay ID de proceso de Windows impares??

    La respuesta

    DavidPostill, colaborador de Superusuario, tiene la respuesta para nosotros:

    ¿Por qué no hay ID de proceso de Windows impares??

    El mismo código que asigna los manejadores de kernel también se usa para asignar identificaciones de proceso y de hilo. Dado que los manejadores de kernel son un múltiplo de cuatro, también lo son las ID de proceso y de hilo.

    ¿Por qué son los procesos y las ID de hilos múltiplos de cuatro?

    En los sistemas operativos basados ​​en Windows NT, los ID de proceso y de subproceso siempre resultan ser un múltiplo de cuatro. Es esto sólo una coincidencia?

    Sí, es solo una coincidencia, y no debe confiar en ella, ya que no forma parte del contrato de programación. Por ejemplo, el proceso de Windows 95 y los ID de hilos no siempre fueron múltiplos de cuatro. En comparación, la razón por la que los manejadores del kernel son siempre un múltiplo de cuatro es parte de la especificación y se garantizará en el futuro previsible.

    Los ID de proceso y de hilo son múltiplos de cuatro como efecto secundario de la reutilización de código. El mismo código que asigna los manejadores de kernel también se usa para asignar identificaciones de proceso y de hilo. Dado que los manejadores del kernel son múltiplos de cuatro, también lo son los ID de proceso y de hilo. Este es un detalle de implementación, así que no escriba el código que se basa en él. Solo te digo que satisfagas tu curiosidad..

    Fuente: ¿Por qué son los procesos y las ID de hilos múltiplos de cuatro?

    ¿Por qué los mangos del núcleo son siempre un múltiplo de cuatro??

    Algo que no es muy conocido es que los dos bits inferiores de los manejadores del kernel siempre son cero; en otras palabras, su valor numérico es siempre un múltiplo de cuatro. Tenga en cuenta que esto se aplica solo a los manejadores de kernel; no se aplica a pseudo-manejadores ni a ningún otro tipo de manejador (manejadores USER, manejadores GDI, manejadores multimedia, etc.). Los manejadores de kernel son cosas que puede pasar a la función CloseHandle.

    La función GetQueuedCompletionStatus implica que al menos el bit inferior de los controladores del kernel siempre sea cero, lo que indica que puede establecer el bit inferior del controlador de eventos para suprimir la notificación de puerto de finalización. Para que esto funcione, el bit inferior normalmente debe ser cero.

    Esta información no es útil para la mayoría de los escritores de aplicaciones, que deberían continuar tratando los manejadores como valores opacos. Las personas que estarían interesadas en los bits de etiquetas son aquellas que están implementando bibliotecas de clase de bajo nivel o que están envolviendo objetos del núcleo dentro de un marco más grande.

    Fuente: ¿Por qué los mangos del núcleo son siempre un múltiplo de cuatro??

    Otras lecturas

    The Old New Thing: desarrollo práctico a lo largo de la evolución de Windows por Raymond Chen (Ingeniero de diseño de software principal en Microsoft)


    ¿Tienes algo que agregar a la explicación? Apaga el sonido en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange con experiencia en tecnología? Echa un vistazo a la discusión completa aquí.