Concepto de proceso. (c) 2006 Alexis Quesada / Francisco J. Santana 2

Documentos relacionados
Programación de Sistemas Ricardo Sanz

Procesos en UNIX. LABORATORIO DE SISTEMAS DE OPERACIÓN I (ci 3825) Prof. Yudith Cardinale

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

Introducción y Gestión de Procesos

Boletín 4- Procesos. Departamento de Lenguajes y Sistemas Informáticos

Boletín 4- Procesos. Departamento de Lenguajes y Sistemas Informáticos

Procesos y Threads Procesos y Threads. Concurrencia Concurrencia Ventajas Ventajas. Rendimiento Rendimiento (paralelismo) (paralelismo)

Procesos e Hilos en C

Concurrencia en UNIX / LINUX. Introducción: Procesos e Hilos POSIX

Clases 04 y 05: Repaso de programación de sistemas basados en UNIX

Funciones POSIX (I): Introducción

Fundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana

SISTEMAS OPERATIVOS PROCESOS. Pedro de Miguel Anasagast

Sistemas Operativos Práctica 3

Un ejemplo: UNIX PROCESOS UNIX

Prácticas de Sistemas Operativos

Sistemas Operativos. Procesos

Programación Concurrente

Prácticas de Sistemas operativos

Procesos Definición y Estados

Sistemas Operativos Practica 1: procesos y concurrencia.

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

MC Hilda Castillo Zacatelco PROCESOS

Procesos e hilos: el downloader

Práctica 1: Intérprete de mandatos. Sistemas Operativos Área de Arquitectura y Tecnología de Computadores

Tema 4: Gestión de Procesos

Informática Electrónica Concurrencia

PARTE II PROGRAMACION CON THREADS EN C

Tema 2. Administración de procesos

Sistemas Operativos Primer Recuperatorio Parcial 1

Hilos (threads) Realizado por M. Curiel

Entorno de programación de nivel 1: La librería PCAP

SISTEMAS OPERATIVOS: PROCESOS. Planificación de procesos

Programación Concurrente

Función monitoreo descriptor archivo #include <sys/types.h> #include<unistd.h> #include<errno.h> extern void procesamiento_datos(char *, int); void pr

Fundamentos de los Sistemas Operativos

SISTEMAS OPERATIVOS: Lección 4: Planificación de Procesos

Sistema Operativo Linux

Bloque I: Principios de sistemas operativos

Biblioteca de sistema

Llamadas al Sistema para la Creación de Procesos

Threads. Hilos - Lightweight process - Procesos ligeros

Sistemas operativos: una visión aplicada. Capítulo 3 Procesos

Sistemas Operativos Primer Examen Parcial 13/07/15

1. Procesos vs Hilos 2. Cuando se ejecutan los procesos 3. Fork 4. Clone 5. Cómo se ejucuta el fork? 6. do_fork() 7. copy_process 8.

Introducción y Gestión de Procesos

Programación Aplicada

ASO. Usuarios y protección en RedHat Linux 1

Sistemas Operativos. Tema 2

Taller de Sistemas Operativos. Procesos 2012

Tema 4: Padre e hijo

Ejercicios sobre tuberías

Sistemas Operativos. Grado Ingeniería Informática. TGR Procesos.

T5-multithreading. Indice

Tema 4 : señales. Sistemas Operativos: Programación de Sistemas. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez.

Bloque I: Principios de sistemas operativos

Sistemas Operativos I Manual de prácticas

Sucesos asíncronos. dit. dit. Juan Antonio de la Puente DIT/UPM UPM UPM

Procesos e hilos. Pablo San Segundo (C-206)

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Analista Universitario en Sistemas. Sistemas Operativos. Instituto Politécnico Superior THREADS

Sistemas Operativos sesión 12: tuberías

Sincronización de Threads

PROCESOS. Sistemas Operativos

Procesos e hilos: cálculo de

- Bajo que condiciones el algoritmo de planifiación de procesos FIFO (FCFS) resultaría en el tiempo de respuesta promedio más pequeño?

Sistemas Operativos. Prólogo

LINUX fork() execv() wait() exit() kill signal pipe creat close open read write fstat Chmod getuid, setuid, getgid setgid

Gestión de procesos en Linux

SISTEMAS OPERATIVOS II Tercer curso Ingeniería Informática. Curso

Programación de Multitareas utilizando Hilos

SISTEMAS OPERATIVOS Manejo de procesos

Procesos. Gustavo Romero. 25 de octubre de Arquitectura y Tecnología de Computadores. Definición Control Estado IPC

Tema 2. Procesos e hilos

Hilos Secciones Stallings:

Tema 4.3. Notas sobre seguridad lógica

Administración de Redes

Prácticas de Sistemas operativos

Prácticas de Sistemas operativos

Universisdad de Los Andes Facultad de Ingeniería Escuela de Sistemas

SISTEMAS. Ciclo 2014 Plan 2012

Sistemas operativos: una visión aplicada. Capítulo 3 Procesos. Contenido

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Octubre 2015

Sistemas Operativos Tema 5. Procesos José Miguel Santos Alexis Quesada Francisco Santana

Introducción a Sistemas Operativos: Concurrencia

DISPONE DE 50 MINUTOS PARA REALIZAR EL EJERCICIO

Nombre alumno: Ventajas: Inconvenientes:

Sistemas Operativos. Pedro Cabalar TEMA III. PROCESOS. Depto. de Computación Universidade da Coruña

Programación Concurrente

Linux 101 Gestión de Procesos

Participantes: Avila Aida Betancourt Sioly Briceño Susana Rojas Alejandro

SISTEMAS OPERATIVOS: PROCESOS. Hilos y Procesos

Arquitectura de Sistemas

Examen Final de Teoría. Grupo de teoría:

Sistemas Operativos Primer Parcial Tema2

UNIX. Curso de Modelado Molecular I INTRODUCCIÓN

Introducción a Sistemas Operativos: Ficheros

Llamadas al Sistema. Laboratorio de Arquitectura de Ordenadores

Transcripción:

Tema 3 : procesos Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Francisco J. Santana 1

Concepto de proceso Un programa es un conjunto de instrucciones almacenadas en disco En UNIX, a un programa que se ha cargado en memoria para ejecución se le denomina proceso Todo proceso tiene asociado en el sistema un identificador numérico único (PID) Francisco J. Santana 2

Estados de un proceso creación señal Parado señal Listo planificador En ejecución finalización Zombie Fin E/S E/S Suspendido Francisco J. Santana 3

Atributos de los procesos Estado Para qué usar el PID y el PPID? PID -creación de archivos termporales PPID (Id de su padre) - identificar qué proceso escribe un registro en un archivo Valor de los registros Identidad del usuario que lo ejecuta Prioridad Información sobre espacio de direcciones (segmentos de datos, código, pila) Información sobre la E/S realizada por el proceso (descriptores de archivo abiertos, dir. actual, etc.) Contabilidad de recursos utilizados Francisco J. Santana 4

Identificadores de un proceso Identificador de usuario (UID): el identificador del usuario que ha lanzado el programa Identificador de usuario efectivo (EUID): puede ser distinto del de usuario, p.ej en los programas que poseen el bit setuid (bit s ). Se usa para determinar el propietario de los ficheros recién creados, comprobar la máscara de permisos de acceso a ficheros y los permisos para enviar señales a otros procesos.se utiliza también para acceder a archivos de otros usuarios. Identificador de grupo (GID): el identificador de grupo primario del grupo del usuario que lanza el proceso Identificador de grupo efectivo (EGID): puede ser distinto del de grupo, p.ej. en los programas que poseen el bit setgid Tecleemos en el shell: ls -l /etc/passwd y ls -l /usr/bin/passwd Normalmente el UID y el EUID coinciden, pero si un proceso ejecuta un programa que pertenece a otro usuario y que tiene el bit s (cambiar el identificador del usuario al ejecutar), el proceso cambia su EUID que toma el valor del UID del nuevo usuario. Es decir, a efectos de comprobación de permisos, tendrá los mismos permisos que tiene el usuario cuyo UID coincide con el EUID del proceso. Francisco J. Santana 5

Lectura de los atributos del proceso #include <unistd.h> pid_t getpid(void); pid_t getppid(void); 1 a tarea práctica: escribir un programa que averigue qué pid tiene y la pid de su padre. Si ejecutámos repetidamente el programa anterior, qué observamos? Francisco J. Santana 6

Lectura de los atributos del proceso uid_t getuid(void); uid_t geteuid(void); gid_t getgid(void); gid_t getegid(void); 2 a tarea práctica: escribir un programita que escriba el id usuario real y efectivo, y el grupo real y efectivo. Luego cambiamos con chmod g+s nuestro programa y lo volvemos a ejecutar. qué ocurre? Francisco J. Santana 7

Modificación de atributos #include <unistd.h> int setuid(uid_t uid); int setreuid(uid_t ruid, uid_t euid); int seteuid(uid_t euid); int setgid(gid_t gid); int setregid(gid_t rgid, gid_t egid); int setegid(gid_t egid); Francisco J. Santana 8

Jerarquía de procesos El proceso de PID=1 es el programa init, que es el padre de todos los demás procesos Podemos ver la jerarquía de procesos con el comando pstree Francisco J. Santana 9

Grupos y sesiones Todos los grupos de procesos comparten el mismo PGID Sesión $ cat /etc/passwd cut f2 d: $ gcc g O2 proc.c o proc $ ls - /usr/include/*.h sort less Grupos de procesos Francisco J. Santana 10

Grupos de procesos Todo proceso forma parte de un grupo, y sus descendientes forman parte, en principio, del mismo grupo Un proceso puede crear un nuevo grupo y ser el leader del mismo Un grupo se identifica por el PID de su leader Se puede enviar señales a todos los procesos miembros de un grupo Francisco J. Santana 11

Grupos de procesos #include <unistd.h> int setpgid(pid_t pid, pid_t pgid); pid_t getpgid(pid_t pid); int setpgrp(void); pid_t getpgrp(void); Francisco J. Santana 12

Tiempos Tipos transcurridos: Tiempo de reloj de pared : tiempo transcurrido Tiempo de CPU de usuario: cantidad de tiempo que utiliza el procesador para la ejecución de código en modo usuario (modo no núcleo) Tiempo de CPU del núcleo: cantidad de tiempo utilizada en ejecutar código de núcleo La función times devuelve el tiempo de reloj de pared en ticks de reloj: #include <sys/times.h> POSIX clock_t times(struct tms *buf); Francisco J. Santana 13

Información de contabilidad #include <sys/time.h> no es POSIX #include <sys/resource.h> #include <unistd.h> int getrusage(int who, struct rusage *rusage); Da tiempo usado en código de usuario, tiempo usado en código del kernel, fallos de página who=proceso del que se quiere información Francisco J. Santana 14

La función system #include <unistd.h> int system(const char *cmdstring); Crea un proceso que ejecuta un shell y le pasa el comando para que lo ejecute Devuelve el código retornado por el comando de shell, 127 si no pudo ejecutar el shell y -1 en caso de otro error Francisco J. Santana 15

Ejercicio Práctico Crear un programita que utilice times para visualizar los distintos tiempos transcurridos durante la ejecución del mismo. Utilizar bucles y llamadas a funciones para ir analizando los distintos tiempos. Utilizar una llamada a system y analizar tiempos tras su ejecución Francisco J. Santana 16

Creación de procesos. fork Llamada al sistema fork: #include <unistd.h> pid_t fork(void); Se crea un proceso idéntico al padre fork devuelve 0 al proceso hijo, y el PID del proceso creado al padre Francisco J. Santana 17

Funciones de terminación _exit vuelve al kernel inmediatamente. Definida por POSIX #include <unistd.h> void _exit(int status); exit realiza antes cierto limpiado (p.ej. terminar de escribir los buffers a disco). Es ANSI C #include <stdlib.h> void exit(int status); abort() : el proceso se envía a sí mismo la señal SIGABRT. Termina y produce un core dump Francisco J. Santana 18

Espera por el proceso hijo #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *statloc); pid_t waitpid(pid_t pid, int *statloc, int options); Suspende al proceso que la ejecuta hasta que alguno de sus hijos termina Si algún hijo ha terminado se devuelve el resultado inmediatamente El valor retornado por el proceso hijo puede deducirse de statloc Francisco J. Santana 19

Ejemplo de fork y wait if ( fork()==0 ) { printf ( Yo soy tu hijo!!! \n"); exit(1); } else { int tonta; wait(&tonta); } Francisco J. Santana 20

Ejercicio Práctico Crear un programita que cree tres procesos hijos, en el que cada uno de ellos hará un bucle para escribir en pantalla un número del 1 al 100, en grupos de 10 (cada diez números), especificando en cada iteración el pid del hijo que la realiza. Usaremos RUSAGE_SELF y RUSAGE_CHILDREN (llamada al sistema getrusage) para analizar el tiempo que utilizan los hijos para realizar las iteraciones El padre deberá esperar hasta que los hijos finalicen para acabar, y dará un mensaje de aviso. Los hijos terminarán con funciones distintas de : _exit, exit y abort. Francisco J. Santana 21

Procesos zombie Si un proceso padre no espera (wait) por la terminación de un proceso hijo, qué pasa con éste? El proceso se queda zombi, o sea, queda con los recursos asignados, pero sin poder ejecutarse (no se le asigna CPU) El proceso hijo no puede desaparecer sin más, porque ha de comunicar su código de salida a alguien El proceso hijo habrá terminado (genocidio), pero permanecerá en el sistema (estado zombie). Cuando se haga el wait el proceso zombie se eliminará del sistema Francisco J. Santana 22

Procesos zombie qué pasa si nunca hago el wait? Cuando el proceso padre termine, los hijos pasan a ser hijos del proceso init El proceso init elimina automáticamente los hijos zombies que tenga Y si el proceso padre no termina nunca (p.ej. un servidor)? llamar wait3, wait4 periódicamente (pueden ser nobloqueantes) manejar la señal SIGCHLD Francisco J. Santana 23

Las llamadas exec Para lanzar un programa, almacenado en un fichero (ejecutable) El proceso llamante es machacado por el programa que se ejecuta, el PID no cambia (el nuevo proceso absorve al proceso llamador) Solo existe una llamada, pero la biblioteca estándar C tiene varias funciones, que se diferencian en el paso de parámetros al programa Ej: char* tira [] = { "ls", "-l", "/usr/include", 0 };... execv ( "/bin/ls", tira ); Las llamadas retornan un valor no nulo si no se puede ejecutar el programa Francisco J. Santana 24

Prioridad. nice #include <unistd.h> int nice(int inc); Por defecto, los procesos tienen un valor de nice 0 inc > 0 => menor prioridad inc < 0 => mayor prioridad (solo superusuario) Francisco J. Santana 25

Threads POSIX Un thread existe dentro de un proceso. Como los procesos, los threads se ejecutan concurrentemente Los threads de un proceso comparten su espacio de memoria, descriptores de ficheros, etc. Linux implementa el API estándar POSIX para threads, llamado pthreads Uso de pthreads: #include <pthread.h> Opción lpthread del compilador Francisco J. Santana 26

Threads POSIX. Para crear un thread necesitamos utilizar la llamada al sistema: int pthread_create (pthread_t *thread, pthread_attr_t *attr, void * (*start_routine)(void *), void * arg); thread es un apuntador a tipo de dato pthread_t que contiene el identificador del hilo de ejecución. attr es el apuntador a un tipo de dato pthread_attr_t, este indica que conjunto de atributos tendrá un hilo, entre otros: si un hilo puede obtener el estado de terminación de otro, que política de planificación tiene, que parámetros de planificación, etc. Para ver que tipos de atributos se tienen mirar pthread_attr_init(3). Se puede utilizar el valor NULL. start_routine es un apuntador a una función donde el hilo se ejecutará dicha función debe tener la siguiente firma: void* funcion_hilo(void *arg) {... } arg es el argumento que será pasado a la función que implementa el hilo. Francisco J. Santana 27

Threads. POSIX. Ejercicio Práctico: Crearemos una pequeña aplicación que cree un hilo: El hilo deberá, constantemente, escribir por pantalla hilo. El proceso que crea el hilo (padre), deberá escribir, constantemente, padre. Francisco J. Santana 28