Cuadro Comparativo de Los Algoritmos de Planificacion

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 4

tareas aperiódicas 

El tiempo C de ejecución (o computación) es el tiempo de procesamiento de cada acontecimiento de una tarea. Debe quedar
claro que, en un sistema monoprosesador, el tiempo de ejecución no debe ser mayor  que el periodo
(C ≤ T). Si una tarea periódica se ejecuta siempre hasta el final, es decir si nunca se le niega el servicio por insuficiencia de
recursos la utilización del procesador por parte de la tarea es U = C / T es dicir si una tarea tiene tiene un periodo de 80 minutos
y un tiempo de ejecución de 55 minutos su utilización del procesador sera de 55 / 80 = 0,6875.
N Número de tareas
T Período de activación
C Tiempo de ejecución máximo
D Plazo de respuesta
R Tiempo de respuesta máximo
P Prioridad

Last in, first outz


El término LIFO es el acrónimo inglés de Last In First Out (último en entrar, primero en salir).
El término LIFO se utiliza en estructuras de datos y teoría de colas. Guarda analogía con una pila de platos, en la que los platos
van poniéndose uno sobre el otro, y si se quiere sacar uno, se saca primero el último que se puso.
LIFO es el algoritmo utilizado para implementar pilas.

Planificador Completamente Justo


Algoritmo planificador desarrollado con la meta de maximizar el uso de la CPU con las diferentes tareas que se lanzan en un
sistema Linux basándose en el Fair Queuing. Este planificador, apareció en la versión del núcleo Linux 2.6.231 para sustituir al
proceso planificardor O(1) incluido en los núcleos anteriores, siendo desarrollado inicialmente por Ingo Molnar. Este
planificador fue desarrollado en 62 horas con 100 Kbytes de código añadido.2
Este algoritmo tiene como objetivo el maximizar el uso de la CPU pero permitiendo el uso interactivo de la máquina. Es decir,
tratará de que en ningún momento un usuario vea una bajada de rendimiento.
Con el planificador CFS se realiza un cambio radical en los planteamientos actuales de los planificadores incluidos en Linux,
cambiando la planificación de manera que se base en tiempo, en nanosegundos, en vez de colas de ejecución donde hay tareas
en espera, sino que se creará un árbol binario de búsqueda, red-black tree, en el que se almacenará una línea de tiempo de las
futuras tareas que usarán la CPU. Ya no usará los jiffies, basado en los tick de la CPU, para expulsar a un proceso.
También hay que remarcar que no usará rodajas de tiempo (quantum) estáticas, sino que irán modificando dinámicamente
según necesidades del sistema, con una granularidad definida en el fichero /proc/sys/kernel/sched_granularity_ns definido en
nanosegundos.

¿Qué son los procesos?


Los procesos son programas que se ejecutan en un momento dado. Cuando usamos un sistema operativo de GNU/Linux como
Ubuntu por ejemplo (o cualquier otro, también dentro de windows y mac puede aplicarse) existen una serie de procesos que se
están ejecutando constantemente y que son los que hacen al sistema operativo utilizable.

Los procesos en GNU/Linux son organizados de forma jerárquica, cada proceso es lanzado por un proceso padre y es
denominado proceso hijo. De está forma, todos los procesos en GNU/Linux son hijos de init ya que este es el primer proceso
que se ejecuta al iniciar el ordenador y init es padre de todos los procesos. Si se mata al proceso padre, también desaparecerán
los procesos hijos.
Tipos de procesos 
Básicamente hay dos: los procesos de usuario y los demonios:
- Los procesos de usuario son los programas que utiliza el usuario generalmente y se encuentran conectados a una terminal. El
programa aparecerá el pantalla y interactuara con el usuario
 Los demonios por contra, no están conectados a una terminal, funcionan solos y no interactúan con el usuario.

Un proceso en Linux es, en resumen, un programa en ejecución. Un proceso puede crear a su vez otros procesos. Al proceso
que genera otro proceso se le llama proceso padre. Al proceso generado por otro proceso se le llama proceso hijo. Los procesos
pueden ser padres e hijos y además, varios procesos pueden ser hijos del mismo padre a la vez. Veamos un ejemplo.

El terminal o consola es un proceso, ya que se trata de un programa que ejecutamos. Si en el terminal escribimos, por ejemplo,
el comando “ls -l”, se estaría generando un nuevo proceso que sería proceso hijo del terminal. En este caso el shell sería el
proceso padre y el comando “ls -l” sería el proceso hijo.

Trabajando con procesos. El comando ps.


El comando ps proporciona información sobre los procesos que se están ejecutando en el sistema. Si escribimos en el terminal
“ps”, obtendremos como salida un listado de los procesos lanzados con el usuario actual que aún se están ejecutando.
Veamos qué significan cada una de las columnas que se muestran cuando ejecutamos el comando ps.

 La primera columna es el PID o identificador de proceso. Cada proceso tiene un asociado identificador que es único, es
decir que no puede haber dos procesos con el mismo identificador.
 La segunda columna nos informa del terminal en el que se está ejecutando el proceso. Si aparece una interrogación (?), el
proceso no tiene asociada ninguna terminal.
 La tercera columna indica el tiempo total que ha estado ejecutándose el proceso.
 La cuarta columna es el nombre del proceso.
En la imagen anterior observamos que hay dos procesos corriendo: el bash, que es el shell o intérprete de comandos, y el
comando ps.

El comando ps admite algunos parámetros. El parámetro -e devuelve un listado de todos los procesos que se están ejecutando.
El parámetro -f devuelve un listado extendido. En este último caso veremos en pantalla el PPID del proceso (identificador del
proceso padre) y la hora en la que se ejecutó el proceso (STIME).

Los parámetros pueden aparecer juntos en el mismo comando, es decir que podríamos llamar al comando ps de la siguiente
forma: “ps -ef”. De esta manera obtendríamos un listado extendido de todos los procesos que se están ejecutando en el sistema.

El parámetro -u informa de los procesos lanzado por un determinado usuario. De tal forma que si escribimos “ps -u alex”,
aparecerá un listado de los procesos que está ejecutando el usuario alex.

El comando pstree
El comando pstree visualiza, en forma de árbol, todos los procesos del sistema. Así podemos ver las relaciones que existen
entre los procesos.

El comando top

El comando top devuelve un listado de los procesos de forma parecida a como lo hace ps, con la diferencia que la información
mostrada se va actualizando periódicamente lo que nos permite ver la evolución del estado de los procesos. Además, en la parte
superior muestra información adicional, como el espacio en memoria ocupado por los procesos, el espacio ocupado por la
memoria de intercambio o swap, el número total de tareas o procesos que se están ejecutando, el número de usuarios o el
porcentaje de uso del procesador.

Aunque el tema de las prioridades de los procesos lo trataremos más adelante, mientras el comando top está en marcha
podremos cambiar fácilmente la prioridad de los procesos. A modo de resumen cada proceso en Linux tiene un nivel de
prioridad que va de -20 (prioridad más alta) hasta 19 (prioridad más baja). Cuanto mayor sea el nivel de prioridad, más
lentamente se ejecutará el proceso. ¿Y cómo podemos cambiar con top la prioridad de un proceso? Muy sencillo. Con el
comando top en marcha pulsamos la tecla ‘r’. A continuación introducimos el PID del proceso al que vamos a cambiar la
prioridad, y acto seguido el nivel de prioridad que vamos a asignar. Debemos tener en cuenta una consideración, solamente el
superusuario ‘root’ puede asignar valores negativos a la prioridad de un proceso.
Ahora bien, el comando ps nos muestra una radiografía de los procesos en el momento, pero no nos muestra los cambios que se
van teniendo. Para esto contamos con el comando top. El mismo muestra en tiempo real la situación de los procesos que se
están ejecutando en el sistema, ordenados por defecto según el porcentaje la CPU que estén usando. Al ejecutarlo se podrá ver
otra información adicional, como la cantidad de usuarios que están en el sistema, cuantos procesos están corriendo y de estos
cuantos estas activos, cuantos durmiendo, cuantos en proceso de terminar (ZOMBIE) y cuantos finalizados. Además se podrá
ver la cantidad e memoria física total, la cantidad usada y la cantidad libre; así como también se podrá obtener la misma
información de la memoria swap.
Lo más importante es que esta información de ira actualizando automáticamente cada tanto tiempo, por defecto 5 segundos, y
que podremos ir alterando lo que va mostrando. Por ejemplo podemos hacer que ordene los procesos de acuerdo a la cantidad
de memoria que esta usando con solo presionar la tecla M. U ordenarlos de acuerdo al tiempo que llevan corriendo. Otra
utilidad es que podríamos matar algún proceso con solo presionar la tecla k y luego darle el número de PID.
El listado que nos mostrará contendrá el número de PID, el usuario que lo está ejecutando, la prioridad del proceso (PRI), el
valor nice (NI), el tamaño del proceso (SIZE), el tamaño total del proceso junto con los datos que maneja (RSS), el tamaño
usado por el proceso en la memoria (SHARE), el estado del proceso(STAT), el tamaño de las librerías del proceso (LIB), el
porcentaje de CPU ( %CPU) y de memoria (%MEM) así como también el tiempo de ejecución (TIME) y el nombre del proceso
(COMMAND).

Procesos en primer plano y segundo plano


Los procesos pueden ejecutarse en primer plano o segundo plano. El proceso que está en primer plano es aquel con el se
interactúa. Si ejecutamos, por ejemplo, el comando ls -l, se mostrará por pantalla el resultado, y hasta que no acabe de
mostrarse el listado no podremos ejecutar ningún otro comando. En este caso el terminal permanece bloqueado, sin poder
introducir ningún otro comando, hasta que el proceso en primer plano termine.

Pondremos un proceso en segundo plano añadiendo el símbolo ampersand (&) al final del comando. Cuando se ejecuta un
proceso en segundo plano, se permite al usuario iniciar y trabajar con otros procesos. Ejemplo:

$ sleep 10 &

El comando sleep simplemente espera el número de segundos que le pasemos como parámetro.

En la imagen anterior se observa que al ejecutar un proceso en segundo plano se devuelve un número entre corchetes seguido
de otro número. El número entre corchetes indica el número de procesos que se tienen ejecutándose en segundo plano. El
segundo número es el PID o identificador del proceso.

Para ver que trabajos se están ejecutando en segundo plano, se usa el comando jobs.

El signo + seguido del número de trabajo entre corchetes indica el trabajo más reciente que se está ejecutando. El signo menos
indica el siguiente trabajo más reciente.

Pasar procesos en segundo plano a primer plano


Para pasar procesos en segundo plano a primer plano, se utiliza el comando fg, seguido de %n, donde n es el número de proceso
que queremos pasar a primer plano. Por ejemplo, fg %2 pondría en primer plano la tarea número 2. En la siguiente imagen se
ejecuta sleep 90 en segundo plano, y después pasa a primer plano con el comando fg.

Pasar procesos en primer plano a segundo plano

El comando bg permite pasar procesos desde primer plano a segundo plano. Para pasar un proceso que se encuentra en primer
plano a segundo plano, debemos suspenderlo primero utilizando la combinación de teclas Crtl+Z. Cuando se pulsa esa
combinación de teclas, el proceso en ejecución se para y no vuelve a ejecutarse hasta que se pasa a primer o segundo plano.
Con bg pasaremos el proceso a segundo plano.

Cambiando la prioridad de los procesos

Cada proceso en Linux tiene un nivel de prioridad que oscila entre -20 (prioridad más alta) y 19 (prioridad más baja). Cuanto
mayor sea el nivel de prioridad, más lentamente se ejecutará el proceso. Solamente el superusuario ‘root’ puede asignar valores
negativos a la prioridad de un proceso.

Para asignar determinada prioridad a un proceso en concreto se utiliza el comando nice.

nice prioridad proceso

Podemos cambiar la prioridad de un proceso con el comando renice. Este comando admite los siguientes parámetros:

 -g. Establece el nivel de prioridad de los procesos ejecutados por los miembros del grupo especificado.
 -u. Establece el nivel de prioridad de los procesos ejecutados por los miembros del usuario especificado.
 -p. Indica el nivel de prioridad para el proceso especificado.
Finalizar procesos
Para finalizar un proceso se utiliza el comando kill, que tiene la siguiente sintaxis:
kill [parámetro] PID

Si, por ejemplo, queremos eliminar un proceso con PID 17122, tendríamos que escribir: kill 17122.Puede que en ocasiones el
proceso no finalice al emplear el comando kill sin parámetros. Para matar un proceso asegurándonos de que no ignorará la
petición de finalizar su ejecución se emplea el parámetro -9.

kill -9 17122

Hay un total de 32 señales que se pueden enviar a los procesos. Las más utilizadas son las siguientes:

 kill -1 (Sighup). Reinicia el proceso.


 kill -9 (SigKill). Mata el proceso.
 kill -15 (SigTerm). Termina el proceso.
Por otra parte, el comando killall nombre_programa finaliza todos los procesos que estén ejecutando el programa.
para ver un listado largo y detallado se utiliza el comado ps -l 

/home/julio$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 R 0 3509 3500 0 80 0 - 1065 - pts/1 00:00:00 bash
0 R 0 3575 3509 0 80 0 - 874 - pts/1 00:00:00 ps
Aca salen nuevos términos, el (S) es para denotar los procesos suspendidos o (R) si se esta ejecutando, el UID es el ID del
usuario, PPIDE es el PID del proceso padre.
los Procesos Padre e Hijo:
Ya sabemos que cada proceso posee un PID distinto y unico, tambien es importante resaltar que el proceso shell es llamado
proceso padre. Todos los comandos que corran dentro del proceso shell son hijos del proceso shell. por eso la importancia del
comando ps -l, ya que nos muestra las opciones PPIDE, S,R y UID.
Como el sistemas de archivos, los procesos también están organizados en una jerarquía. A medida que se producen mas
procesos, se crean mas procesos hijos. Se puede concebir una jerarquía de procesos encadenados juntos por PID y PPID. un
ejemplo para ver esto mejor:
/home/julio$ bash
/home/julio$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 3591 3588 3 80 0 - 1567 - pts/0 00:00:00 bash
0 S 1000 3605 3591 8 80 0 - 1572 - pts/0 00:00:00 bash
0 R 1000 3618 3605 0 80 0 - 874 - pts/0 00:00:00 ps
El comando bash crea automáticamente un proceso shell hijo dentro del proceso shell padre, a pesar de que ambos se llaman
bash, pero vemos que difieren sus PIDs. El comando ps -l ahora se ejecuta en el proceso shell hijo

También podría gustarte