Planificación
de Procesadores en Windows, Linux, iOS y Android
Mauricio
Javier Flores, Karen Danelia Sierra, Dilcia Yessenia Sánchez y Marvin Yovany
Cortez
20131001416
mfloresirias@gmail.com
20131002909
karendanelia2@yahoo.com
2012107960sdilcia_2010@yahoo.es
20031009370 mayoco84@gmail.com
Resumen
La Planificación de procesadores en Windows Microsoft
comenzó a mediados de 1988 con el desarrollo del sistema operativo Windows
NT15.
Por lo general en el sistema operativo Windows se
utiliza una política de planificación: Round Robin (turno rotatorio). La
desventaja principal que presenta es que hace un cambio de procesos en
ejecución con demasiada frecuencia. Lo que hace suponer una pequeña pérdida de
tiempo.
En ser un sistema multiproceso se basa
Linux, en el cual la planificación puede ser en tiempo real y en no tiempo real
para las versiones de la 2.4 y anteriores. La planificación en tiempo real se
puede definir en tres clases: sched_fifo, sched_rr, sched_other. En cuanto a la
versión 2.6 esta comprende básicamente la misma capacidad de planificación de
tiempo real que las versiones anteriores y un planificador modificado para
procesos no de tiempo real, el cual es más complejo en interés de la
escalabilidad con el número de procesos y procesadores.
La aplicación de Android se conoce lo que es la
planificación de procesadores se compone o se hace en el núcleo o también
llamado kernel de Linux para lograr la determinación de las políticas de
planificación de procesos. Y políticas de planificación de alta y baja
prioridad, los estados del proceso y comunicación entre procesos.
Abstract. Processor Planning in Windows
Microsoft began in mid-1988 with the development of the Windows NT15 operating
system.
Usually in the
Windows operating system a planning policy is used: Round Robin. The main
disadvantage it presents is that it makes a change of processes running too
often. Which makes it a small waste of time.
In being a
multi-process system is based Linux, in which the planning can be real-time and
non-real time for versions of 2.4 and earlier. Real-time scheduling can be
defined in three classes: sched_fifo, sched_rr, sched_other. As for version 2.6
this basically comprises the same real-time scheduling capability as previous
versions and a modified scheduler for non-real-time processes, which is more
complex in the interests of scalability with the number of processes and
processors.
The Android
application is known what is the planning of processors is composed or done in
the kernel or also called Linux kernel to achieve the determination of process
planning policies. And high and low priority planning policies, process states
and interprocess communication.
Palabras
Claves. Planificación, procesos,
Multiprogramación, Proceso, planificador, estado, procesador, tiempo, kernel,
Libdus, wrappers, frameworks, Android, GPS.
Planificación de procesos en Windows
Principales características:
1.
Que
está Basado en las prioridades.
2.
Una
Planificación apropiativa.
3.
Una
Planificación con la afinidad de procesador.
Planificación por hilos y no por procesos.
Un hilo puede perder el procesador si hay otro más prioritario que esté listo.
Decisiones de planificación:
Los Hilos nuevos --> en estado “Listo”.
Los Hilos bloqueados que reciben evento --> en
estado “Listo”.
Hilo deja del procesador si termina cuanto, finaliza o
pasa a bloqueado.
La Planificación de procesadores en Windows Microsoft
comenzó a mediados de 1988 con el desarrollo del sistema operativo Windows
NT15, dedicado a ciertas estaciones de el trabajo y a servidores con un tamaño
medio y pequeño.
A partir del ano 1994 se comercializaron sucesivas
versiones (3.51, 4.0, XP, 2000, Vista). Este Se trata de uno de los sistemas
operativos que podríamos llegar a considerar moderno en virtud con su
estructura modular cliente-servidor (aunque no cuenta con un micronúcleo) y también
de su orientación hacia soportes del hardware distribuido. Uno de los objetivos
importantes fue el diseño de la transpirabilidad, que se logra a través de una
interfaz de abstracción del hardware (HAL), existen implementaciones para
diferentes arquitecturas, como ser Alpha, 80x86 de Intel, Digital y MIPS.
Se puede observar que Windows NT planifica threads, pero
por prioridades, siguiendo un esquema muy parecido al que usa UNIX. Este Cuenta
con 32 niveles de prioridad divididos en solo dos clases. Los dieciséis niveles
superiores, de prioridades estáticas, constituyen la clase de tiempo real. Los dieciséis
niveles inferiores (clase variable), que es donde se ubican los threads de
usuario, son de un tiempo compartido y estos se gestionan con una disciplina FCFS
(primero en entrar, primero en salir). Un thread de usuario perteneciente a un
proceso A parte con una prioridad de base inicial que puede estar en el rango
[prio(A) ‒2, prio(A)+2]. La prioridad del thread actúa de forma dinámica durante
toda la ejecución en un rango [prio(A)‒2, 15], aumentando cuando el thread se
bloquea y disminuyendo cuando el thread es expulsado por fin del quantum.
Con un multiprocesador que cuenta con N procesadores,
la planificación de threads en Windows 2000 se basa en estos dos criterios: (1)
la afinidad al procesador, y (2) asignar N‒1 procesadores a los N‒1 threads que
son más prioritarios y el restante a todos los demás.
Por lo general en el sistema operativo Windows se
utiliza una política de planificación: Round Robin (turno rotatorio). La
desventaja principal que presenta es que hace un cambio de procesos en
ejecución con demasiada frecuencia. Lo que hace suponer una pequeña pérdida de
tiempo.
Además, que Las prioridades en W2K se organizan en dos
bandas o clases: el tiempo real y el tiempo variable. Cada una de estas bandas
consta de dieciséis niveles de prioridad. Los hilos que son los que requieren
atención inmediata están en la clase de tiempo real, que incluye funciones como
tareas de tiempo real. En esencia, puesto que W2K utiliza el planificador
preferente con prioridades, los hilos que están con prioridades de tiempo real
tienen preferencia sobre los otros hilos.
En un monoprocesador, cuando esta un hilo cuya
prioridad es mayor que la del que se ejecuta en ese momento pasa a estar en
estado Listo, el hilo de menor prioridad es expulsado y se le asigna el
procesador al de mayor prioridad. En la clase de prioridad de tiempo real,
todos los hilos tienen una prioridad fija que no cambia nunca. Se cuenta con
una cola FIFO en cada nivel de prioridad, pero también un proceso puede emigrar
a una de las otras colas dentro de la clase de prioridad variable. Sin embargo,
un hilo de prioridad no puede promocionarse a ningún otro nivel de la clase de
tiempo real.
Planificación
de procesadores en Linux
En un sistema
multiproceso se basa Linux. Los procesos son tareas independientes, es decir
que que cada una realiza sus propias responsabilidades por sí sola. Si llega a
suceder que un proceso tenga un problema y se detiene esto no hará que otros
procesos en el sistema fallen también. Cada proceso se ejecuta en su propio
espacio de dirección virtual y no puede haber intercambio o interacción con
otros procesos excepto por medio de mecanismos gestionados por el núcleo.
En el tiempo
de vida de un proceso, éste hará utilizará de muchos recursos del sistema.
Linux debe llevar recuento del proceso y de los recursos de sistema que está
usando de forma que pueda gestionar este y otros procesos. Ya que no sería
correcto para los otros procesos del sistema que un proceso acapare la mayoría
de la memoria física o las CPUs.
La finalidad
de Linux al ser un sistema multiproceso es tener un proceso ejecutándose en
cada CPU del sistema en todo momento, para incrementar el uso de la CPU.
Normalmente hay más procesos que CPU entonces el resto de los procesos tiene
que esperar a que una CPU quede libre para que ellos puedan ejecutarse. Se
mantienen muchos procesos en memoria al mismo tiempo en un sistema
multiproceso. En el que caso que un proceso tiene que esperar, el sistema
operativo se encarga de quitar la CPU a ese proceso y se la da a otro proceso
que se lo merite más. El planificador
se encarga de elegir el proceso más adecuado para ejecutar a
continuación. Linux usa varias estrategias de organización del tiempo de la CPU
para asegurar una distribución equitativa.
En las
anteriores versiones a la 2.4 y ella misma de Linux podía utilizar
planificación en tiempo real y también planificador para procesos en no tiempo
real. En la planificación en tiempo real hay tres tipos: SCHED_FIFO: En la cual
son hilos de tiempo real planificados primero en entrar primero en salir,
SCHED_RR: hilos con tiempo real planificados, pero con turno rotatorio.
SCHED_OTHER: hace referencia a los hilos no tiempo real.
Hasta la versión 2.6, el algoritmo de planificación era relativamente
sencillo y consistía en elegir el proceso al que le quedaba más cantidad
de quantum por
gastar, recompensando así los procesos interactivos. El planificador actual es
mucho más complejo en interés de la escalabilidad con el número de
procesos y de procesadores.
El diseño
del planificador es crítico, ya que dos de las partes más complicadas de un
kernel son el subsistema de memoria y el planificador porque estas dos piezas
intervienen en el diseño y afectan al comportamiento de casi todos los demás
elementos del kernel y del sistema operativo. Esta es también la razón por la
que se quiere que estas dos piezas tengan un funcionamiento completamente
correcto y un comportamiento perfecto.
El planificador de Linux busca lograr varios objetivos:
·
Ecuanimidad: El
planificador debería distribuir la CPU entre todos los procesos de manera
imparcial. En el nuevo kernel se ha trabajado para garantizar un reparto
equitativo del tiempo de CPU entre los procesos.
·
Volumen de producción y eficiencia: El planificador debería intentar incrementar
tanto el volumen de producción como la eficiencia. La manera usual de
incrementar la utilización de la CPU es aumentar el nivel de multiprogramación.
·
Mínima Sobrecarga: Un planificador debería estar en ejecución el menor tiempo posible.
·
Hacer cumplir una planificación basada en prioridades: O sea que algunos procesos
tienen prioridad sobre otros. Linux respeta las prioridades.
·
Tiempo de espera: Es la suma del tiempo de servicio y el tiempo de
espera en la cola de ejecución. El planificador intenta aminorar ambos.
espera en la cola de ejecución. El planificador intenta aminorar ambos.
·
Tiempo de respuesta y variabilidad: El tiempo de respuesta de un programa debería ser
lo menor posible.
Es necesario saber cómo el planificador asigna el tiempo de CPU y
administra la ejecución de los programas, así mismo comprender el significado
de proceso. Un proceso es un conjunto de instrucciones que el procesador
ejecuta secuencialmente. Uno o más procesos pueden componer un programa.
Hay
dos tipos de procesos en Linux, normales y de tiempo real. Los procesos de
tiempo real tienen una prioridad más alta que los otros. Así que, si hay un
proceso de tiempo real listo para ejecutarse, siempre se ejecutará primero.
Pueden tener dos tipos de políticas los procesos de tiempo real: round
robin (en círculo) en esta política cada proceso se ejecuta por turnos y
en la otra que es first in first out (el primero en llegar es el
primero en salir). Cada proceso se ejecuta en el orden que está en la cola de
ejecución y el orden no se cambia nunca.
Para que Linux pueda
gestionar los procesos en el sistema, cada proceso se representa por una
estructura de datos task_struct. El vector task es una lista de punteros a estructuras task_struct en el sistema. Significa que el mayor
número de procesos en el sistema está limitado por el tamaño del vector task; por defecto tiene 512 entradas.
Los procesos pueden tener uno de cinco estados:
·
En ejecución: Está siendo ejecutado por el procesador o guardado
en memoria esperando ser ejecutado.
·
Interrumpible: En el momento está esperando algún suceso, sucede
cuando un proceso cede el control de la CPU hasta que se cumpla alguna
condición.
·
No interrumpible: Es cuando el proceso depende directamente de
sucesos del hardware no se pueden interrumpir en ningún caso.
·
Zombi: Cuando ya ha terminado pero cuya estructura task_struct
permanece aún en el vector task. Se suele mantener para que el padre pueda
extraer información útil de él.
·
Detenido: Usualmente ocurre porque ha recibido una señal. Por ejemplo,
si se están eliminando errores en un proceso, puede estar detenido.
El planificador de Linux 2.6
El planificador mantiene una lista de los niveles de prioridad. Usa un
algoritmo eficiente para beneficiar a los procesos de alta prioridad, a la vez
que permite ejecutarse a los procesos de baja prioridad. Cuando llega el
momento de seleccionar un proceso, el planificador busca el nivel de prioridad
más alto que contenga procesos disponibles. Luego selecciona un proceso del
nivel de prioridad deseado. Puesto que el número de niveles de prioridad es
fijo, el planificador siempre tarda una cantidad constante de tiempo.
Otra capacidad considerable que tiene el planificador es la expropiación.
Lo que permite esto es que un proceso pueda ser detenido en cualquier momento,
posibilitando que un proceso de mayor prioridad pueda ser iniciado. Es muy
importante desde el punto de vista del usuario, ya que permite que los procesos
que interactúan con el usuario sean ejecutados cuando sea necesario. Los
beneficios de la expropiación son tan grandes que los desarrolladores del
kernel decidieron hacer que el kernel mismo sea
expropiable. Esto le permite al sistema tener mejores tiempos de
respuesta a las peticiones del usuario. El kernel 2.6 es capaz de administrar
eficientemente sus propias tareas además de los procesos de usuario.
El planificador asigna una cantidad de tiempo a un proceso y esta
es llamada una "porción de tiempo". Después de que la porción de
tiempo de un proceso ha sido utilizada, el proceso es detenido para que pueda
ejecutarse el siguiente. Es importante recordar que un proceso puede ser detenido
en medio de su porción de tiempo siendo este es el propósito de la
"expropiación".
Cuando el planificador calcula porciones de tiempo debe lograr un
balance apropiado entre caudal y latencia. Caudal se refiere a la cantidad de
datos que pueden ser transferidos desde una ubicación hacia otra. Y Latencia es
el tiempo que le toma a un proceso responder a una entrada. Y obteniendo un
buen balance entre caudal y latencia llevan a un efecto de respuesta rápida
para el usuario con el suficiente caudal.
Planificación
de procesadores para Android
Este sistema Android se compone o se hace en el núcleo
o también llamado kernel de Linux para lograr la determinación de las políticas
de planificación de procesos. Algunos son procesos nativos pero muchos serán
los procesos que se ejecutan en una máquina virtual de java en la mayoría de
los casos una aplicación Android se ejecuta en su propio proceso de Linux este
proceso ha sido creado para la aplicación cuando se ejecuta al inicio y seguirá
ejecutándose hasta que no sea necesario y el sistema proceda a buscarlos
recursos para otras aplicaciones y se los de a estas.
Android como todos sistemas operativos tiene
inconvenientes como ser el gasto de batería que es muy alto y cuando se tienen
demasiadas aplicaciones el sistema se vuelve lento en algunas ocasiones las
aplicaciones deben tener un hilo en segundo plano la aplicación de Gmail por
ejemplo lo que es google maps o cualquier tipo de juego de su preferencia
Políticas
de planificación en Android
Políticas Normales: prioridad más baja
-
Sched_other: estándar desarrollado de
operación por turnos en tiempo compartido de las políticas
-
Sched_batch: se usa para ejecutar ‘lotes’
igual al de los procesos
-
Sched_iddle: se usa para la ejecución de
los trabajos de muy baja prioridad en segundo plano
Políticas en tiempo real
Algunos de estos procesos pueden ser de una prioridad
que se inicia de 19 a 20(en escala de bajo a alta prioridad)
-
Sched_fifo: por colas el primero que entra
es el primero que sale
-
Sched_RR: una política de turno rotatorio
conocido también como round robin.
Estado
de un proceso en Android
Android le asigna una
prioridad a cada proceso con la siguiente jerarquía:
• Procesos de primer plano (Active process): Es la aplicación que
contiene una actividad ejecutada en el primer plano en la pantalla del usuario
y con la cual está intercambiando ahora mismo (se ha llamado a su método
onResumen ()), a este procesos le será
borrado como último recurso si el sistema recurre por más memoria
• Procesos visibles (visible process): este proceso aloja una actividad que en primer plano no se
está ejecutando (en otras palabras su
método es onPause () ha sido llamado). Ese tipo de proceso no será eliminado
solamente que la memoria se necesite para mantener a los procesos del primer
plano en ejecución.
• Procesos de servicio (stored service process): son aquellos que
corren cuando un service ha sido invocado. (Se ha llamado a su método
startService ()). Los procesos no se encuentran a la vista se determinan en
segundo plano que normalmente son de ayuda e importancia para quien lo usa
(conectarse con servidores, actualización del GPS, reproductor de música, etc.)
• Proceso en segundo plano (Background process): Es un proceso
que contiene una actividad denominada activity que en estos momentos no es
visible por el usuario (método onStop () ha sido llamado) y que ya no tienen
demasiada importancia por ejemplo los programas que inicia el usuario con el
arranque hace tiempo y no los ha vuelto a usar pasan a estar en background.
• Procesos vacíos (Empty process): Es el proceso que no guarda
tipos de componentes. Su razón de ser es el de tener una cache disponible para
la próxima aplicación que lance el usuario es común que el sistema elimine este
tipo de procesos con frecuencia para así poder obtener memoria disponible.
Comunicación
entre procesos
• A
través de variables de entorno solo es posible de padres a hijos
• Mediante
señales: solo indica que algo ha ocurrido y solo lleva como información de un
número de señal
• Mediante
procesos de entrada/salida: Es la forma más segura a un determinado nivel de
Shell
• Mediante
técnicas IPC: Semáforos, memoria compartida, colas de mensajes.
• Remote
procedure call (llamada a procedimiento remoto): Es un protocolo que permite a
un programa de ordenador ejecutar código en otra máquina remota sin la
preocupación por las distintas comunicaciones entre ambos.
• D-Bus:
Es el mecanismo de comunicación entre procesos (IPC) consistente en tres
capas:
i) Biblioteca,
libdus permite a dos aplicaciones conectarse e intercambiar mensajes.
ii) Un
demonio ejecutable que funciona como bus de mensajes, construido sobre libdus
al cual pueden conectarse varias aplicaciones
iii) Bibliotecas
adaptadas (Wrappers) para su uso en frameworks concretos
Gobernadores
en android
Es quien dicta cuando el procesador
debe trabajar más rápido o cuando entra en reposo, esto ayuda a mejorar la
duración de la batería y también alarga la vida útil del móvil.
Conclusiones:
windows
Se puede observar que Windows NT planifica threads,
pero por prioridades, siguiendo un esquema muy parecido al que usa UNIX. Este
Cuenta con 32 niveles de prioridad divididos en solo dos clases. Los dieciséis
niveles superiores, de prioridades estáticas, constituyen la clase de tiempo
real. Los dieciséis niveles inferiores (clase variable), que es donde se ubican
los threads de usuario, son de un tiempo compartido y estos se gestionan con
una disciplina FCFS
Linux
La planificación en Linux está siendo mejorada en sus
versiones ya que de la 2.6 se logro hacer un cambio en el planificador para
procesos de no tiempo real ya que en la versión 2.4 no escalaba bien con un
número mayor de procesadores al igual que un número mayor de procesadores y ese
planificador es llamado planificador (O)1, en el cual se rediseño para que le
tiempo fuera el mismo a la hora de seleccionar el proceso y asignarlo a un
procesador, sin que se tome en cuenta el numero de procesadores.
Android
La planificación para Android es de vital importancia
ya que haciendo uso adecuado de los procesos en
las aplicaciones permite resolver los problemas generados por el uso de
almacenamiento de aplicaciones, las políticas de tiempo real, nos permite ver
los estados de procesos activos y de los planos subsiguientes y donde se
resuelve la comunicación entre procesos.
Agradecimientos
Agradezco a Roger Patiño por su información sobre la
planificación de procesadores en Android
Referencias
Comentarios
Publicar un comentario