SISTEMAS OPERATIVOS Procesos Linux Marcela Rivera Castro marcela

  • Slides: 28
Download presentation
SISTEMAS OPERATIVOS Procesos Linux Marcela Rivera Castro marcela. rivera. c@usach. cl Departamento Ingeniería Informática

SISTEMAS OPERATIVOS Procesos Linux Marcela Rivera Castro marcela. rivera. c@usach. cl Departamento Ingeniería Informática Universidad de Santiago de Chile 1 -2019 1

Procesos • Un programa en ejecución. • Una instancia de un programa corriendo en

Procesos • Un programa en ejecución. • Una instancia de un programa corriendo en un computador. • La entidad que puede ser asignada (planificada) para su ejecución en un procesador. • Unidad de actividad caracterizada por la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto asociado de recursos del Sistema. • Cuando un programa es compilado, linkeado y cargado en memoria se transforma en un proceso. La labor principal del SO está basada en el control de los procesos 2

Elementos típicos de un proceso • • Identificador. Estado. Prioridad. PC (program counter). Punteros

Elementos típicos de un proceso • • Identificador. Estado. Prioridad. PC (program counter). Punteros a memoria (texto, dato, etc). Contexto (contenido de registros). Información de status de I/O. Información de contabilidad. 3

De programa a proceso Usando gcc podemos obtener los resultados de algunas de estas

De programa a proceso Usando gcc podemos obtener los resultados de algunas de estas etapas: $ gcc -o hello -save-temps hello. c $ ls hello* hello. c hello. i hello. o hello. s 4

Creación de proceso Situaciones típicas que crean nuevos procesos: 1. Solicitud de un usuario

Creación de proceso Situaciones típicas que crean nuevos procesos: 1. Solicitud de un usuario mediante la ejecución de un comando: $. /hello 2. Solicitud de un proceso ya existente, mediante la invocación de un llamado al sistema. main() {. . . pid = fork(); . . . } • Cuando se abre una aplicación mediante la interacción en una GUI. 1. El SO puede crear varios procesos al momento de bootear. 2. El SO se encarga de crear a los procesos y administrarlos. Debe: – Procurar memoria principal para alojar al proceso – Crear una estructura o registro que contenga información acerca del proceso. 5

Bloque de control de proceso (PCB) • Estructura de datos que contiene los elementos

Bloque de control de proceso (PCB) • Estructura de datos que contiene los elementos de procesos. • Creado y manejado por el SO. • Contiene la información necesaria para interrumpir un proceso en ejecución y luego reanudarlo (como si la interrupción no hubiera ocurrido). 6

PCB de Linux • El descriptor de procesos en Linux es task struct (include/linux/sched.

PCB de Linux • El descriptor de procesos en Linux es task struct (include/linux/sched. h). Algunos de los elementos más importantes son: struct task_struct { volatile long state; // estado del proceso long counter; // Usada junto con prioridad long priority; // prioridad unsigned long blocked; // señales mascaradas struct task_struct *next_task, *prev_task; // punteros, anterior y próximo int pid; // Process ID struct task_struct *p_opptr, *p_cptr; // punteros al padre original, actual // hijo más joven, etc. unsigned short uid, euid, suid, fsuid; // ID usuarios long utime, stime, cutime, cstime, start_time; // usos de procesador struct thread_struct tss; // Thread state stack struct fs_struct *fs; // info de sistema de archivos struct files_struct *files; // info sobre archivos abiertos struct mm_struct *mm; // puntero a estructura de admin memoria struct signal_struct *sig; // manejadores de señales }; 7

Estado de procesos Un proceso que no está corriendo puede: – estar listo para

Estado de procesos Un proceso que no está corriendo puede: – estar listo para ejecución. – estar bloqueado esperando por I/O. • Una sola cola de espera no sería apropiada. • El dispatcher no puede simplemente seleccionar de la cola el proceso que más tiempo ha estado en ella; puede ser que esté bloqueado. • 8

Modelo de proceso de 2 estados Un proceso puede estar en uno de dos

Modelo de proceso de 2 estados Un proceso puede estar en uno de dos estados: – Corriendo – No corriendo 9

Modelo de proceso de 5 estados • El estado no-corriendo se divide en dos:

Modelo de proceso de 5 estados • El estado no-corriendo se divide en dos: listo y bloqueado • Por conveniencia, se agregan dos estados más. 10

Modelo de 5 estados • Running (ejecutándose): el proceso está corriendo, es decir está

Modelo de 5 estados • Running (ejecutándose): el proceso está corriendo, es decir está en la CPU. • Ready: el proceso está listo para ejecutarse. • Blocked: no puede ejecutarse hasta que un evento dado ocurra. Ej: operación de I/O termine. • New: está recién creado, pero aún no ha sido admitido en la cola de Ready. Ej. Aún no ha sido cargado en memoria. • Exit: un proceso que, por algún motivo, ya no sigue ejecutándose en el sistema. 11

Ejemplo de transición entre estados 12

Ejemplo de transición entre estados 12

Múltiples colas 13

Múltiples colas 13

Procesos Suspendidos • El procesador es mucho más veloz que los dispositivos de I/O,

Procesos Suspendidos • El procesador es mucho más veloz que los dispositivos de I/O, por lo que sería posible que todos los procesos en memoria estuvieran esperando por I/O. ¿Qué se debería hacer? – Hacer Swap a disco (temporalmente) a algunos de estos procesos y así liberar memoria. • Procesos que han sido swapeados a disco desde el estado de bloqueados, pasan al estado Suspendido. • Note que swapping es una operación de I/O. 14

Características de un proceso suspendido • El proceso no está disponible para ejecución inmediata.

Características de un proceso suspendido • El proceso no está disponible para ejecución inmediata. • El proceso puede o no estar esperando por un evento. La condición de bloqueado es independiente de la condición de suspendido. • El proceso fue puesto en estado suspendido por un agente: el mismo, el padre o el SO. • El proceso no puede ser removido de estado hasta que el agente lo ordene. 15

Modelo de estado con un estado Suspendido 16

Modelo de estado con un estado Suspendido 16

Modelo con dos estados Suspendido • Blocked: proceso en memoria principal y esperando por

Modelo con dos estados Suspendido • Blocked: proceso en memoria principal y esperando por un evento. • Blocked/Suspend: proceso en memoria secundaria y esperando por un evento. • Ready/Suspend: proceso en memoria secundaria, pero listo para ejecución en cuanto se cargue en memoria principal. 17

Modelo de estados en linux TASK RUNNING: en la cola de listos o en

Modelo de estados en linux TASK RUNNING: en la cola de listos o en el procesador. TASK INTERRUPTABLE: proceso bloqueado esperando un evento: fin de I/O, o alguna señal de otro procesos. TASK UNINTERRUPTABLE: proceso bloqueado esperando alguna condición de hardware. No recibe señales de otros procesos. TASK ZOMBIE: proceso finalizado. TASK STOPPED: proceso detenido y sólo puede reanudarse mediante una señal de otro proceso (ejemplo debugger). 18

Cambio de contexto Un cambio de contexto ocurre cada vez que el procesador comienza

Cambio de contexto Un cambio de contexto ocurre cada vez que el procesador comienza o reanuda la ejecución de un proceso distinto (al actual). ¿Cuando hacer un cambio de contexto? 1. Trap: interrupción asociada a un error de la ejecución de la instrucción actual. 2. Interrupción: evento externo a la ejecución del proceso. 3. Interrupción del reloj por termino de tiempo. 4. Fallo de memoria: La dirección de memoria no se encuentra actualmente en memoria principal. 5. Llamado al sistema (system call): por ejemplo instrucción de I/O. Un cambio de contexto o cambio de proceso no es lo mismo que un cambio del modo de ejecución del procesador 19

Labores ante un cambio de contexto ¿Cuando hacer un cambio de contexto? 1. Guardar

Labores ante un cambio de contexto ¿Cuando hacer un cambio de contexto? 1. Guardar el contexo del proceso incluyendo el PC y otros registro. 2. Actualizar el PCB del proceso que actualmente está en ejecución. 3. Mover el PCB de la cola de listo a la cola apropiada. 4. Seleccionar otro proceso para ejecución. 5. Actualizar el PCB del proceso seleccionado. 6. Actualizar las estructuras de administración de memoria. 7. Restaurar el estado del procesador con el contexto del proceso elegido. 20

Modos de Ejecución de un proceso • Modo usuario – Modo menos privilegiado. –

Modos de Ejecución de un proceso • Modo usuario – Modo menos privilegiado. – Los procesos de los usuarios generalmente se ejecutan en este modo. – Ciertas instrucciones no pueden ser ejecutadas en este modo. – Típicamente, un proceso sólo puede acceder a direcciones de memoria de su espacio privado de direcciones. • Modo kernel – Modo más privilegiado. – El Kernel del SO se ejecuta en este modo. – El SO tiene control completo del procesador y puede ejecutar cualquier instrucción. – Accede a cualquier porción de memoria. • Uno o más bits en el PSW indica el modo actual de ejecución. 21

Creación de Procesos en Unix • fork() es el llamado al sistema para crear

Creación de Procesos en Unix • fork() es el llamado al sistema para crear un nuevo proceso #include <sys/types. h> #include <unistd. > pid_t fork(void); • fork() crea un proceso hijo, copia exacta del proceso padre. Lo único diferente es el identificador de proceso o pid. • fork() retorna: – El pid del hijo, en el proceso padre. – 0, en el proceso hijo 3 – -1 si hubo algún error (sólo en el padre) fork() es llamado una vez, pero retorna dos veces. 22

Ejemplo #include <sys/types. h> #include <unistd. > main() { int pid; if ( (pid

Ejemplo #include <sys/types. h> #include <unistd. > main() { int pid; if ( (pid = fork()) == -1) { printf("No se pudo crear hijon"); exit(-1); } if (pid == 0) { // soy el hijo printf("Soy el hijo y mi pid = %dn", getpid()); printf("Hijo: el pid de mi padre es = %dn", getppid()); exit(0); } else { // soy el padre printf("Soy el padre y mi pid = %dn", getpid()); printf("Padre: el pid de mi hijo es %dn", pid); printf("Padre: el pid de mi padre es %dn", getppid()); exit(0); } } 23

Familia exec Si fork() crea un clon de un proceso, ¿cómo sería posible crear

Familia exec Si fork() crea un clon de un proceso, ¿cómo sería posible crear procesos hijos totalmente distintos a un padre? . • execve() ejecuta un nuevo programa en el proceso que realiza la invocación. • execve() no crea un nuevo proceso, sino que sobre-escribe el programa actual con uno nuevo #include <unistd. > int execve(const char *filename, char *const argv [], char *const) • filename es el camino absoluto del programa ejecutable. • argv[] es un arreglo con los argumentos de línea de comandos. • envp[] es el medio ambiente de ejecución del proceso • execve() no retorna si hubo éxito. 24

Familia exec Las siguientes funciones son front-ends de execve(): #include <unistd. > int execl(const

Familia exec Las siguientes funciones son front-ends de execve(): #include <unistd. > int execl(const char *path, const char *arg, . . . ); int execlp(const char *file, const char *arg, . . . ); int execle(const char *path, const char *arg , . . . , char * const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); Para recordar: • “l” : lista uno los argumentos. • “v” : entrega un vector con los argumentos. • “p” : usa el PATH definido en el medio ambiente del proceso para encontrar el ejecutable. • “e” : asigna un environment, es decir medio ambiente. 25

Ejemplo de execv #include <sys/types. h> #include <unistd. > main() { int pid; if

Ejemplo de execv #include <sys/types. h> #include <unistd. > main() { int pid; if ( (pid = fork()) == -1) { printf("No se pudo crear hijon"); exit(-1); } if (pid == 0) { // soy el hijo if (execlp("ls", "/home/rannou", 0) == -1) { printf("no se pudo hacer execn"); exit(-1); } printf("bye"); } // soy el padre wait(pid); printf("mi hijo finalizon"); exit(0); } 26

Tarea 1 • Construir un árbol binario de N niveles, el cual crezca por

Tarea 1 • Construir un árbol binario de N niveles, el cual crezca por una única rama. Ejemplo: 27

Bibliografía Fernando Rannou, 2014. Disponibles en el curso sistemas operativos en usachvirtual. 28

Bibliografía Fernando Rannou, 2014. Disponibles en el curso sistemas operativos en usachvirtual. 28