Breve historia 1962 CTSS MIT: tiempo compartido y protección 1967 MULTICS MIT, Bell, GE: el SO más avanzado de su época. Multiusuario, multiproceso, árbol de ficheros, intérprete de órdenes (shell), proceso individual para cada orden. 1973 UNIX@ Bell (Thompson, Ritchie) escrito en C 1978 3BSD @ Berkeley (Joy, Babaoglu): memoria virtual paginada 1980 4BSD @ Berkeley (DARPA) Internet 1988 X y NeWS: sistema de ventanas distribuido 1990 Normalización : Sun + AT&T, POSIX, XOPEN 1991 386BSD, GNU, Linux: versiones libres Sistema Operativo UNIX ÿ ¿Que es UNIX? UNIX: un Sistema Operativo • Compartir la memoria entre los diferentes elementos Sistema operativo • Compartir el CPU entre los diferentes procesos multiproceso y multiusuario simple y uniforme portátil, desarrollado casi totalmente en alto nivel muy potente • Controlar la creación y el acceso de los archivos • Control del hardware (E/S) Usuarios Entorno de trabajo Programas de aplicación basado en el modelo de caja de herramientas concebido para desarrollo fácil de extender Administrador de la base de datos El shell UNIX Hardware Estructura del sistema ú û ú Arquitectura del sistema UNIX shell ÿ ù ùø úÿ ý ù û ú Manejo de señales Planificación de la CPU Controladores de dispositivos Gestión de memoria Sistema de E/S Sistema de archivos ÿþýüûúùø cc scripts csh comp e date a.out sh who ld wc System calls ccp Kernel grep vi Hard pwd date ware as ps cat ls man more û ù aplicaciones 1 Núcleo del sistema UNIX user programs trap Acceso a un sistema UNIX libraries • Para conectarse es necesario: user level system level - Un nombre de usuario system call interface file system process control 8 caracteres como máximo, creado por el administrador del sistema, (apellido, nombre, matrícula) inter-process communication - Una clave de entrada, contraseña o password Creada por el administrador del sistema y modificada por uno mismo formada por al menos seis caracteres, (al menos dos caracteres deben de ser diferentes a letras). Para elegirla adecuadamente: Evitar palabras del diccionario, nombres, números Evitar palabras en idiomas comunes Combinar letras con números Elegir claves que tengan algún sentido (que sea fácil de recordar) Cambiarla con cierta frecuencia scheduling memory management buffer cache character block devices devices hardware control Acceso a un sistema UNIX El shell (intérprete de comandos) • Para entrar desde el entorno local en modo texto: login: milogin Password: ****** El shell es un programa que lee líneas de comando de una terminal o archivo, las interpreta, y le indica a • Si hay algun error: UNIX que hacer Login incorrect login: • Interfaz entre los usuarios y UNIX • Interprete de comandos • Si todo va bien, aparece el "prompt": $ para el bourne shell • Es un lenguaje de programación % para el C-shell • El shell no es parte del sistema operativo ÿ El shell (intérprete de comandos) El entorno UNIX • Cuatro tipos: Cuando uno entra al sistema UNIX, el sistema les proporciona un Shell. Este Shell proporciona al usuario un entorno propio El entorno del usuario contiene toda la información necesaria, así como ciertas variables El shell almacena dos tipos de variables: 1. Bourne shell (sh, bash) Forma parte del de la 7a. edición de UNIX y es el más viejo de los shells principales de UNIX 2. C shell (csh) + las variables locales Es el principal del UNIX BSD, más fácil de usar interactivamente 3. Korn shell (ksh) Extensión del Bourne shell 4. Extended C shell (tcsh) Versión mejorada del C shell + las variables exportadas Las variables locales sólo son conocidas por el Shell que las creó o modificó Las variables exportadas pueden ser vistas por todos los sub-shells El comando env despliega en la pantalla la lista de las variables así como su valor Cada vez que se crean o modifican las variables el entorno del usuario es actualizado Complementación interactiva de comandos y nombres archivos, llamada sencilla de comandos previos, marca de la hora en la lista histórica... ÿÿ ÿ 2 Las variables del shell Las variables del shell • El Shell permite almacenar valores dentro de las variables • Para acceder el contenido de una variable, se debe anteceder el caracter "$" a su nombre, • El nombre de las variables debe de comenzar por una letra o un "_", seguida por cero o más caracteres alfanuméricos o un "_" Ejemplo: $ echo $dir_bin • Para asignar un valor de una variable se debe utilizar el comando set /usr/toto/bin $ set variable = valor $ Ejemplo • Existen variables utilizadas por el Shell, (mayúsculas), que son creadas e inicializadas en el momento en que el usuario entra al sistema $set dir_bin = /usr/local/bin • El contenido de una variable es una cadena de caracteres Ejemplo: $ echo $TERM $HOME vt100 /home/isa/jossan $ ÿ La variable PATH ÿ Cambio de clave o password • El Shell utiliza esta variable para saber donde buscar los comandos a ejecutar, cuando el camino de acceso no se proporciona • Esta variable se inicializa después del " login " • El comando passwd permite modificar el password de un usuario, para esto el usuario deberá de conocer el password de la cuenta que desee modificar. • El usuario la puede modificar a su voluntad • Los valores comunes son: • Ejemplo: PATH=.:/bin:/usr/bin $ passwd PATH=/bin:/usr/bin:. Changing password + en el primer caso, el directorio actual es explorado primero Old password: <antiguo password> + en el segundo caso, el directorio actual es explorado al último New password: <nuevo password> • Un ejemplo de modificación de la variable PATH es: Re-enter new password: <nuevo password> $set PATH=/bin:/usr/bin:.:$HOME/bin ÿ El manual de UNIX ÿ La línea de comandos • La línea de comandos empieza en el prompt del Shell, hasta <RETURN> • Dividido en secciones: 1) Comandos de usuarios 5) Formatos de archivos 2) Llamadas de sistema 6) Juegos 3) Subrutinas 7) Varios 4) Dispositivos 8) Administración de Sistema • La primera palabra es el nombre de un archivo ejecutable, o de un comando interno del Shell • El comando puede ser seguido por una o más opciones, y/o uno o más argumentos, (separados por espacios o tabulaciones) • La línea de comando no es ejecutado antes del <RETURN> • El Shell contiene cuatro tipos de líneas de comandos: • Sintaxis man [ opcion ] [ seccion ] titulo(s) - simple - secuencial - pipeline - agrupado • Para poder capturar una línea de comando muy larga, es posible de insertar el caracter " \ " al final de la primera línea, después de teclear <RETURN> para poder teclear el resto de la línea de comando en una segunda línea de la terminal • Ejemplo: $ man mkdir ÿ ÿ 3 La línea de comandos Tipos de comandos nombre [-opciones] [argumentos] Nombre Cualquier fichero ejecutable que sea accesible nombre absoluto nombre relativo (se busca en PATH) Opciones: son modificadores del programa casi siempre precedidas por casi siempre acumulativas -abcd --opcion ls –alR . ls –lR --all . a veces con argumentos man -S 1 ls Argumentos son los operandos del programa Informativas man (por secciones), info, netscape, lynx, gv date, cal, ps, pwd Ejecutivas De usuario: lpr, cp, mv, rm De sistema: sync, halt, reboot, shutdown Procesadoras cmp editores (edit, joe, pico, vi, emacs) sort, cat, head, tail, grep, awk diff ÿ Dispositivos estándar Redirección de dispositivos estándar Disponibles para todos los procesos Los utilizan los programas como entrada y salida por defecto. Entrada sort < fichero Salida ls ls ls ls Dispositivos estándar de los procesos entrada estándar salida estándar salida de error stdin ú -l -l kk kk > listado >> listado 2> listado_errores . > todo 2>&1 ÿ stdout stderr Encadenamiento (pipeline) du | sort -n ÿ Composición de comandos Sistema de archivos en UNIX • Archivos ¿Qué son? Secuencial: date ; who - Información asociada a un nombre Paralelo: date & who - Considerada como una serie de bytes: Agrupamiento: (sleep 5; date) & date (date ; who) | tee espia | wc (cd / ; ls) | wc -l + Caracteres ASCII Continua si no falla: grep -i amor poema > temp && wc temp Continua si falla grep -i amor poema > temp || rm temp + Código máquina - Almacenados en un disquete, disco duro, o CD • Tipos de archivos 1. Ordinarios - Contienen una serie de bytes (ASCII, binarios, ambos) - Estructura interna definida por el usuario 2. Directorios 3. Especiales periféricos, (descriptores) - De carácter, de bloque, fifo ... - Se encuentran dentro del directorio /dev 4 Creación de archivos Nombres de los archivos • Cada archivo, comprendidos los directorios y los archivos especiales, es referenciado por un nombre • Pueden ser creados por: - un editor (ed, vi, emacs, ex ......) - la redirección de la salida estándar de un programa • Características del nombre: - 14 caracteres de longitud máxima (sistema V) o 255 (BSD 4.x) $ ls -l tarea* > salida.txt - Puede contener cifras y letras (minúsculas y/o mayúsculas) - algunos comandos (cp, sort, cc, mkdir) • La administración de los archivos es efectuada por UNIX y es totalmente transparente al usuario - El primer caracter no puede ser: - + = - No se aconsejan los caracteres especiales, salvo: . , _ • Ejemplos: passwd test-temp archivo_viejo .cshrc source.c cb.027-01 • Los archivos son generalmente escritos sobre disco • Utilizar convenciones para los nombres de los archivos • Cada archivo está asociado con al menos un nombre Directorios • Archivos “invisibles”: empiezan con . Directorios comunes • Permiten organizar el sistema de archivos /bin contiene los principales comandos • Referenciados por su nombre, (como los otros archivos) /etc contiene los comandos y los archivos utilizados para el mantenimiento y administración del sistema /lib contiene librerías y programas de los compiladores • Contienen dos tipos de información - El nombre del archivo - El número de bloque de control (i-nodo) • El directorio contiene estas informaciones para todos los archivos, otros directorios, y/o archivos especiales que se encuentran a nivel inferior • Cada directorio es creado con dos entradas: - "." una referencia a él mismo /tmp contiene los archivos temporales. Los usuarios pueden usarlo como zona de trabajo /dev contiene los archivos especiales de descripción de periféricos /usr Contiene los comandos locales, algunas librerías, los comandos usuarios, los archivos de los correos, etc. Los directorios de los usuarios pueden encontrarse en este directorio /usr/bin contiene los comandos complementarios - ".." una referencia a su padre • Cuando se entra al sistema ("loguearse"), UNIX posiciona al usuario en un directorio: es el directorio HOME /usr/lib contiene las librerías y los programas suplementarios. También contiene los programas de administración de las impresoras y comunicación /home los directorios de los usuarios pueden encontrarse dentro de sistemas de archivos separados El directorio HOME Acceso a archivos en UNIX • Cada usuario tiene un directorio HOME • Cada archivo es referenciado por su camino de acceso (pathname) formado por: • Directorio creado por el administrador del sistema, generalmente es creado dentro del directorio /usr, o /home • Después del "login:" el usuario se encuentra dentro de este directorio, (que se convierte en su directorio de trabajo) - un nombre o una sucesión de nombres - separados por "/" - terminado por el nombre del archivo o directorio deseado • Normalmente, el usuario trabajará en los directorios que se encuentran dentro del directorio HOME • Para posicionarse en él basta con teclear: • Una forma de accesarlo desde cualquier directorio es a través del caracter "~", por ejemplo: Se indican todos los directorios necesarios para acceder a un archivo $ /home/jossan/practicas/P1/practica1.c $ pwd 2. relativo /home/jossan/pruebas $ cp ~/practica1/*.c . • Existen dos formas de especificar un camino de acceso 1. absoluto $ cd <ret> o bien $ cp $HOME/practica1/*.c . Referido al directorio de trabajo actual $ practicas/P1/practica1.c 5 Listado del contenido de un directorio Listado del contenido de un directorio • ls despliega los nombres de los archivos que se encuentran dentro del directorio actual, • Sintaxis: ls [opciones] • Ejemplo: $ ls -l total 4 • Algunas opciones: -a lista los archivos que comienzan con un "." -l listado en formato largo d r w x r - x r - x 2 jossan isa 4096 Feb 12 20:13 mail d r w x r - x r - x 2 jossan isa 4096 Dec 11 12:43 posix - r w x r - x r - x 1 jossan isa -s da el tamaño de los archivos en kilo-bytes 240 Feb 15 19:57 prueba.c - r w - r - x - - x 1 jossan isa 11668 Feb 12 20:14 zz -u despliega la última hora de acceso en lugar de la última hora de modificación $ -t lista los archivos en función de la hora de la última modificación • Nota: las opciones pueden estar mezcladas: $ ls -altr ÿ Listado del contenido de un directorio Comandos útiles con archivos • Despliega la siguiente información: - more • despliega el contenido de un archivo parándose entre cada - El tipo de archivo: - normal d directorio c especial (periférico en modo carácter) $ more .cshrc - cat - Los permisos de acceso de los archivos: r lectura w escritura x ejecución - acceso no permitido pantalla • Ejemplo • copia uno o varios archivos hacia la salida estándar • Ejemplo $ cat archivo.txt - pwd print name of working directory - Número de enlaces • despliega el camino de acceso del directorio actual. - Propietario y grupo • Ejemplo: - Tamaño $ pwd - Fecha y hora de la última modificación /home/jossan/practicas/P1 - Nombre del archivo o directorio La entrada y salida estándar La entrada y salida estándar • Cuando se realiza una conexión a un sistema UNIX tres archivos son abiertos: • Algunos comandos no leen sus argumentos de la entrada estándar sino de uno o más archivos 1. Entrada estándar, (stdin): el teclado por donde se teclean los comandos 2. Salida estándar, (stdout): la pantalla donde son desplegados los resultados de los comandos • Ejemplo: $ cat arch1 arch2 lee los archivos "arch1" y "arch2", desplegando su contenido en la salida estándar. 3. Salida de errores, (stderr): la pantalla donde son desplegados los errores eventuales • Un número, (el descriptor de archivo), es asignado a cada archivo: • 0: entrada estándar stdout • 1: salida estándar cat stdin • 2: salida de errores stderr stdout stdin UNIX stderr arch1 arch2 6 Redirección de las E/S estándar Redirección de la entrada estándar El shell permite redireccionar las entradas/salidas estándar: < $mail profesor < tarea.txt redirección de la entrada estándar. La entrada estándar será el archivo " tarea.txt " > redirección de la salida estándar (creación) >> redirección de la salida estándar (añadir/agregar) La redirección de la salida de error depende del shell. bshell stderr cshell mail 2> redirección de la >& redirección de la salida estándar salida de error stdin y de error stdout 2>&1 redirección de la No existe opción para redirecccionar salida estándar y de error sólo la salida de error. /usr/spool/mail/profesor tarea.txt a la salida estándar Redirección de la salida estándar Redirección de la salida estándar $cat arch1 arch2 > final.txt $echo ERRORES DE COPIA >> log - Los archivos "arch1" y "arch2" serán copiados uno después del otro en el archivo "final.txt" - La salida estándar del comando echo será el archivo "log" - Si el archivo ya existe, se añadirá el resultado del comando echo al final de dicho archivo - La salida estándar de cat es "final.txt" stderr stderr cat mail stdin stdin stdout stdout final.txt log arch1 arch2 Restricciones de la redirección Ejecución de comandos secuenciales • Es posible teclear diferentes comandos sobre la misma línea, separandolos por punto y comas " ; " ¿Existe el archivo? SI • Los comandos son ejecutados secuencialmente, es decir que el segundo comando es ejecutado después de que el primero terminó su ejecución NO < lee el archivo error > error creación del archivo Wed Oct 12 10:44:16 MET 1986 >> añadirlo al final del archivo error rgomez console Oct 12 09:09 rgomez ttyp0 Oct 12 10:38 toto ttyp1 Oct 12 11:08 $ date; ls ; prueba who archivo ÿ 7 Pipelines Ejecución en background • La salida estándar de un comando puedo ser conectada a la entrada estándar de otro comando • Concepto de job en cshell: Cuando se teclea un comando se le asigna un número de job. • Evita la creación de archivos temporales • Para los comandos lentos en su ejecución resulta interesante poder disponer de la terminal, de tal forma que se pueda ejecutar otros comandos.. $ cat nombres | grep maquina | more • Poniendo un " & " después de la línea de comando, éste se ejecutará en background, de una forma sincrónica stdout stderr % netscape tareas.html -display walhalla: 0.0 & [1] 712 cat grep more 1 es el número de job 712 identificador del proceso • Para regresarlo a foreground se usa el comando fg seguido del número de job nombres stdin Agrupación de comandos • Si se agrupan varios comandos entre "( )" o "{ }", estos seran considerados como una sola unidad %fg %1 Comandos UNIX - cd • cambio de directorio • cd sin nombre lo posiciona en el directorio HOME • Esto es interesante para la redirección de entradas y salidas $ cd tareas Los siguientes comandos: $ echo El dia de hoy: > log - mkdir • creación de directorios $ date >> log $ echo las personas siguientes >> log $mkdir /usr/usr2/alumno1 - rmdir $ who >> log • eliminación de directorios $ echo se encuentran conectadas >> log • rmdir no borrará el directorio si este no se encuentra vacío $rmdir tareas pueden agruparse en uno solo: $ ( echo El dia de hoy; date; echo las personas \ siguientes; who; echo se encuentran conectadas ) > log Comandos UNIX - date Comandos UNIX - cp • Despliega la fecha y la hora • copia un archivo ordinario con otro nombre o a un directorio $ date $ cp arch1 arch2 Mon Oct 10 15:58:58 MET 1988 $ cp arch1 direc • La impresión del comando date puede ser reformateada - who $ cp arch1 direc/arch2 $ cp arch1 arch2 arch3 direc • Despliega los usuarios conectados $who • cp no modifica los archivos originales, tan solo los duplica -mv (move) guimen console Feb 10 09:48 rgomez ttyp0 Feb 10 11:18 $ mv arch-a arch-b jossan ttyp1 Feb 10 12:54 $ mv direc1 direc2 • Una variante es whoami que despliega información correspondiente a la persona conectada a la terminal donde se tecleo ese comando • desplaza un archivo o lo renombra $ mv arch1 arch2 arch3 arch4 direc $ mv arch1 ../bin/fx 8 Comandos UNIX Comandos UNIX - ln (link) - ln (link) • crea un nuevo nombre para un archivo, (útil para archivos sistemas, evitar copiar dos archivos con el mismo nombre => ahorrar espacio ) • En BSD 4.x es posible crear enlaces simbólicos entre archivos o directorios correspondientes a sistemas de archivos diferentes • solamente con la opción -s se puede cambiar el nombre a un directorio $ ls $ ls -li /* listado largo con i-node */ arch1 dir1 total 2 $ ln -s arch1 fichero 14411 -rw-r--r-- 1 rgomez 412 Oct 10 16:56 arch1 14412 -rw-r--r-- 1 rgomez 167 Oct 10 16:57 archivo $ ln -s dir1 fuentes $ ls -li $ ln arch1 fichero total 4 $ ls -li 14411 -rw-r--r-- total 3 14411 -rw-r--r-- 2 rgomez 1 rgomez 412 Oct 10 16:56 arch1 14412 lrwxrwxrwx 1 rgomez 412 Oct 10 16:56 arch1 14411 -rw-r--r-- 2 rgomez 412 Oct 10 16:56 fichero 14412 -rw-r--r-- 1 rgomez 167 Oct 10 16:57 archivo 4 Oct 10 17:09 fichier -> arch1 38935 drwxr-xr-x 2 rgomez 512 Oct 10 17:09 dir1 14413 lrwxrwxrwx 2 rgomez Comandos UNIX 4 Oct 10 17:10 fuentes -> dir1 Otros comandos - rm (remove) - ps • borra el nombre de un archivo • listado de los procesos que se están ejecutando • si ese nombre fuera el último (numero de enlaces = 1), el archivo será "físicamente" suprimido $ rm arch1 • Opciones: - lpr • crea un trabajo de impresión en el área de spooling para su posterior impresión - lpq -r recursivamente (si directorio contiene otro, borra contenido de este) • permite ver el estado de las colas de espera de impresión - lprm -f forzado (no despliega errores, ni hace preguntas) • permite suprimir archivos en espera de ser impresos -i interactivo (pregunta) - grep - echo • permite encontrar patrones en archivos • imprime sus argumentos sobre la salida estándar (la pantalla por default) $ echo prueba del comando echo prueba del comando echo - sort • permite ordenar las lineas de un archivo de texto ÿ Otros comandos - wc • cuenta líneas, palabras y caracteres Categorías de usuarios en UNIX En UNIX el acceso a los archivos y directorios se diferencia en función de tres categorías de usuarios: - tail • muestra las últimas líneas de un archivo - head • muestra las primeras líneas de un archivo 1. Propietario • El propietario del archivo • En principio se refiere al que creó el archivo - uname • despliega información acerca del sistema en el que se está trabajando - tty • identifica el terminal de usuario 2. Grupo En principio se refiere al grupo al cual pertenece el creador del archivo 3. Otros El resto del mundo 9 Autorización de acceso a archivos Cambio de la autorización de acceso + A través de ls -l podemos ver las autorizaciones de los archivos: • El comando chmod permite modificar las autorizaciones de acceso de los archivos y de los directorios ya creados r w x r w x r w x 0 0 0 0 0 0 0 0 0 ... ... ... 1 1 1 1 1 1 1 1 1 propietario grupo otros • Existen dos formas de especificar el nuevo modo: + en octal: chmod ooo archivo + en modo simbolico: chmod [ ugoa ] [+ = -] [ rwx ] u permisos del usuario g permisos del grupo + archivos r autorización de directorios lectura lectura w autorización de escritura escritura (creación, modificación o supresión) x autorización de ejecución acceso o permisos de los otros a todos los permisos Llamadas al sistema Llamadas al Sistema Sistema de ficheros: open, creat close read, write lseek unlink Gestión de procesos Comunicación entre procesos señales fork, exec, exit, wait signal, kill pipes, fifos IPC (Inter Process Communication) colas de mensajes semaforos segmentos de memoria compartida Creación de Procesos Creación de Procesos ejemplo: #include <sys/types.h> #include <unistd.h> main() { int pid; printf(“Before fork\n”); pid= fork() if (pid==0) printf(“child process\n”); else if (pid > 0) printf(“parent process\n”); else perror(“Fork returned error:\n”); pid_t fork(void ); fork() devuelve 0 al hijo y el ID del hijo al padre. } Fork crea una segunda instancia del mismo proceso. El código de programa así como las variables son las mismas en ambos procesos. before fork after fork PC pid = fork0 if (pid == 0) parent process PC pid = fork0 if (pid == 0) parent process pid = child's pid PC pid = fork0 if (pid == 0) pid = 0 10 Ejecución de programas Ejecución de programas Familia de llamadas al sistema “exec” La llamada exec carga un nuevo programa en el espacio de memoria del proceso que llama. El programa viejo es sustituido por el nuevo Secuencia de llamadas fork, exec, wait, exit program a program a wait program a continues afterr exit of program b fork copy of program a exec program b exit usage of wait and exit: Espera de finalización de procesos path: file: child = fork ( ) ; /*PID de un nuevo proceso */ if (child>0) { /* El código del padre*/ }else if (child == 0){ /* aquí va el código del hijo */ execl ( “/usr/bin/ls“, ”ls“, “-l”, NULL); perror ( “fallo en execl “); /* en caso de error en execl */ exit (1); }else{ /* en caso de error en fork */ perror(“fallo en fork()”); exit(2); } /* aquí continúa el padre */ wait() devuelve el ID de dicho hijo y de lo contrario devuelve –1. Como argumento, devuelve un puntero al status (causa) de su finalización. #include <unistd.h> int dup(int fd); /* devuelve el descriptor más pequeño disponible y lo asocia al mismo archivo que el descriptor fd */ int dup2(int fd0, int fd1); /* asocia al descriptor fd1 el mismo archivo que está asociado a fd0 */ debe ser un programa ejecutable puede ser un programa ejecutable o un shell script Ejemplo #include <sys/types.h> #include <sys/wait.h> pid_t wait (int*status); pid_t waitpid (pid_t which, int *status, int option); Redireccionamiento pid = wait(&status) exit(status) Int execl(const char *path, const char *arg0, ..., const char *argn, char * /* NULL */); Int execle(const char *path, char *const arg0[], ..., const char *argn, char * /* NULL */, char *const envp[]); Int execlp(const char *file, const char *arg0, ..., const char *argn, char * /* NULL */); Int execv(const char *path, char *const argv[]); Int execvp(const char *file, char *const argv[]); Int execve(const char *path, char *const argv[], char *const envp[]); Tuberías sin Nombre : pipe #include <unistd.h> int pipe(int fd[2]); fd[0] estará asociado al extremo de lectura fd[1] estará asociado al extremo de escritura 11 Tuberías sin Nombre: pipe ý ûüý øø ù ý ú ø ø ø ÿù ø ø ÿ øø ø øøø øø øø ø #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *path, mode_t mode); ø ý øøø øý ù øø ú øøø øøø øøø ø ø ü øø øøø øøø Tuberias con Nombre: FIFO ú ùøý øû ø ü øø øø ú ø ø ýø ø ú ø øø ø ú ú ø ø ú ø ü øý øû ø ü ø ø A B A B øø øø ýø øøø ûúù øøø ý øøø ø øø ø ø ú ùúø úø øø ø ø ûø ÿúøý ø ù ø ü ø ûø úøû ø ù øøý øû ø ü ø ýø ø øøø ûúù øøø ø øø ø ø ú ùúø ý ø øø ø ø ûø ÿúøý øû øÿù ø ü ø ø ü ü ø Envío de Señales Máscara y Conjunto de Señales #include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig) #include <signal.h> raise(SIGUSR1); Espera de Señales #include <signal.h> sigemptyset(sigset_t *set); sigfillset(sigset_t *set); sigaddset(sigset_t *set , int signo); sigdelset(sigset_t *set , int signo); sigismember(const sigset_t *set , int signo, int signo); Identificación de canales IPC #include <unistd.h> int pause(void); #include <sys/types.h> #include <sys/ipc.h> #include <unistd.h> int sigsuspend(const sigset_t *sigmask); key_t ftok(const char *path, int id); ÿ 12 Colas de mensajes Semáforos #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int msgget(key_t keym, int msgflg); void msgsnd(int msgid, struct msgbuf *ptr, int length, int flag); int msgrcv(int msgaid, struct msgbuf *ptr, int length, long msgtype, int flag); int msgctl(int msgid, int cmd, struct msgid_ds *buf); int semget(key_t key, int nsems, int semflg); int semop (int semid, struct sembuf *sops, int nsops); int semctl (int semid, int semnum, int cmd, ...); Memoria Compartida #include <sys/types.h> #include <sys/ipc.h> #include <sys/smh.h> int shmget(key_t keym int size, int shmflg); void *shmat(int shmid, void *shmaddr, int shmflg); int shmdt(void *shmaddr); int shmctl(int shmid, int cmd, struct shmid_ds *buf); Sistema Operativo UNIX 13