Sistemas Operativos

Ciclo 02/2012


Nombre: Walter Mauricio Alfaro Rugamas

Fecha:          22/09/2012

PRÁCTICA
GESTIÓN DE PROCESOS Y TAREAS

1.       Inicia Ubuntu. Desde la nea de mandatos, lee la página del manual sobre el mandato ps. Ejecuta ps y visualiza los procesos que se están ejecutando en este momento. El primer valor que aparece es el identificador de proceso (PID). El segundo es la  terminal que está asociada a  ese proceso. Después también podemos observar el tiempo acumulado de uso de CPU, y finalmente el nombre del programa que ha dado lugar a este proceso. Apunta los procesos activos y sus valores.


2.    Por defecto, ps sólo ha mostrado los procesos asociados con la misma terminal e iniciados por el mismo usuario. Vamos a recuperar las opciones que nos permiten mostrar todos los procesos. Ejecuta el mandato “ps -e”. Comprueba la lista de procesos que están corriendo en tu máquina. ¿Cuál lleva el PID igual a 1?

Lo lleva init



















¿Qué procesos se están ejecutando en las terminales tty1, tty2tty6?

Tt1=getty
Tt2=getty
Tt3=getty
Tt4=getty
Tt5=getty
Tt6=getty
Recuerda lo que sucedía al pulsar “Ctrl + Alt + F1” hasta Ctrl + Alt + F6”; comprueba el nombre de cada una de esas terminales. Vuelve a la terminal en que se encuentra el entorno gráfico (Ctrl + Alt + F7). ¿Qué proceso está corriendo sobre tty7?
Tt7=Xorg

3. El mandato ps todavía nos puede ofrecer más información sobre los procesos en ejecución. Por ejemplo, ¿quién ha iniciado cada uno de los procesos en nuestra máquina? Vamos a usar las siguientes opciones del mandato ps: a nos permite conocer todos los procesos que tienen una terminal asociada;x” aquellos que no tienen terminal; la opción “u” nos muestra la salida en un formato más legible. Teclea el mandato “ps aux”.












Observa en las cabeceras la información que has obtenido de cada proceso. Busca  por  medio  de  “man  ps o  en  http://unixhelp.ed.ac.uk/CGI/man- cgi?ps el significado de aquellas columnas que desconozcas y apúntalo en tu informe (por ejemplo, RSS, VSZ). Busca también en el manual de ps” (en la sección dedicada a la descripción del campo STAT”) o en el anterior enlace en la sección “PROCESS STATE CODES” y apunta en tu informe el significado del status de cada uno de los procesos que están en ejecución.
TTY= Terminal asociada al proceso, si no hay terminal aparece entonces un '?'
RSS= Resident Sise, tamaño de la parte residente en memoria en kilobytes
VSZ Tamaño de la memoria virtual (espacio de direcciones asignado).
 STAT= Status del proceso, estos pueden ser los siguientes 
Ø  R runnable, en ejecución, corriendo o ejecutándose
Ø  S sleeping, proceso en ejecución pero sin actividad por el momento, o esperando por algún evento para continuar
Ø  T sTopped, proceso detenido totalmente, pero puede ser reiniciado
4. Todos los mandatos y opciones que hemos visto hasta ahora ofrecían información estática sobre los procesos. Esta información se extrae del directorio “/proc” del sistema. Hay algunas aplicaciones que también nos permiten  conocer  en  tiempo  real  las  características  de  cada  proceso. Ejecuta el mandato man top. ¿Qué hace el mandato top? Ejecuta el mismo.

Ofrece un programa dinámico de visión en tiempo real de un sistema en funcionamiento. Puede mostrar sistema información resumida así como una lista de tareas que actualmente se gestiona el kernel.
























Como puedes observar, la información sobre el sistema se refresca cada 3 segundos (se puede modificar ese parámetro). Por lo demás, la interfaz de usuario de top no es especialmente agradable, aunque resulta sencillo modificar ciertas opciones y ajustarla a nuestros requisitos. Pulsa “q” para salir de top.

5. Ejecuta ahora el mandato “top –u alumno”. ¿Cómo ha cambiado la salida del mandato? ¿A quién pertenecen los procesos que observas ahora?












6. Vuelve a ejecutar top. Apunta el PID del proceso Xorg. Dirígete a la carpeta “/proc”. Ejecuta ls. ¿A quién pertenecen los distintos directorios presentes en el mismo? Busca el directorio cuyo nombre coincida con el PID de Xorg. Muévete a ese directorio. Lista el contenido del mismo.

PID 931 de Xorg
931 vmallocimfo

























Puedes         leer       en       http://es.wikipedia.org/wiki/Procfs                     algunas          de       las peculiaridades del directorio “/proc”. Apunta algunas de sus principales características; en particular, por qué no ocupa espacio del disco duro y qué sistemas operativos, incluido Linux, hacen uso de un directorio como éste.

PROC es la abreviatura de sistema de ficheros de procesos, un pseudo sistema de ficheros que se utiliza para permitir el acceso a la información del kernel sobre los procesos. Dado que PROC no es un sistema de ficheros real, no consume ningún espacio de almacenamiento, y sólo consume una limitada cantidad de memoria

7. Observa en el enlace http://en.wikipedia.org/wiki/Procfs#Linux algunos de los ficheros y directorios más importantes que hay en la carpeta en que te encuentras, y para qué son usados.

Comprueba el tipo de archivo (por medio de “file”) que son “limits” y “status”. ¿Es coherente con lo que leíste en el ejercicio 6? Ahora, por medio de “less” (y de “sudo si fuera necesario), muestra el contenido de limits” y “status”. Apunta en tu informe de prácticas alguno de los datos que contienen ¿Qué tipo de información encuentras en los mismos?

Limits= Este archivo muestra el límite bajo, límite alto y unidades de medida para cada uno de los límites de recursos del proceso. El archivo está protegido para permitir sólo la lectura por el UID real del proceso.
Status= Proporciona mucha de la información en / proc / [pid] / stat/ proc / [pid] / status en un formato que es más fácil para los seres humanos para analizar.
Un ejemplo:
 
                  $ cat  / proc / $ $ / estado
                  Nombre: bash
                  Estado: S (sleeping)
                  TGID: 3515
                  Pid: 3515
                  PPID: 3452
                  TracerPid: 0
En ambos puedo encontrar su estado, su direccionamiento y valor de PID para cada proceso que me indica


8. Vuelve a tu directorio personal (cd $HOME, cd ~, cd /home/alumno, …) Veamos ahora algunos atajos de teclado que nos permiten gestionar procesos. Comprueba la función del mandato yes. Aunque el mismo pueda no parecer de gran utilidad a nosotros nos va a servir para comprobar cómo podemos detener y “matar” procesos. Ejecuta el mandato “yes hola”. Observa que el mensaje aparece indefinidamente.






9. Vamos a “matar” esa tarea. Intenta salir de la tarea con “q”. La tecla “q” (quit, salir) nos permite salir de ciertas aplicaciones en ejecución, pero no acabar con una tarea. Teclea el atajo “Ctrl + C”. El mismo debería terminar con el proceso activo. ¿Qué ha sucedido? El atajo de teclado “Ctrl + C” se encarga de terminar (o matar) una tarea. El atajo “Ctrl + Z” se encarga únicamente de detenerla (aunque el proceso siga “vivo” y se pueda retomar en el estado en que se detuvo). Finalmente, el atajo “Ctrl + Y” suspende un proceso hasta que el mismo disponga de una nueva entrada.












10. Podemos ahora redirigir la salida del mandato a un fichero (observa que esto podría darnos serios problemas de memoria en nuestra máquina). Para poder redirigir la salida de mandatos a un fichero sin peligro de que eso colapse nuestra memoria, Linux dispone de un fichero cuya localización es
/dev/null.

Comprueba las propiedades de “/dev/null. Apunta el tipo de fichero que es
(c),  sus  permisos, propietario y  tamaño.

Es un carácter disponible, que no representa problema para el kernel, sus permisos son para este ejemplo, solo de root, pero se puede agregar permisos para otros usuarios, su peso es de 0KB

Es un archivo especial que descarta toda la información que se escribe o Re direcciona en él. A su vez, no proporciona ningún dato a cualquier proceso que intente leer de él.
¿Podemos escribir al  mismo? Si podemos escribir
¿Podemos leer su contenido? Si lo podemos leer.

Ejecuta el mandato yes adios > /dev/null”.

Como puedes observar, la tarea en ejecución no permite seguir utilizando la terminal. Teclea Ctrl + C” para detenerlo. ¿Qué tamaño ocupa ahora en disco el fichero /dev/null? ¿Dónde ha ido a parar toda la información que hemos enviado?

Su tamaño es 340 KB, la información se ha ido al archivo plano null con una cantidad de 211 archivos.





11. Ejecutamos de nuevo el mandato yes que tal > /dev/null”.








12. Abre una nueva terminal y localiza el PID del proceso yes” iniciado. Puedes usar ps o top. Comprueba la utilidad del mandato kill. Como puedes observar, kill nos permite mandar señales a un proceso. El tipo de señales que   permite                mandar           lo                      puedes                      encontrar,            por        ejemplo,           en http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_01.html.

PID= 3359
Lee las Secciones 12.1.1.3 y 12.1.2  del anterior enlace. Apunta algunas de las señales más comunes que se pueden enviar a procesos en ejecución y la forma de hacerlo (por teclado, o por medio de kill). Interrumpe el proceso activo  “yes”  por  medio  del  mandato  kill  (kill  –s  15  PID).  Observa  la diferencia entre SIGKILL y SIGTERM.


SIGINT, es una interrupción de  teclado
SIGSTOP, detiene el proceso llamado
SIGKILL, mata la señal del proceso
SIGTERM, terminación total de la señal de proceso

La diferencia entre SIGKILL y SIGTERM, es que el primero solo mata la señal del proceso, el segundo la elimina totalmente en su ejecución.



13. En nuestra terminal original vuelve a ejecutar el proceso yes que tal >
/dev/null” y, desde la segunda terminal que hemos abierto, envíale ahora una señal de SIGKILL. Comprueba que el resultado externo ha sido el mismo que antes.
La finalización del proceso es igual.

14. No todos los procesos que ejecutamos en una terminal deben ejecutarse en primer plano (bloqueando así la terminal). También podemos hacer lo que   se      conoce           como        ejecución  en         segundo plano.   Puedes             leer  en http://www.mastermagazine.info/termino/5040.php información acerca de las principales diferencias entre ejecutar un proceso en primero o segundo plano (esencialmente tiene que ver con la prioridad del mismo).

La forma de hacer que un programa se ejecute en segundo plano es escribiendo  el  programa  en  el  intérprete  de  mandatos  seguido  de  un símbolo &; comprueba, en nuestra terminal original, el siguiente mandato:
$yes otra vez > /dev/null &


15. Vamos a hacer ahora uso del mandato jobs. Comprueba en primer lugar su función por medio de “help jobs”, y el significado de la opción “-l”. La diferencia entre                            un     “job”    y          un               “process” es           que        los                             “jobs”      son obligatoriamente iniciados desde una terminal y están asociados a ella (son procesos hijos” de la terminal).

Ejecuta el mandato “jobs” en la misma terminal que has ejecutado “yes”.
¿En qué estado se encuentra el proceso? Corriendo
Compruébalo también con los mandatos ps y top. Observa el porcentaje de
CPU que consume.



16. Entre los procesos de Linux siempre existe una jerarquía definida, ya que cada proceso debe tener un proceso padre (excepto el proceso de inicio o init). Esta jerarquía adquiere relevancia ya que “matar” a un proceso padre por lo general conlleva acabar también con los procesos hijos. En algunos casos, un proceso padre y sus hijos pueden incluso compartir memoria. Comprueba la jerarquía de procesos en tu máquina por medio del mandato pstree  (puedes  ver  alguna  de  sus  opciones en  man  pstree). Comprueba sus ancestros. Apunta en tu informe de qué procesos desciende “yes”.
Desciende de Konsole- bash- yes


17. Vuelve a ejecutar yes en la misma terminal y también en segundo plano (yes mensaje > /dev/null &). Vuelve a comprobar el árbol de procesos por medio de pstree -h”. Usando top, anota en tu informe el porcentaje de CPU (aproximado) que suman estos dos procesos yes.
Aproximado de 95.8% juntos






18. Vuelve a comprobar el estado de los procesos iniciados en esta shell por medio de jobs”. Comprueba que aparecen las dos tareas iniciadas y que en la segunda aparece el mbolo + indicando que es la última que se ha ejecutado. Apunta el estado de ambas en tu informe.

Su estado es corriendo, ambas.

19. El hecho de que las tareas estén ejecutándose en segundo plano, impide que les podamos enviar una señal de teclado (por ejemplo, Ctrl + Z, Ctrl + C). Compruébalo.

A  través de  “jobs”, cada tarea que se  está ejecutando desde nuestra terminal recibe un nuevo número (1, 2…). Esos números pueden ser usados con fg (foreground) para traer dichas tareas a primer plano (fg 1, fg 2), o para mandarlas a segundo plano (bg 1, bg 2…).

Aplicando en consola, es correcto.

20. Mata la segunda tarea iniciada (la de mayor PID). Por ejemplo, puedes ejecutar top y capturar su PID, y enviarle una señal de kill.











Envió un Kill al PID 3740 y es eliminado, en la segunda consulta de TOP, se verifica.


21. Comprueba por medio de jobs que sólo queda una tarea activa.

Comprobado en tabla anterior

22. Ejecuta el mandato “yes mensaje2 > /dev/null”. Por medio del teclado (Ctrl + Z), o por medio de kill (con la señal SIGSTOP ó 19 y con el PID correspondiente) envía al proceso una señal de “detenido”.


23. Comprueba que el proceso está detenido por medio de jobs.





24.      Para      recuperar         una      tarea       detenida       sólo      tienes      que      ejecutar        fg (foreground) o bg (background), dependiendo de que quieras que la tarea se ejecute en primer o segundo plano. Comprueba con fg que la tarea vuelve a primer plano.
















25. Por medio de una señal o del atajo de teclado detén de nuevo la tarea. Vuelve a iniciarla, esta vez en segundo plano (bg). Vuelve a detenerla sin traerla a primer plano (puedes usar “jobs” para conocer el estado de las tareas en ejecución). Para ello debes usar obligatoriamente señales por medio de kill.


26. Crea nuevas tareas por medio de “yes” en primer y segundo plano y prueba a detenerlas y reanudarlas por medio de bg, fg y las señales de kill.
























27. Vamos a recuperar ahora la idea de que todos los procesos dependen de su proceso padre”. Ejecuta varias veces seguidas el mandato “yes hola > /dev/null &”. Ejecuta una nueva terminal. En esta terminal comprueba ahora la estructura de “pstree”. ¿Quién es el antecesor directo de todos ellos? Ejecuta “top –u alumno” para comprobar qué tareas tienes en ejecución y cuáles son las que más recursos consumen. Si cerrases la terminal en que se encuentran los procesos “yes” ejecutándose, esto “mataría” todos los procesos “yes” que dependen de la misma. Teniendo en cuenta que “init” es el proceso “padre” de todos los procesos que están en ejecución, imagina lo que sucedería al ejecutar kill –s 9 1”. Desde la consola original, envía una señal de terminación a todos los procesos “yes” creados (trayéndolos a “fg” y ejecutando Ctrl + C” o enviándoles una señal a través de “kill).

El antecesor de todos es Init.
Las tareas que mas consumen son las de PID de yes.










Al ejecutar Kill –s 9 1 , todos los procesos se matarían, si desde la consola original les enviamos señales de kill, estos se ordenan uno a uno según la señal, eliminándose de esta forma.

28. Linux también dispone de utilidades para la programación de tareas; las tareas programadas son procesos que se ejecutarán (siempre y cuando la máquina  esté  encendida)  de  forma  planificada.  El  programa  que  nos permite programar tareas desde línea de mandatos se llama cron.

Puedes leer el manual de cron o los siguientes enlaces para aprender las nociones            básicas sobre su sintaxis, http://es.wikipedia.org/wiki/Cron_(Unix), http://www.linuxtotal.com.mx/index.php?cont=info_admon_006      (quizá alguno de los archivos a que hacen referencia estén en lugares distintos en nuestra distribución, lo importante es que recuerdes la sintaxis y la forma de uso).



Comprueba que “cron” está activo en tu ordenador (puedes observar si aparece en pstree). El proceso “cron” se debe encontrar siempre en ejecución, para que a la hora y día que tenga programada alguna tarea pueda ejecutar la misma. También te puedes asegurar de que el mismo está en marcha por medio del mandato:








$ sudo service cron start

















29. Existen diversas formas de programar nuevas tareas. El fichero en el que se encuentran las tareas programadas se llama “/etc/crontab”. Es un fichero de texto, así que puedes editarlo, por ejemplo, con nano. Para ejecutarlo deberás disponer de permisos de superusuario. Ejecuta:

$sudo nano /etc/crontab

Por defecto deberían aparecer varias tareas programadas del sistema. La estructura de cada una de las líneas es la siguiente:

minuto(s) - hora - día del mes   mes - día de la semana   usuario - mandato

De esta forma, la siguiente línea:

min.                  - hr.   d. mes   mes   d. sem.    us.                            - mandato
5,20,35,50          *              *                  *                *          alumno          cd /home/alumno/Escritorio;
wget http://www.utec.edu.sv

Significará que a los minutos 5, 20, 35, 50 de todas las horas (*), de todos los días del mes (*), de todos los meses y de todos los días de la semana (*), el usuario alumno    ejecutará los mandatos  cd /home/alumno/Escritorio; wget                                                                                               http://www.utec.edu.sv”. Inserta  la  nea anterior en la última línea de tu fichero crontab, de forma que la acción se ejecute  cada  cinco  minuto(5,10,15,20,25,30,35,40,45,50,55).  Guárdalo. Copia la nea que describe la tarea programada en tu guión de prácticas.









30. Crea otra nueva tarea programada, basándote en la anterior, para que cada 3 minutos de todas las horas, todos los días cada mes, de todos los meses, cualquier día de la semana, el usuario alumno realice el siguiente mandato:

Moverse a la carpeta Escritorio;
lanzar un mensaje con echo “Otra vez aquí” redirigido a un fichero de nombre aqui” (echo “Otra vez aqui” >> aqui).

Copia la nea que describe la tarea programada en tu guión de prácticas.


# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* 3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57  * * *  root    cd /home/alumno/Escritorio/Aqui;
 echo"Otra Vez Aqui"
#
31. Basándote en la sintaxis del fichero crontab tal y como viene explicada en http://es.wikipedia.org/wiki/Cron_(Unix) define una tarea programada tal que el día 3 de Junio de cada año, a la hora que prefieras, cree una carpeta en el Escritorio de tu ordenador y dentro de ella un fichero que se llame “log donde, por medio de echo, se envíe el mensaje “Hoy es día 3 de Junio”. Copia la línea que describe la tarea programada en tu guión de prácticas.
# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* * 3 6*  root    cd /home/alumno/Escritorio/Prueba/log; echo”Hoy es dia 3 de Junio”
 #
Comprueba         que     las      tareas       programadas           anteriores        cumplen        con      su cometido (en particular las dos primeras).
Comprobado

Comentarios

Entradas populares de este blog

Ejercicios P6 11 y P7 9 del libro Principios de Administracion Financiera de Lawrence J. Gitman Edicion 12

Saber si Windows es de 32 o 64 bits y su versión exacta

Activar Office 2013 y Windows 8.1