Agenda Sistemas Operativos Clase # 9 Tipos de llamadas al Sistema Sorpresa! no hay prueba. Tipos de llamadas al sistema. Viernes, 3 de Mayo de 2002 Iván Bernal, Ph.D. Escuela Politécnica Nacional email: imbernal@mailfie.epn.edu.ec Copyright @2002, I. Bernal 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 1 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 2 Tipos de llamadas al sistema (1) Tipos de llamadas al sistema (2) Se revisarán algunas de las llamadas POSIX al sistema más utilizadas. Las llamadas a revisarse se agrupan en cuatro categorías simplemente por conveniencia: – Concretamente se revisarán los procedimientos de la librería que hace las llamadas al sistema. El estándar POSIX especifica un conjunto de procedimientos que un sistema que desee cumplir con el estándar debe proveer. – No especifica si estos procedimientos son llamadas al sistema, llamadas a procedimientos, o algo más. – POSIX tiene alrededor de 100 llamadas. – La relación entre llamadas a procedimientos POSIX a llamadas al sistema no es siempre uno a uno. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 3 – Administración de procesos. – Administración de archivos. – Administración del sistema de archivos y directorios. – Varios. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 4 1 Manejo de procesos (1) Manejo de procesos (2) fork : – Única forma de crear nuevos procesos en UNIX. – Crea una réplica exacta del proceso original: descriptores de archivos, registros, etc. – Luego de la creación los procesos serán independientes. – El proceso padre recibe un identificador de proceso (PID -process identifier identifier)) para identificar al proceso hijo. – El proceso hijo recibe en cambio un PID=0;; de esta manera cada proceso sabe PID=0 si es el padre o el hijo. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 5 05/03/2002 Manejo de procesos (3) – Lee un comando del terminal. – Crea un proceso hijo. – Espera que el nuevo proceso ejecute el comando, y termine. – Lee el siguiente comando. Para esperar que el proceso hijo termine, el padre ejecuta la llamada al sistema waitpid. Sistemas Operativos Iván Bernal, Ph.D Ph.D.. Iván Bernal, Ph.D Ph.D.. 6 Manejo de procesos (4) Ejemplo: el shell 05/03/2002 Sistemas Operativos 7 waitpid:: waitpid –Puede esperar por uno o todos los procesos hijos (con -1 en el primer parámetro). –Cuando concluye el segundo parámetro tendrá el status de salida del proceso hijo: terminación normal o anormal. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 8 2 Manejo de procesos (5) Manejo de procesos (6) shell simplificado simplificado:: shell simplificado simplificado:: –Cuando se ingresa un comando, el shell crea (con fork)) un nuevo proceso. fork El proceso padre recibirá un PID != 0 si el proceso hijo se pudo crear. El proceso del shell entrará en espera con waipid. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 9 Manejo de procesos (7) shell simplificado simplificado:: Versiones de la librería de procedimientos que usan exec : –execve, execl, execle, execv. –El primer parámetro de éstas indica el archivo a cargarse. Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 10 Manejo de procesos (8) –La imagen completa del nuevo proceso en memoria, debe reemplazarse con el contenido del archivo que contiene el código del comando. Utiliza la llamada al sistema exec exec:: 05/03/2002 –El nuevo proceso creado es una copia del shell y está en el mismo estado: –Sin embargo, la llamada a fork en el nuevo proceso retornará un PID=0. –El nuevo proceso debe ejecutar el comando. 11 Código de shell simplificado implificado:: while (TRUE) { /* repeat forever */ type_prompt(( ); type_prompt /* display prompt */ read_command (command, parameters) /* input from terminal */ if (fork() != 0) { /* Parent code */ waitpid(( -1, &status, 0); waitpid } else { /* Child code */ execve (command, parameters, 0); } } 05/03/2002 Sistemas Operativos /* fork off child process */ /* wait for child to exit */ /* execute command */ Iván Bernal, Ph.D Ph.D.. 12 3 Manejo de procesos (9) Manejo de procesos (10) Código del shell : Código de nuevo proceso: while (TRUE) { type_prompt(( ); type_prompt read_command (command, parameters) if (fork() != 0) waitpid(( - 1, &status, 0); waitpid else execve (command, parameters, 0); } 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. while (TRUE) { type_prompt(( ); type_prompt read_command (command, parameters) if (fork() != 0) waitpid(( - 1, &status, 0); waitpid else execve (command, parameters, 0); } 13 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 14 Manejo de procesos (11) Parámetros de execve execve:: Manejo de procesos (12) Ejemplo de comando del shell: –El nombre del archivo a ejecutarse. –Un puntero al arreglo de argumentos. –Un puntero al arreglo de variables de ambiente. –cp archivo1 archivo2 –Copia el archivo1 al archivo2. –El shell crea un nuevo proceso. –El nuevo proceso localiza el archivo cp. –El proceso pasa a cp los nombres de los archivos fuente y destino para la copia. Tipo de terminal. Directorio de trabajo. Puede ser 0. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 15 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 16 4 Manejo de archivos (1) Para utilizar un archivo se debe primero abrirlo con open open.. Manejo de archivos (2) –Especificar el nombre del archivo. –O_RDONLY - > lectura. –O_WRONLY - > escritura. –O_RDWR - > lectura/escritura. –Para crear usar O_CREAT O_CREAT.. –En todos los casos se retorna un descriptor del archivo (fd (fd). ). 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 17 Manejo de archivos (3) Con fd se puede leer o escribir en el archivo. Para cerrar un archivo se usa close. Para leer y escribir se usan read y write. Por lo general se usan lectura y escritura secuencial. Para acceder de forma aleatoria a una parte de un archivo se usa lseek 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 19 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 18 Manejo de archivos (4) lseek: – Asociado a todo archivo existe un puntero que indica la posición actual en el archivo. Cuando se lee/escribe secuencialmente apunta al siguiente byte. lseek cambia el valor de este puntero. – Parámetros: Descriptor de archivo (fd). Nueva posición en el archivo. Es la posición dada relativa a la posición actual, al inicio del archivo o al final del archivo. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 20 5 stat: Manejo de archivos (5) Manejo de directorios (1) – Para solicitar información de un archivo.. archivo Modo del archivo: regular, especial, directorio. Tamaño. Fecha y hora de la última modificación. – Parámetros: fd. fd. Puntero a una estructura en donde se llenará la información requerida. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 21 05/03/2002 Manejo de directorios (2) Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 22 Manejo de directorios (3) mkdir y rmdir: Ejemplo con link : – Para crear y remover directorios. – Dos usuarios ast y jim. link : – Permite que un mismo archivo aparezca con diferentes nombres, en diferentes directorios. – Ejemplo: un equipo de programadores compartiendo un mismo archivo. Este aparecerá en el directorio de cada persona, posiblemente con nombres diferentes. – Compartir no es lo mismo que proveer una copia a cada persona. – Cualquier cambio hecho por una persona en el archivo se refleja en lo que los demás ven: hay solo un archivo. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 23 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 24 6 Manejo de directorios (4) Manejo de directorios (5) Ejemplo con link : mount / unmount: – ast ejecuta un programa con: con: link (“/usr/jim/memo”,”/usr/ast/note”); – El archivo memo en el directorio de jim, está presente ahora en el directorio de ast, con el nombre note.. note – Ambos nombres se refieren al mismo archivo. – Para remover los generado se usa unlink. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 25 – Permite unir dos estructuras de archivos.. archivos – Desde un programa se podría hacer: mount(“/dev/fd0”,”/mnt”,0); – Para montar un disquete: Nombre de archivo especial tipo bloque para el drive 0. La ubicación en el árbol de la jerarquía de archivos y directorios donde se hará el montaje. Si la estructura montada va a ser RD/WR o solo RD. 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 26 Manejo de directorios (6) 05/03/2002 Sistemas Operativos Iván Bernal, Ph.D Ph.D.. 27 7