• No results found

UTD – Unable to Determine from the documentation Notes for Abstraction:

PRIORITY ORDER FOR THESE SOURCES

6 UTD – Unable to Determine from the documentation Notes for Abstraction:

Contenido complementario

La gestión de procesos es un aspecto vital en todo sistema operativo, ya que determina el tiempo de res- puesta de nuestras aplica- ciones, la eficiencia con que se utiliza la memoria y la CPU, etc.

A

N

O

TA

C

IO

N

ES

cesos, explicaremos con más detalle algunos de los parámetros que le podemos pasar a este comando:

• “T”: esta opción viene por defecto y nos indica que sólo se mos- trarán los procesos que se están ejecutando en el terminal dónde nos encontramos o que se hayan lanzando a partir de él.

• “-a”: nos muestra los procesos de todos los terminales del siste- ma.

• “-A”: nos muestra todos los procesos del sistema. Si ejecutamos el comando, veremos que, aparte de los programas que los usua- rios ejecutan, hay otros. Muchos de ellos ejecutan las funciones necesarias para que el operativo funcione correctamente, otros son los servidores de aplicaciones configurados, etc.

• “-l”: enseña información extendida para cada proceso, como el tiempo de CPU que ha utilizado, el terminal donde se ejecuta, etc. En la segunda columna también podemos ver el estado del pro- ceso. Aunque el sistema tenga muchos procesos ejecutándose en un mismo instante de tiempo, ello no implica que todos necesiten tiempo de CPU constantemente. Por ejemplo, cuando un servidor de páginas web no tiene ninguna petición, no es necesario que haga absolutamente ninguna operación. Aunque esté en memo- ria preparado para ejecutarse al recibir una petición, es mejor que no pase en ningún momento por la CPU, ya que ésta puede utilizarse para otros procesos que sí que la necesitan. Internamen- te, el sistema operativo tiene implementados una serie de meca- nismos muy eficaces para gestionar toda esta clase de operaciones. De este modo, un proceso puede estar en los si- guientes estados (mostrados con el carácter correspondiente): – “D”: proceso ininterrumpible. Este tipo de proceso generalmente

suele pertenecer a la entrada/salida de algún dispositivo que se dañaría si dejara de ser atendido.

– “R”: proceso que en el momento de ejecutar el comando también se está ejecutando, o sea, todos aquellos que están en cola de ejecución. La cola de ejecución de procesos es donde se ponen todos aquellos que se van repartiendo el tiempo de la CPU.

A

N

O

TA

C

IO

N

ES

– “S”: proceso dormido o esperando que ocurra algún tipo de evento para que el sistema lo despierte y lo ponga en la cola de ejecución.

– “T”: proceso que ha sido detenido por el usuario o el sistema. – “Z”: proceso zombie. Este estado indica que el proceso ha tenido

algún fallo y no funciona correctamente. Generalmente es mejor eliminar este tipo de procesos.

Otro comando muy útil es el top, que nos informa de forma interac- tiva de los procesos del sistema, del estado de utilización de la CPU, la memoria utilizada y libre, la RAM que utiliza cada proceso, etc. Este programa es muy indicado cuando el sistema no responde ade- cuadamente o notamos alguna disfunción extraña, ya que nos permite localizar rápidamente qué proceso está afectando negativamente al rendimiento del sistema.

Como vemos, el sistema nos informa sobre todos los aspectos posi- bles de los procesos del sistema. Además de esto, podemos enviar ciertas señales a los procesos para informarles de algún evento, po- demos sacarlos de la cola de ejecución, eliminarlos, darles más prio- ridad, etc. Saber manipular correctamente todos estos aspectos también es muy importante, ya que nos permitirá utilizar nuestro or- denador de forma más eficiente. Por ejemplo, si somos administra- dores de un centro de cálculo donde la mayoría de aplicaciones que se ejecutan necesitan mucho tiempo de CPU, podríamos configurar el sistema para hacer que los más urgentes se ejecuten con más prio- ridad que otros y acaben primero. El comando kill nos permite enviar señales a los procesos que nos interese. En general, todos los programas se diseñan para que puedan recibir este tipo de señales. De este modo, según el tipo de señal recibido saben que deben rea- lizar unas operaciones u otras. Hay muchos tipos diferentes de seña- les, que podemos ver en el manual de kill, aunque las más utilizadas son las que nos sirven para obligar a un proceso a que ter- mine o pause su ejecución. Con la señal TERM (“kill -15 PID”), le indicamos al proceso que queremos que termine, de modo que al recibir la señal deberá guardar todo lo necesario y acabar su ejecu- ción. Si hay algún tipo de problema o el programa no está prepara- do para recibir este tipo de señal, podemos utilizar KILL (“kill -

Contenido complementario

Con los comandos de ma- nipulación de procesos po- demos realizar cualquier acción que nos interese: desde pausar los procesos de un usuario concreto, eli- minar aquellos que no nos interesan o hacer que algu- nos ocupen más tiempo la CPU para que vayan más rápido.

Contenido complementario

Para tratar las señales en un shell script (véase más ade- lante cómo programarlos), podemos utilizar el coman- do trap.

A

N

O

TA

C

IO

N

ES

9 PID”), que automáticamente lo expulsa de la cola de ejecución. killall sirve para referirnos al nombre de varios procesos a la vez en lugar de referenciarlos por su PID y, de esta forma, enviarles una señal a todos a la vez. Con el comando skill también podemos enviar señales a los procesos, pero con una sintaxis diferente. Por ejemplo, si queremos detener todas las ejecuciones de un determi- nado usuario, podríamos utilizar “skill -STOP -u nombreLo- gin”, con lo que todos los procesos de dicho usuario se pararían. Para reiniciarlos de nuevo, podríamos pasar la señal de CONT. Cuando estamos ejecutando algún programa en una consola y que- remos pasarle la señal de TERM, podemos utilizar la combinación de teclas CTRL+C. Con CTRL+Z podemos pausar un programa y re- vivirlo con fg.

Otra manera de ver los procesos es por su jerarquía. Igual que en el sistema de ficheros, los procesos siguen una cierta jerarquía de pa- dres a hijos. Todo proceso debe ser lanzado a partir de otro, sea el propio intérprete de comandos, el entorno gráfico, etc., de manera que se crea una relación de padres a hijos. Con el comando pstree podemos ver esta jerarquía de forma gráfica. Si lo ejecutamos, vere- mos cómo el padre de todos los procesos es uno llamado init. A partir de éste parten todos los demás, que a la vez pueden tener más hijos. Esta estructura jerárquica es muy útil, ya que, por ejemplo, ma- tando a un proceso padre que contiene muchos otros hijos, también matamos a todos sus hijos. También nos puede servir para identificar de dónde parten ciertos procesos, etc. Si no le pasamos ningún pa- rámetro al comando, por defecto compacta todos los procesos con un mismo nombre para no mostrar una estructura demasiado gran- de, aunque esto también es configurable a partir de sus parámetros. Todos los procesos del sistema tienen una cierta prioridad. Como de- cíamos antes, esta prioridad indica el tiempo de CPU que se le dejará al proceso. Cuanto más prioritario sea el proceso, más tiempo de ejecución tendrá respecto a los otros. El rango de prioridades va des- de el –20 al 19, de mayor a menor. Para lanzar un proceso con una determinada prioridad, podemos utilizar el comando nice. Si que- remos dar una prioridad diferente a un proceso que ya esté en eje- cución, podemos utilizar renice. Sólo el root puede utilizar el rango de prioridades negativas; así, el sistema se asegura de que el root cuente siempre con la posibilidad de ejecutar procesos más rápida- mente que los usuarios. Por defecto, la prioridad con que se ejecutan

A

N

O

TA

C

IO

N

ES

los programas es la 0. Un aspecto que habrá que considerar es que con todo este mecanismo de prioridades no podemos medir el tiem- po de ejecución real de un proceso porque la CPU se reparte entre todos los que tengamos en la cola de ejecución. En centros de cálculo donde se factura según el tiempo de utilización de las máquinas, es muy importante poder medir adecuadamente este aspecto. Por este motivo, el sistema nos proporciona el comando time, el cual, al pa- sarle el programa que queremos medir, nos devuelve el tiempo real de CPU que ha utilizado.

2.5.1. La ayuda del sistema

Como hemos dicho a lo largo del documento, todos los comandos tienen multitud de opciones y parámetros diferentes que nos permi- ten manipularlos a nuestra elección. Desde el principio se tuvo muy en cuenta que es imprescindible contar con una buena documenta- ción para todos ellos. Igualmente, toda esta información es necesa- ria para los ficheros de configuración del sistema, las nuevas aplicaciones que utilizamos, etc. Por ello, el mismo sistema incorpora un mecanismo de manuales con el que podemos consultar casi todos los aspectos de los programas, utilidades, comandos y configuracio- nes existentes. El comando más utilizado es el man, que nos enseña el manual del programa que le indicamos como parámetro. Por de- fecto, esta documentación se muestra por medio del programa less, con el cual podemos desplazarnos hacia delante y hacia atrás con las teclas de AVPÁG y REPÁG, buscar una palabra con el carác- ter “/” seguido de la palabra (“n” nos sirve para buscar las siguientes ocurrencias y “N” para las anteriores), “q” para salir, etc. Los manua- les del sistema están divididos en diferentes secciones según la natu- raleza de los mismos:

1) Programas ejecutables (aplicaciones, comandos, etc.). 2) Llamadas al sistema proporcionadas por el shell. 3) Llamadas a librerías del sistema.