Cuadro Comparativo de Los Algoritmos de Planificacion
Cuadro Comparativo de Los Algoritmos de Planificacion
Cuadro Comparativo de Los Algoritmos de Planificacion
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
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.
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).
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.
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.
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.
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:
/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