Planificación de Procesos
|
FreeBSD
|
Linux
|
Solaris
|
Unidad
Básica de Planificación
|
Thread
|
Task_struct
|
Kthread_t
|
Prioridad
|
Los
valores bajos de prioridad son mejores. Una prioridad próxima a 0 representa
una alta prioridad
|
A más valor prioridad más alta.
| |
Cola
de ejecución
|
utilizan una cola
"activa" y una cola "expirados"
|
utiliza una cola de envío
por CPU
| |
Determinación
de la prioridad
|
utilizan un cálculo
aritmético basado en el tiempo de ejecución versus el tiempo inactivo de la
hebra
|
realiza una búsqueda en
una tabla
| |
Clases
de Planificación
|
El planificador se escoge en tiempo de compilación
|
el planificador depende de la versión de Linux
|
soporta "clases de
planificación" de forma simultánea en el sistema
|
Gestión de Memoria
|
FreeBSD
|
Linux
|
Solaris
|
Direccionamiento de procesos
|
Describe el espacio de
direcciones de un proceso mediante un vmspace, dividido en secciones lógicas
llamadas regiones
|
Utiliza un descriptor de
memoria para dividir el espacio de direcciones de un proceso en secciones
lógicas llamadas "áreas de memoria"
|
Cada proceso tiene un
"espacio de direcciones" formado por secciones lógicas llamadas
"segmentos"
|
Sistema de Archivos
|
FreeBSD
|
Linux
|
Solaris
|
Abstracción
|
Utilizan
el método de abstracción de datos VFS
|
||
Estructura
de Datos
|
Usan
el principio vnode o “nodo virtual”
|
Utiliza
el principio inodo
|
Planificando y Planificadores
La unidad básica de planificación en Solaris es kthread_t;
en FreeBSD thread; y en Linux task_struct. Solaris representa cada proceso como
un proc_t, y cada hebra dentro de un proceso tiene una kthread_t. Linux
representa procesos (y hebras) con estructuras task_struct. Un proceso con una
sola hebra en Linux tiene una sola task_struct. Un proceso con una sola hebra
en Solaris tiene proc_t, una sola kthread_t, y una klwp_t. La estructura klwp_t
proporciona un área de almacenamiento para el intercambio de hebras entre los
modos de usuario y núcleo. Un proceso con una sola hebra en FreeBSD tiene una
estructura proc, una estructura thread, y una estructura ksegrp. El ksegrp es
un "grupo de entidades planificables por el núcleo" (kernel
scheduling entity group). Realmente, los tres SOs planifican hebras, y una
hebra es una kthread_t en Solaris, una estructura thread en FreeBSD, y una
task_struct en Linux.
Las decisiones de planificación están basadas en la
prioridad. En Linux y FreeBSD, los valores bajos de prioridad son mejores. Una
prioridad próxima a 0 representa una alta prioridad. En Solaris, a más valor
prioridad más alta. La Tabla 1 muestra los valores de prioridad en diferentes
SOs.
Table 1.
Scheduling Priorities in Solaris, Linux, and FreeBSD
Solaris
Priorities Scheduling Class
0-59 Time Shared, Interactive, Fixed, Fair Share Scheduler
60-99 System Class
100-159 Real-Time (note real-time higher than system threads)
160-169 Low level Interrupts
Linux Priorities Scheduling
Class
0-99 System Threads, Real time (SCHED_FIFO, SCHED_RR)
100-139 User priorities (SCHED_NORMAL)
FreeBSD Priorities Scheduling Class
0-63 Interrupt
64-127 Top-half Kernel
128-159 Real-time user (system threads are better priority)
160-223 Time-share user
224-255 Idle user
Los tres SOs favorecen los procesos/hebras interactivos. Las
hebras interactivas se ejecutan con mejor prioridad que las hebras con trabajos
intensivos para la CPU, pero tienden a ejecutarse durante franjas de tiempo más
pequeñas. Solaris, FreeBSD, y Linux utilizan una cola de ejecución por CPU.
FreeBSD y Linux utilizan una cola "activa" y una cola
"expirados".
Las hebras se planifican con prioridad desde la cola
activa. Una hebra pasa de la cola activa a la cola expirados cuando consume la
franja de tiempo asignada (y posiblemente en otros momento para evitar la
inanición). Cuando la cola activa está vacía, el kernel intercambia la cola
activa y la de procesos expirados. FreeBSD tiene una tercera cola para las
hebras "idle". Las hebras se ejecutan en esta cola sólo cuando las
otras dos colas están vacias. Solaris utiliza una cola de envío por CPU.
Si una
hebra consume su franja de tiempo, el núcleo le asigna una nueva prioridad y la
devuelve a la cola de envío. Las colas de ejecución para los tres SOs almacenan
las hebras ejecutables en diferentes listas enlazadas, una por prioridad.
(Aunque FreeBSD utiliza una lista para cuatro prioridades, tanto Solaris como
Linux utilizan una lista separada por cada prioridad.)
Linux y FreeBSD utilizan un cálculo artimético basado en el
tiempo de ejecución versus el tiempo inactivo de la hebra (como una medida de
la "interactividad") para obtener la prioridad de la hebra. Solaris
realiza una búsqueda en una tabla. Ninguno de los tres SOs soporta "gang
scheduling"2. En lugar de planificar n hebras, cada SO planifica, la
próxima hebra a ejecutar.
Los tres SOs tienen mecanismos para sacar partido de
la cache (afinidad) y balanceo de carga. En las CPUs con hyperthreading3
FreeBSD incorpora un mecanismo que ayuda a mantener hebras en la misma CPU.
Solaris tiene un mecanismo similar, pero está bajo control del usuario y la
aplicación, y no está restringido a hyperthreads (llamados "conjuntos de
procesadores" en Solaris y "grupos de procesadores" en FreeBSD).
Una gran diferencia entre Solaris y los otros dos SOs es la
capacidad para soportar "clases de planificación" de forma simultánea
en el sistema. Los tres SOs
soportan Posix SCHED_FIFO, SCHED_RR, y SCHED_OTHER (o SCHED_NORMAL). SCHED_FIFO
y SCHED_RR normalmente se utilizan en las hebras "tiempo real".
(Tanto Solaris como Linux soportan apropiación en el núcleo3 para asistir a las
hebras de tiempo real.) Solaris tiene soporte para una clase "prioridad
fija", "clase de sistema" para las hebras de sistema (como las
hebras de paginación), una clase "interactiva" utilizada por hebras
que se ejecutan en un entorno de ventanas bajo el control del servidor X, y el
planificador de reparto limpio (Fair Share Scheduler) para asistir en la
gestión de recursos. Consulte priocntl(1) para obtener información sobre el uso
de estas clases y una visión general de las características de cada clase.
Consulte FSS(7) para obtener información específica del Fair Share Scheduler.
El planificador de FreeBSD se escoge en tiempo de compilación, y en Linux el planificador
depende de la versión de Linux.
La habilidad de añadir nuevas clases de planificación al
sistema tiene un precio. En todos los lugares del núcleo en los que se puede
tomar una decisión de planificación (excepto para escoger la hebra a ejecutar)
se realiza una llamada indirecta a código específico de la clase de
planificador. Por ejemplo, cuando una hebra se va a dormir, llama a código
dependiente de la clase de planificador que realiza la acción necesaria para
dormir en la clase. En Linux y FreeBSD, el código de planificación símplemente
realiza la acción necesaria. No hay necesidad de una llamada indirecta. La capa
extra significa un pequeño aumento de la sobrecarga de planificación en Solaris
(pero se obtienen más características).
Gestión de la memoria y Paginación
En Solaris cada proceso tiene un "espacio de
direcciones" formado por secciones lógicas llamadas "segmentos".
Los segmentos del espacio de direcciones de un proceso se pueden ver a través
de pmap(1). Solaris divide el código de
gestión de memoria y las estructuras de datos en la parte independiente y
dependiente de la plataforma.
La porción específica de la plataforma de la
gestión de memoria se encuentra en la capa HAT (hardware address translation) o
traducción de direcciones físicas. FreeBSD describe el espacio de direcciones
de un proceso mediante un vmspace, dividido en secciones lógicas llamadas
regiones. Las porciones dependientes del hardware están en el módulo
"pmap" (physical map) mapa físico y las rutinas "vmap"
manejan las porciones y estructuras de datos independientes del hardware. Linux
utiliza un descriptor de memoria para dividir el espacio de direcciones de un
proceso en secciones lógicas llamadas "áreas de memoria" que
describen el espacio de direcciones del proceso. Linux también tiene un comando
pmap para examinar el espacio de direcciones de un proceso.
Los segmentos, regiones y áreas de memoria están delimitados
por:
• Dirección Virtual del inicio de la zona.
• Su ubicación dentro de un archivo / objeto de que el
sector / región / mapas de la zona de memoria.
• Permisos.
• Tamaño de la asignación.
Por ejemplo, el texto de un programa se encuentra en una
zona de segmento / región / memoria. Los mecanismos en los tres sistemas
operativos para la gestión de los espacios de direcciones son muy similares,
pero los nombres de las estructuras de datos son completamente diferentes. Una
vez más, más el código de Linux es dependiente de la máquina que en el caso de
los otros dos sistemas operativos.
Sistemas de archivos
Los tres sistemas operativos utilizan una capa de
abstracción de datos para ocultar los detalles de implementación del sistema de
archivos de aplicaciones. Solaris y FreeBSD llaman VFS este mecanismo
("sistema de ficheros virtual") y la estructura de datos es el
principio vnode, o "nodo virtual." Cada archivo que se accede en
Solaris o FreeBSD tiene un vnode asignado. Además de la información de archivo
genérico, el vnode contiene enlaces a archivos específicos del sistema de
información. Linux también utiliza un mecanismo similar, también llamado VFS
(para el "interruptor de archivos virtual"). En Linux, la estructura
de datos del sistema de archivos independiente es un inodo. Esta estructura es
similar a la vnode en Solaris / FreeBSD. (Tenga en cuenta que hay un inodestructure
en Solaris / FreeBSD, pero estos son los datos del sistema de archivos que
dependen de los sistemas de archivos UFS).Linux tiene dos estructuras
diferentes, una para operaciones de archivo y otra para operaciones de inodos.
Solaris y FreeBSD se combinan estos como "operaciones vnode."
VFS permite la implementación de muchos tipos de sistemas de
archivos en el sistema. Esto significa que no hay razón por la que uno de estos
sistemas operativos no podría acceder a los sistemas de archivos de los otros
sistemas operativos. Por supuesto, esto requiere que las rutinas del sistema de
archivos y estructuras de datos relevantes puedan ser soportados por la VFS del sistema operativo en cuestión. Los
tres sistemas operativos permiten el apilamiento de los sistemas de archivos.
Bibliografía:
http://elpuig.xeill.net/Members/vcarceler/articulos/una-comparativa-de-los-nucleos-solaris-linux-y-freebsd
Bibliografía:
http://elpuig.xeill.net/Members/vcarceler/articulos/una-comparativa-de-los-nucleos-solaris-linux-y-freebsd