Windows Internals
Last updated
Last updated
El conocimiento de los internals de Windows es fundamental para comprender cómo interactúan las aplicaciones con el sistema operativo a un nivel profundo, especialmente cuando se trata de la gestión de procesos y subprocesos (threads). Esta sección explora cómo Windows maneja estos aspectos y cómo las APIs de Windows interactúan con estas funciones internas.
Un proceso es una instancia de un programa en ejecución. Cada proceso tiene su propio espacio de direcciones de memoria, lo que lo aísla de otros procesos. Los procesos son gestionados por el kernel de Windows y son fundamentales para la ejecución de cualquier software en el sistema.
Creación de Procesos:
Windows utiliza la API CreateProcess
para crear nuevos procesos. Esta función inicializa una nueva instancia de un programa, asignando memoria y recursos necesarios para su ejecución.
Durante la creación de un proceso, se asignan varios descriptores de recursos, incluidos los identificadores de archivos, handles de procesos, y el espacio de memoria del proceso.
Espacio de Direcciones de Memoria:
Cada proceso en Windows tiene su propio espacio de direcciones virtuales, que es protegido por el sistema operativo. Esto significa que un proceso no puede acceder directamente a la memoria de otro proceso sin permisos adecuados.
Las funciones como VirtualAlloc
y VirtualFree
se utilizan para asignar y liberar memoria en estos espacios.
Manejo de Recursos del Proceso:
El sistema operativo se encarga de gestionar los recursos del proceso, como la memoria, las tareas de entrada/salida y las conexiones de red. Las APIs de Windows proporcionan formas de interactuar con estos recursos, como ReadFile
, WriteFile
, y otras funciones del I/O.
Un subproceso es la unidad más pequeña de ejecución dentro de un proceso. Mientras que un proceso puede contener múltiples subprocesos, cada uno de ellos tiene su propio conjunto de registros y contador de programa, pero comparte el mismo espacio de direcciones de memoria del proceso.
Creación de Subprocesos:
Windows ofrece la función CreateThread
para crear nuevos subprocesos dentro de un proceso. Esta API permite asignar recursos al subproceso y especificar la función que se ejecutará.
Cada subproceso tiene su propio contexto de ejecución, pero comparte la memoria y los recursos del proceso principal.
Manejo de Subprocesos:
El sistema operativo gestiona los subprocesos mediante el planificador de hilos (scheduler), que decide cuándo y en qué orden se ejecutan los subprocesos en función de la prioridad y los recursos disponibles.
Sincronización de Subprocesos:
Cuando varios subprocesos necesitan acceder a los mismos recursos, se deben usar mecanismos de sincronización como mutexes, semaforos y eventos para evitar condiciones de carrera. Las APIs de Windows proporcionan funciones como CreateMutex
y WaitForSingleObject
para facilitar estas tareas.
El scheduler de Windows es el componente del sistema operativo encargado de asignar tiempo de CPU a los diferentes procesos y subprocesos en ejecución. Este proceso de planificación es fundamental para la gestión de recursos y la concurrencia de las aplicaciones.
Planificación de Subprocesos:
El scheduler utiliza una política de planificación preemptiva, lo que significa que un subproceso en ejecución puede ser interrumpido y reemplazado por otro si es necesario. Esto asegura que los subprocesos con alta prioridad o que han estado esperando más tiempo reciban tiempo de CPU.
Prioridades de Subprocesos:
Cada subproceso tiene una prioridad que indica cuánta CPU se le asignará. El scheduler de Windows ajusta la prioridad de los subprocesos dependiendo de varios factores, como la cantidad de tiempo que un subproceso ha estado ejecutándose o si está esperando un recurso.
APIs como SetThreadPriority
permiten a los programadores establecer la prioridad de los subprocesos, lo que influye directamente en su asignación de tiempo de CPU.
Colas de Subprocesos:
El scheduler de Windows utiliza colas de subprocesos en función de la prioridad para gestionar los hilos en ejecución. Estos subprocesos pueden estar en una de las siguientes colas:
Cola de ejecución inmediata: Subprocesos listos para ejecutarse.
Cola de espera: Subprocesos que están esperando por recursos (por ejemplo, I/O o sincronización).
Cola de suspensión: Subprocesos que están esperando ser reanudados tras una operación.
Context Switch:
Durante la ejecución, cuando el scheduler decide que un subproceso debe ser reemplazado, realiza un cambio de contexto (context switch). Este proceso implica guardar el estado del subproceso actual (como los registros y el contador de programa) y cargar el estado del subproceso que tomará la CPU.
Los cambios de contexto son una parte crítica en la multitarea y afectan directamente el rendimiento general del sistema.