El sistema operativo macOS está diseñado sobre el kernel Darwin, el cual es de código abierto y está basado en una integración entre las tecnologías de Mach y BSD, utilizando diferentes componentes de estos para realizar sus tareas. Para la gestión de procesos, macOS hace uso de su componente proveniente de Mach.
ABSTRACCIONES DE MACH
En macOS, a nivel de procesador se ejecutan las abstracciones propias de Mach, de forma que todas las demás abstracciones (entre estas las de BSD) se “traducen” a la tecnología de Mach. Los principales conceptos lógicos del kernel de Mach para gestión de procesos son:
- Tarea (task): Una tarea es una “unidad de propiedad de recurso”; podría decirse que es una representación lógica del ambiente de ejecución de los procesos.
- Hilo (thread): Un hilo es una “unidad de ejecución”; esto significa que representa el conjunto de operaciones que ejecuta el procesador.
- Procesador (processor): Un procesador es una representación de un procesador físico del computador.
- Conjunto de procesadores (processor set): Un conjunto de procesadores es una agrupación de procesadores (refiriéndose a la abstracción).
- Puerto (port): Un puerto es una abstracción de la comunicación entre procesos y recursos.
La API de Mach brinda estas abstracciones en forma de estructuras (structs en inglés).
Tareas e Hilos
Como se expresó anteriormente, una tarea es el ambiente necesario para uno o más hilos; provee a los hilos que contiene los recursos que necesitan. Es una entidad bastante costosa que representa un conjunto de recursos del sistema. Cabe decir que una tarea no vive por sí sola, sino que necesita de algún hilo para ejecutar alguna instrucción. En palabras simples, es el hilo el que ejecuta instrucciones y no la tarea. Un hilo, en cambio, es una entidad barata de crear, sirve como un punto de control para una tarea, y solo puede estar contenido en una única tarea. Cada hilo tiene acceso a los elementos contenidos dentro de la tarea que lo contiene, y estos elementos los comparte con otros hilos dentro de la misma tarea. En un computador con múltiples procesadores se pueden ejecutar varios hilos de la misma tarea en paralelo.
Una tarea almacena los hilos que contiene, y brinda el ambiente de ejecución para sus hilos mediante puertos. Asimismo, cada procesador almacena la información de los hilos que le corresponden en una cola. Las tareas no son asignadas a un procesador, sino a un conjunto de procesadores, el cual tiene, además, su propia cola de hilos, así como la información de los procesadores que le pertenecen. A cada hilo le corresponde una instancia de la estructura machine_thread, la cual contiene información relevante para la ejecución de los procesos, incluido el bloque de control de procesos.
La comunicación entre hilos y recursos se basa en los puertos. El sistema de comunicación de los puertos se basa en un sistema de emisores y receptores, donde algunos puertos se encargan de enviar las señales mientras que otros las reciben. Además de sus propios puertos, cada tarea tiene ciertos permisos de acceso a los puertos de otros elementos del sistema, haciendo el adecuado manejo de los puertos una cuestión importante de seguridad.
GESTIÓN DE CONCURRENCIA
Programación de Procesos
Para realizar la programación de los procesos, macOS tiene definidos 4 tipos de prioridad para los hilos:
- Normal: Correspondiente a las aplicaciones comunes de usuario.
- Alta prioridad: Correspondiente a ciertos hilos de mayor prioridad a los normales.
- Modo de kernel: Correspondiente a hilos esenciales del kernel del sistema operativo.
- Tiempo real: Correspondiente a hilos cuya ejecución requiere un tiempo específico.
Los niveles de prioridad de cada hilo se clasifican en alguno de estos 4 tipos. macOS gestiona los procesos mediante un conjunto de colas de ejecución, donde se selecciona la cola para un hilo dependiendo de su nivel de prioridad.
Las diferentes API’s del sistema operativo permiten cambiar la prioridad de un hilo (dentro de ciertos límites), cambiar el espacio de memoria disponible para almacenar los resultados de un hilo, e incluso cambiar la metodología de programación misma del hilo, permitiendo elegir entre metodologías tales como FIFO (first in, first out) o RR (round-robin), entre otras.
Las diferentes API’s del sistema operativo permiten cambiar la prioridad de un hilo (dentro de ciertos límites), cambiar el espacio de memoria disponible para almacenar los resultados de un hilo, e incluso cambiar la metodología de programación misma del hilo, permitiendo elegir entre metodologías tales como FIFO (first in, first out) o RR (round-robin), entre otras.
Métodos de Sincronización
macOS maneja dentro de su kernel dos mecanismos para la sincronización:
- Semáforos (semaphores): macOS usa los tradicionales semáforos con contador. Cuando un hilo es activado aparece un semáforo disponible, aunque este no se vaya a usar en ese momento. Hay que tener en cuenta que varios hilos pueden acceder a un semáforo, por lo tanto no siempre que un semáforo cambie y esté disponible significa que el hilo se vaya a ejecutar de inmediato; este puede tener un tiempo de reacción.
- Cerraduras (locks): Son semáforos binarios, donde solo un hilo puede estar haciendo operaciones en él mientras los otros hilos esperan para entrar en él. Existen 3 tipos de cerraduras, las cuales tienen mejor rendimiento que las otras dependiendo de la situación. Las 3 cerraduras son: spinlocks, mutex, read-write locks, spin/sleep locks (este último no está implentado en el kernel de macOS).
CIBERGRAFÍA
http://crypto.cs.mcgill.ca/~simonpie/webdav/ipad/EBook/MacOSX/Mac%20Os%20X%20Internals%20-%20A%20Systems%20Approach%20(2006).pdf
https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/Architecture/Architecture.html
https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/Mach/Mach.html
https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/scheduler/scheduler.html
https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/synchronization/synchronization.html
https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/Architecture/Architecture.html
https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/Mach/Mach.html
https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/scheduler/scheduler.html
https://developer.apple.com/library/content/documentation/Darwin/Conceptual/KernelProgramming/synchronization/synchronization.html
Comentarios
Publicar un comentario