Sistemas operativos modernos

El enfoque opuesto es hacer que el programador primero seleccione el programa grep (sin ar­ gumentos) y que éste se anuncie diciendo: “Hola, soy grep. Busco patrones en archivos. Por favor, teclee su patrón”. Después de recibir el patrón, grep solicita un nombre de archivo. Lue­ go pregunta si hay más nombres de archivos. Por último, presenta una sinopsis de lo que hará y pregunta si es correcto. Aunque este tipo de interfaz de usuario podría ser adecuada para no­ vatos, irrita sobremanera a los programadores experimentados. Lo que ellos quieren es un sir­ viente, no una niñera. 10.2.2 Interfaces con UNIX Un sistema UNIX puede verse como una especie de pirámide, lo cual se ilustra en la figura lO-l. En la base está el hardware, que consiste en la CPU, memoria, discos, terminales y otros dispositivos. El sistema operativo UNIX se ejecuta sobre el hardware desnudo. Su función es controlar el hardware y proporcionar a todos los programas una interfaz de llamadas al siste­ ma. Esas llamadas permiten a los programas de usuario crear y administrar procesos, archivos y otros recursos. Interfaz de usuario Interfaz de biblioteca Interfaz de llamadas al sistema Usuarios Programas utilitarios estándar (Shell, editores, compiladores, etc.) Biblioteca estándar {open, close, read, write, fork, etc.) Modo de usuario Sistema operativo UNIX (administración de procesos, administración de memoria, sistema de archivos, E/S, etc.) Modo de kernel Hardware (CPU, memoria, discos, terminales, etc.) Figura 10-1. Capas de un sistema UNIX. Los programas emiten llamadas al sistema colocando los argumentos en registros (o, a ve­ ces, en la pila) y emitiendo instrucciones de interrupción de sistema (trap) para cambiar del modo de usuario al modo de kernel e iniciar UNIX. Puesto que no hay manera de escribir una instrucción de interrupción de sistema en C, se proporciona una biblioteca, con un procedi­ miento para cada llamada al sistema. Estos procedimientos se escriben en lenguaje ensambla­ dor, pero pueden invocarse desde C. Cada uno primero coloca sus argumentos en el lugar apropiado y luego ejecuta la instrucción de interrupción de sistema. Así, para ejecutar la llama­ da al sistema read, un programa en C puede invocar el procedimiento de biblioteca read. Por cierto, es la interfaz de biblioteca, y no la interfaz de llamadas al sistema, la que especifica PO­ SIX. En otras palabras, POSIX indica los procedimientos de biblioteca que debe proporcionar

RkJQdWJsaXNoZXIy MjI4NDcx