Planificacion del Procesador
Guillermo Cruz  y Harif Benuel Reyes
gcruz66@hotmail.com
harifreyes@yahoo.com

Resumen. La planificación de procesos es el encargado de elegir, en tiempo de procesador el procesos que tiene mayor prioridad en el sistema y que esté listo para ser ejecutado.

Uno de los objetivos de los sistemas operativos multiprogramados es proporcionar una utilización eficiente de los recursos de los procesos, permitiendo a los procesos un uso de ellos que evite situaciones de inanición. 

La planificación de procesos, determina los criterios de elección de los procesos a usar el CPU. El rendimiento de una planificación de procesos dependerá de los programas y prioridades de sus procesos, ya que estos programas pueden estar orientados a cálculos o pueden ser interactivos. Las aplicaciones de tiempo real, tienen requisitos en el uso del procesador, no se pueden comparar con las aplicaciones habituales del sistema.

La planificación de procesos es independiente, del número de procesos, o de una plataforma multiprocesador, ya que multiprocesador tiene como objetivo el equilibrio de la carga de los procesadores, para una mejor utilización de recursos, esto mantiene a cada proceso en un mismo procesador durante su tiempo de ejecución. 

Planificación a largo plazo: es cuando se crea un proceso nuevo, se puede decidir criterios para su planificación, como la prioridad y quantum.
Planificación a mediano plazo: cuando sale un proceso de memoria pro problemas de espacio, hace que esto sea panificable.
Planificación a corto plazo: cuando un procesos abandona el CPU, toma la decisión de que proceso planificar de lo estableció en la panificación y su valor de parámetros.

Aspectos a tomar en cuenta en el rendimiento de la planificación:


        Eficiencia.
        Tiempo de finalización.
        Productividad.
        Tiempo de espera.
        Latencia (Tiempo de respuesta).
        Tasa del CPU.
        Equidad.






Abstract. Process planning is responsible for choosing, in processor time, the processes that have the highest priority in the system and that are ready to be executed.

One of the objectives of multiprogrammed operating systems is to provide an efficient use of process resources, allowing processes to use them to avoid situations of starvation.

Process planning determines the criteria for choosing the processes to be used by the CPU. The performance of a process planning will depend on the schedules and priorities of your processes, as these programs can be calculation oriented or interactive. Real-time applications, which have processor usage requirements, can not be compared to typical system applications.

The process planning is independent, the number of processes, or a multiprocessor platform, since multiprocessor aims to balance the load of processors, for a better utilization of resources, this keeps each process in the same processor during its execution time.

Long-term planning: when you create a new process, you can decide criteria for your planning, such as priority and quantum.
Medium-term planning: when a memory process pro problems of space, makes this breadmaking.
Short-term planning: when a process leaves the CPU, it makes the decision of which process to plan of it established in the baking and its value of parameters. 

Aspects to be taken into account in the performance of planning:
• Efficiency.
• End time.
• Productivity.
• Wait time.
• Latency (Response Time).
• CPU rate.
• Equity.



Palabras Claves.

·         Proceso.
·         Hilo.
·         Planificación.
·         Algoritmo.
·         Núcleo (Kernel).
·         Prioridad.
·         Eficiente.
·         Gestión.
·         Multitarea.
 




Planificación de procesos en Linux (Ubuntu)


La planificación de procesos se lleva a cabo con la función Schedule ( ), existen tres tipos de procesos estos son:

·         Tiempo real: son los procesos cuyo tiempo de respuesta tiene que estar limitado para que no exceda un tiempo máximo.
·         Interactivos: no utilizan bastante tiempo, aunque hay momentos que requieren bastante tiempo y la respuesta tiene que ser rápida, ya que el usuario está esperando que su proceso esté listo.
·         Segundo plano: estos procesos no tienen interacción con el usuario y el tiempo de respuesta no es un tiempo crítico.

La planificación en Linux influye en el comportamiento y diseño del subsistema de memoria, una razón para que tengan un funciona miento correcto y un óptimo comportamiento, la planificación de Linux reparte el procesador para todos los procesos de forma ecuánime.

Los objetivos de la planificación de procesos en Linux:
Maximizar la eficiencia del procesador, para incrementar la utilización del procesador se tiene que incrementar el nivel de multiprogramación.

Permite un menor tiempo de ejecución, además de planificar un tiempo menor de ejecución en los procesos, los ejecuta según su prioridad, el procesador debe distinguir los procesos por Enterada y salida y los procesos limitados, en el sistema operativo Linux respeta las prioridades de los procesos, el kernel distingue entre trabajos planificados por batch y tareas interactivas.
  


El tiempo de espera de un proceso es la suma del tiempo de servicio y el tiempo de espera en la cola de procesos que están ejecutando. El tiempo de respuesta debe ser menor, Linux trata de que el tiempo de respuesta sea bajo aunque siempre tiene un retraso.

El planificador de procesos debe ser predecible para los procesos con prioridades. El rendimiento baja poco a poco al aumentar el número de procesos a cargar.

En Linux se utiliza el Process Scheduler (SCHED) este es el componente del kernel, su función es de controlar el acceso de procesos al CPU. Cada uno de los procesos en Linux son divididos en categorías, según su prioridad, estas categorías en que se dividen los procesos son: interactivos, por lotes y de tiempo real.

Cuando se invoca la función Schedule() cuando se cambia el estado de un proceos o un nuevo proceos esta en la cola de los procesos que están preaparados para ser ejecutados o en cualquier situcaion que los procesos tengan un cambio.

La planificación de los procesos puede cambiar en el tiempo de ejecución, como se mencionó en el primer parrado se manejan tres tipos de planificación para los procesos en tiempo real, estos son: SCHED_NORMAL, SCHED_FIFO, SCHED_RR.

SCHED NORMAL es lo clásico de Unix, este no aplica en tiempo real. Toma en cuenta las prioridades y según los procesos que tienen más tiempo en el sistema su prioridad va disminuyendo, es una planificación de tipo Round Robín cada proceso tiene un quantum distinto, en esta planificación se intenta potenciar el tiempo de respuesta de los procesos interactivos.

En tiempo real se debe temer un tiempo de respuesta eficiente, debido a esto los procesos son más prioritarios del sistema, los procesos deben de tener un tiempo más efectivo y eficiente para la ejecución de cada proceso. Existen dos planificaciones: SCHED_FIFO, SCHED_RR.

Los Sistemas operativos de Linux antiguos eran prácticamente sencillos y su objetivo era seleccionar el proceso que le quedaba mayor cantidad de quantum por consumir, estando en primer lugar los procesos interactivos.

La planificación actual de procesos es mucho más eficiente en cuanto al número de procesos y de procesadores. Algunas características son:
·         Los procesos tienen un rango de prioridad entre 100 como máxima prioridad y 139 como mínima.
·         Existe un prioridad estática esta determina el quantum del proceso si la prioridad es menor a 120 entonces su quantum es (140-P*)20, sino es (140-P)*5.
·         Cada procesos tiene un bono de interactividad de 0 a 10 la cual modifica la prioridad estática para obtener una prioridad dinámica, esta prioridad la utiliza el planificador para elegir el proceso a ejecutar.


El tiempo en que el proceso pasa a estado de bloqueado TASK_INTERRUPTIBLE no cuenta igual que el proceso que pasa por el estado TASK_ININTERRUPTIBLE.




Para evitar que los procesos de menos prioridad tengan una inanición, y para que los procesos interactivos se activen, se gestiona dos colas de procesos. La cola de los procesos activos, son aquellos según el quantum no ha expirado, la cola de los procesos que su quantum han expirado el planificador no lo elige, hasta que terminen de ejecutarse los procesos activos, los procesos expirados se activaran son su quantum relleno de nuevo.
SCHED FIFO utiliza el algoritmo FIFO primero en entrar primero en salir, los procesos entran en una cola y ahí esperan hasta que se ejecutan secuencialmente, se calcula el tiempo para cada proceso, este tipo de planificación no fuerza a los procesos a abandonar el procesador, se utiliza en procesos de tiempo real.

Cuando un proceso pasa a estado de bloqueado, se elige el siguiente proceso para ejecutarlo. En otros casos se activa un flag llamado TIF_NEED_RESCHED. Se utiliza esta función scheuduler_tick() cuando el procesos en ejecución ha agotado su quantum, con try_to_wake:up() cuando un proceso está activo y su prioridad es más alta que la del procesos que está en ejecución.

La planificación es parte del núcleo o kernel esta decide qué proceso será ejecutado por el procesador. El planificador de Linux utiliza tres tipos de planificación, una es para procesos normales y las otras dos planificaciones son para procesos en tiempo real, cada proceso tiene una prioridad esta prioridad puede cambiarse atreves de llamadas al sistema.

En el sistema operativo de Linux el objetivo es poder manejar los procesos en segundo plano, aplicaciones interactivas y en tiempo real, este sistema operativo está diseñado para hacer más eficiente el rendimiento. Aunque el rendimiento en procesos con manejo de interrupciones es deficiente producen tiempo de espera de larga duración y sus técnicas para mejorar el rendimiento de tiempo.


Nice ( ) en Linux

Esta función cambia la prioridad de los procesos, un valor alto significa que tiene una prioridad baja y menor tiempo en CPU, solo el súper usuario puede especificar un incremento negativo o un aumento de prioridad, si el procesos tiene un valor bajo se le da una prioridad más alta y más tiempo en CPU.

Los valores de prioridad están entre -20 y 19. El valor por defecto para los procesos suele ser de valor 0. NICE ( ) es útil cuando varios procesos están demandando más recursos de los que el CPU puede proporcionar. Un proceso de mayor prioridad tendrá una parte más grande de tiempo de CPU que un proceso de prioridad inferior.


Planificación de procesos en Android

La planificación de procesos en el Sistema operativo de Android, su funcionamiento está basado al núcleo 2.6.x  de Linux, en este sistema operativo surgen una serie de problemas con los procesos y los tiempo de respuesta ya que si se tiene muchas aplicaciones instaladas en el sistema, este empieza a ralentizar muchos procesos, esto sucede debido a que cuando se instala una aplicación muchas veces esta queda funcionando en segundo plano esperando que vuelva a utilizarse o solicitar una función,  en vez de cerrar completamente la aplicación y volver a abrir cuando se vuelva a necesitar, esto ocasiona que se sature la memoria debido a la cantidad de procesos que están en espera y esto hace que sea lento el funcionamiento del sistema operativo.

Algunas aplicaciones deben tener hilos en segundo plano, un ejemplo es Google Maps, Gmail o prácticamente cualquier aplicación que está activa para dar un tipo de notificación y esto satura la memoria.

Android utiliza un entorno de ejecución, este maneja el tiempo de vida de cada proceso en memoria. Android asegura la respuesta de la aplicación, deteniendo y eliminando a los procesos que hacen lenta la fluidez y libera recursos para los procesos o aplicaciones  de mayor prioridad.

Dalvik la máquina virtual de Android

Android utiliza una máquina virtual llamada Dalvik, esta ejecuta los procesos independientes, Dalvik se basa en registros que ha sido optimizada para asegurar que un dispositivo sea capaz de ejecutar múltiples procesos de manera eficiente. Android utiliza su propia maquina virtual para asegurar  que la multitarea se ejecutan eficientemente.

Todo el hardware de un Sistema Android y los accesos a los servicios del sistema se gestiona mediante Dalvik como un intermedio. Esta máquina virtual organiza la ejecución de las aplicaciones.

Prioridad de los Procesos en Android

Cada proceso tiene una prioridad que solicita una cantidad de recursos de las aplicaciones almacenadas en el sistema. Los procesos que tienen una prioridad baja se matan en primer lugar, los procesos pueden tener una dependencia en un proveedor o un servicio, los cuales son suministrados por una segunda aplicación, la segunda aplicación tendrá una prioridad más alta que la aplicación que solicita este servicio. Las aplicaciones se mantienen en funcionamiento y en memoria hasta que el sistema solicita sus recursos para que puedan ser utilizadas por otras aplicaciones.

Prioridad de los procesos

La planificación de procesos determina a que procesos puede eliminar, debido a esto Android asigna prioridad a sus procesos

Procesos activos: también llamados en primer plano son los que tienen una interacción con el usuario. Contiene la actividad ejecutada en la pantalla del usuario que está en primer plano y con la cual interactúa en tiempo real, este método es llamado onResume(). Características de los procesos activos:
·         Tienen un estado activo (Activity), están en primer plano y responden a eventos del usuario.
·         Tiene un controlador de eventos llamado ONRECEIVE, son los servicios, actividades o receptores que ejecuta.
·         ONSTART son los servicios que se están ejecutando

Procesos visibles: estos procesos no están en primer plano ni responden a eventos del usuario, los procesos visibles se eliminan en circunstancias extremas para poder permitir que los procesos activos continúen ejecutándose. Es un proceso que aloja una actividad que no se está ejecutando en primer plano es decir su método onPause().
Procesos en segundo plano: son los procesos que no son visibles y están en ejecución. Son los procesos que se ejecutan cuando un servicio ha sido llamado. Background Process es un proceso que contiene una actividad que actualmente no es visible por el usuario y que no tiene una prioridad alta.
 


Procesos Vacíos: estos mejoran el rendimiento del sistema, Android retiene aplicaciones en memoria después de que estos han sido cerrados, estos se mantienen en memoria cache para mejorar el tiempo de respuesta de las aplicaciones al empezar a ejecutarse. Son los procesos que no tiene o  aloja ningún tipo de componente. El sistema elimina comúnmente este tipo de procesos para tener memoria disponible.


Planificación eficiente de procesos en Android

Android gestiona las aplicaciones que tiene activas y se ejecutan en segundo plano, segundo plano quiere decir que el sistema cierra las aplicaciones cuando se necesita más memoria, para que no sea necesario utilizar la memoria secundaria. Los usuarios que utilizan un sistema operativo Android informan de que la planificación de procesos en Android no es muy eficiente, ya que muchas veces tiene muchos procesos en ejecución y esto ocasiona una lentitud en el dispositivo.




















Planificación de procesos en IOS

Este sistema operativo utiliza la programación cooperativa por subprocesos, donde un proceso controla múltiples subprocesos cooperativos y también proporciona programación preventiva para tareas de multiprocesamiento. El kernel utiliza un algoritmo de planificación preventivo. Todos los procesos de Procces Manager se ejecutan dentro de una tarea multiprocesamiento que es llamada “tarea azul”. Utiliza un algoritmo Round Robín, un proceso tiene el control del procesador a otro proceso llamando explícitamente a una función de bloque WAITNEXTEVENT. Cada proceso tiene copia del Thread Manager este programa los subprocesos del proceso de forma cooperativa, un hilo produce el control del procesador a otro hilo llamando YieldToAnyThreado, YiedToThread.

IOS es un sistema operativo que se deriva de MAC OS X, está basado en Darwin BSD, un sistema operativo Unix, el núcleo está basado en MACH y se encarga de todos los aspectos del sistema operativo. Se encarga de:

·         Gestiona el acceso a red.
·         Gestiona el sistema de archivos.
·         Gestiona la memoria virtual.
·         Gestiona hilos, procesos, comunicación entre procesos y manejo de la memoria.
·         Gestiona los procesos que interactúan con el hardware.

La planificación de los procesos lo hace mediante colas de prioridades de los procesos, y la gestión de la memoria por medio de paginación. Cuando 2 o más procesos tienen la misma prioridad se ejecutan según sea su orden de llegada. Las prioridades de los procesos son:

·         Critico
·         Alto
·         Medio
·         Bajo

Cuando un proceso que se ejecuta se suspende, el planificador recupera el control del CPU y utiliza un algoritmo para seleccionar el siguiente proceso.

El sistema operativo IOS provee interfaces basadas en lenguaje C, en las cuales se puede acceder a características de un nivel bajo del sistema operativo, por medio de la biblioteca Libsystem, las cuales dan soporte a:

·         Acceso al sistema de archivos.
·         Asignación de memoria.
·         Threading o hilos.
·         Red.
·         Manejo de E/S.

Procesos permitidos

IOS permite algunos procesos:
·         Servicios de locaclizacion. Framework:CoreLocation.
·         Audio. Framework: Mediaplayer.
·         Accesorios externos. Framework: ExternalAccessory
·         Voip.







Multitarea en IOS

Esta función solo la tiene la versión IOS 4 y superiores. Las aplicaciones que son ejecutadas en el sistema, no terminan de ejecutarse, si se ejecutan otras aplicaciones consecuentemente, es tas aplicaciones pasan a un segundo plano o background, La transición del primer plano al segundo plano y de forma inversa es posible mediante el uso de UIKIT.

UIKIT tiene las herramientas básica que se necesitan para que sean implementados los gráficos, los eventos de las aplicaciones, se basa en la infraestructura de la que se encentra en el Mac OS X, incluyendo el manejo de archivos

Estados de ejecución en IOS

StartupITems: se lanza justo al final de los procesos de arranque, pero antes de que inicie sesión. Este brinda servicios a los usuarios del sistema

Launchd/Acciones: no muere al terminar la carga del sistema, permanece activo y se encarga de lanzar procesos como modificación de fichero, cargas de fichero, finalización de aplicaciones, LoginWindows proceso que carga la pantalla de login.

LoginWindows: coordina la sesión de usuario y el proceso de Logging In, luego procede a cargar el entorno del usuario.

App Nap: permite darle total o la mayoría de los recursos a la aplicación que está en primer plano. Las aplicaciones que quedan ocultas bajan de prioridad pasando a un segundo plano.

Timer Coalescing: junta todos los procesos los alinea y hace que todos a la vez realicen tareas que requieren, evitando un consumo de energía, reduciendo un porcentaje el consumo del CPU.
XPC: Mejora los tiempos de lanzamiento, evitando bloqueos y mejorando la seguridad al permitir que cada proceso se enfoque en una tarea específica.






Planificación de procesos en Windows

Los sistemas antiguos de Microsoft Windows y MS-DOS no eran multitarea, Windows 3.1x utiliza un planificador no preventivo esto significa que no interrumpe programas. Se basó en el programa para terminar o decirle al sistema operativo que no necesitaba el procesador para que pudiera pasar al otro proceso. Windows 95 tiene un planificador preventivo rudimentario, para el soporte opto permitir que las aplicaciones de 16 bits se ejecuten sin interrupción.

Windows NT planifica Theads por prioridades, un esquema parecido al de UNIX. La prioridad se divide en 32 niveles, que se dividen en dos clases que son tiempo real y variable. Los 16 niveles superiores son de prioridad estática, continúen la clase de tiempo real. Los 16 niveles inferiores es donde se ubican los Threads de usuario, son de tiempo compartido y el algoritmo utilizado es el FCFS (primero en entrar, primero en salir). L a planifican está basada en hilos y no por procesos. La prioridad 0 está reservada para el sistema operativo, los usuarios pueden seleccionar 5 prioridades para asignarle a una aplicación que este en ejecución desde el administrador de tareas o atreves de la API de Windows.

En Windows Vista para utilizar el registro de contador de ciclos de los procesadores modernos para realizar un seguimiento de los ciclos del CPU que ha ejecutado un hilo, en lugar de utilizar interrupción en intervalos de tiempo. Windows Vista también utiliza planificador por prioridad para la cola de entrada y salida para que los programas y desfragmentadores de disco no interfiera con las operaciones de primer plano.

El algoritmo utilizado en Windows es Round Robín, selecciona todos los procesos de manera equitativa y en orden, comienza por los primeros procesos hasta llegar al último.  Round Robín es una secuencia por turno, ejecuta diferentes procesos de manera concurrente, para la utilización equitativa de los recursos del equipo, el tiempo es limitado para cada proceso, y luego suspendiendo este proceso para que se ejecute el próximo y así sucesivamente.

Se agregaran todos los temas que fuesen necesarios, recordando que serán abordados de modo claro y ordenado, y se describirá de manera específica sin pretender alargar los temas más de lo necesario.
 





Al usar el algoritmo Round Robín, tiene desventaja en que cambia los procesos en ejecución con frecuencia, debido a esto se tiene una pérdida de tiempo.

Los hilos que requieren atención inmediata están en tiempo real, esto incluye funciones como comunicaciones de tareas en tiempo real. Ya que se utiliza un planificador preferente a prioridades, los hilos con prioridad de tiempo real tienen preferencia sobre otros hilos.

En monoprocesador cuando un hilo con su prioridad mayor que la del que está en ejecución, pasa a estar listo, el hilo con menor prioridad es expulsado y al procesador se le asigna al proceso de mayor prioridad. Los que tiene prioridad en tiempo real, todos tienen un prioridad fija que no cambia nunca.

Planificación Multitareas

Es más compleja cuando se tiene varios procesadores, el uso de la multiprogramación en cada procesador es individual. Tiene la característica de multiprocesamiento simétrico ya que cada procesador tiene su planificación y consulta a la cola de procesos listos.

Planificación en tiempo real

Tiene poca sobrecarga al sistema, y no se ajustan las prioridades con el tiempo. Algunos procesos cambian sus condiciones: dirigida por tabla, prioridad. Los procesos que se dirigen por tabla, se determina su tiempo de ejecución, cuando debe ejecutarse cada proceso. Los procesos por prioridad, utiliza un planificador por prioridad, este es usado en sistemas multiprogramados que no son de tiempo real, en tiempo real la prioridad se ajusta a las restricciones de tiempo de cada proceso.

Planificador de tiempo real dinámica

Este ajusta sus prioridades a condición que cambian con frecuencia, suele tener una sobrecarga significativa, y debe asegurar que no tenga un incumplimiento de tiempos.

Se divide en 2 categorías: Basada en plan y basada en el esfuerzo.

La planificación basada en un plan determina el tiempo de ejecución, mientras que la planificación casada en el mejor esfuerzo, el sistema trata de cumplir con todos los plazos y puede abandonar cualquier procesos que ya este iniciado o en ejecución aunque este no haya terminado.

Planificación por plazos

Los procesos deben completar un tiempo específico. Es difícil de implementar ya que este genera una sobrecarga, debe prever un plan de requerimientos de recursos, y el servicio proporcionado a los otros procesos de puede degradar.

Algoritmos de planificación utilizados por diferentes Sistemas Operativos


Planificacion de procesos en Solaris

El Sistema Operativo Solaris utiliza una cola de realimentación en múltiples niveles con prioridades entre 0 y 169. Las prioridades reservadas para los subprocesos compartidos en el tiempo son de 0 - 59, para los procesos del sistema son de 60-99, para los procesos en tiempo real son de 100 – 159 y para las interrupciones de baja prioridad son de 160 – 169.

La diferencia con Linux, cuando un proceso se hace usando su tiempo quantum, se le da una prioridad nueva y se vuelve a poner en cola. En Solaris 9 se implementaron 2 clases nuevas de programación, la clase de cuota justa y la clase de prioridad fija. En cuanto a los hilos que tienen una prioridad fija tienen la misma prioridad que el de la clase de tiempo compartido, pero sus prioridades no se ajustan dinámicamente.

El manejo de procesos en Solaris es por prioridad y Round Robín. En algunas versiones se maneja también un ajuste dinámico de la prioridad de acuerdo al tiempo que los procesos han esperado y al tiempo que ya han usado el CPU. El sistema provee facilidades para crear ‘pipes’ entre procesos, contabilizar el uso de CPU por proceso y una pila común para todos los procesos cuando necesitan estarse ejecutando en modo privilegiado (cuando hicieron una llamada al sistema).

Solaris permite que un proceso haga una copia de sí mismo por medio de la llamada ‘fork’, lo cual es muy útil cuando se realizan trabajos paralelos o concurrentes; también se proveen facilidades para el envío de mensajes entre procesos.






CONCLUSIONES

Gracias a las investigaciones se ha resumido la planificación del procesador y los procesos en diferentes sistemas operativos, el tiempo de respuesta, la prioridad de los procesos y el algoritmo utilizado por cada uno de los sistemas operativos. Esto es para conocimientos de cada uno de los lectores de este artículo y saber cómo funcionan los procesos en los diferentes sistemas operativos, los tipos de funciones que utilizan, las funciones que utilizan los kernel de los sistemas y los tipos de prioridad.




AGRADECIMIENTOS

Al personal de la “Biblioteca Central Juan Antonio Medina Durón” de la Universidad Pedagógica Nacional Francisco Morazán por estar disponibles siempre para atender a las consultas y la manera tan paciente de guiarnos en la búsqueda de la información, haciéndola aún más accesible.










Referencias

1.        Stallings, W. (2005). Sistemas operativos: Aspectos internos y principios de diseño (5ta edición).  Madrid: Pearson Educación, S.A.

2.        Silberschatz, A., Galvin, P., Gagne, G. (2006). Fundamentos de sistemas operativos (7ma edición). Madrid: McGraw-Hill/Interamericana de España, S.A.U.

3.        Tanenbaum, A. (2009). Sistemas operativos modernos (3ra edición). México: Pearson educación.

4.        J.Bar L.Bauder. 1994.windows interno 3.1.Alfaomega grupo editor

5.        Gorman, Mel (2007), Understanding The Linux Virtual Memory Manager, Upper Saddle River NJ, Prentice Hall.

6.        Bovet, Daniel (2005), Understanding The Linux Kernel 3rd edition, O’Reilly.

7.        Mckellar, Jessica (2010), Linux Device Drivers 4th edition, O’Reilly

8.        Stallings, William (2012), Operating Systems: Internals and Design Principles 7th edition, , Upper Saddle River NJ, Prentice Hall.

9.        TANENBAUM, Andrew y WOODHULL, Albert (1999), Sistemas Operativos. Diseño e implementación 2a. edición (México, Prentice Hall)

10.     STALLINGS, William (2004): Operating Systems 5th edition (USA, Prentice Hall)

11.     DEITEL, H. M (2000).: Introducción a los Sistemas Operativos 2a. edición (México Addison Wesley Iberoamericana)

12.     CARRETO DE MIGUEL, GARCÍA PÉREZ (2001): Sistemas Operativos. Una visión aplicada (España, Mc. Graw Hill/Interamericana de España)

13.     FLYNN, Ida y McIver A. (2001): Sistemas Operativos 3a. edición (México, Thomson Learning)




Comentarios