Publicado el 14 de Enero del 2017
622 visualizaciones desde el 14 de Enero del 2017
59,3 KB
28 paginas
Creado hace 26a (05/02/1999)
INTRODUCCIÓN A LAS
LLAMADAS AL SISTEMA
OPERATIVO UNIX
Introducción a las llamadas al Sistema Operativo UNIX
Introducción de llamadas al sistema operativo UNIX
ÍNDICE
1.- Introducción
2.- Conceptos generales
Ficheros
Programas y procesos
Identificadores de procesos y grupos
Permisos
3.- Formato general de las llamadas al sistema
4.- Llamadas de acceso a ficheros
4.1.- Abrir un fichero (open)
4.2.- Lectura de un fichero (read)
4.3.- Escritura de un fichero (write)
4.4.- Cerrar un fichero (close)
4.5.- Posicionamiento de un fichero (lseek)
4.6.- Destruyendo entradas en los directorios (unlink)
5.- Llamadas de control de procesos
5.1.- Conceptos generales
5.2.- Ejecución de comandos (exec)
Argumentos de un programa
5.3.- Crear un proceso (fork)
5.3.1.- Programa de ejemplo de utilización de fork
5.4.- Espera de la terminación de un proceso (wait)
5.5.- Terminación de un proceso (exit)
6.- Interrupciones software: señales
6.1.- Conceptos generales
6.2.- Algunas señales
6.3.- Capturar señales (subrutina signal)
7.- Comunicación entre procesos
7.1.- Conceptos generales
7.1.1.- Redirección (subrutinas dup y dup2)
7.1.1.1.- Ejemplo de programa donde se utilice la llamada dup2
7.2.- Pipes
7.2.1.- Ejemplo de utilización de la llamada pipe
7.3.- Named pipes (FIFOs)
7.4.- System V IPCs
8.- Otras llamadas
8.1.- Obtener la hora del sistema
8.2.- Tratamiento de errores
8.3.- Otras
Bibliografía
23
Introducción a las llamadas al Sistema Operativo UNIX
1.- Introducción
En este documento se van a analizar algunas llamadas al Sistema Operativo
UNIX.
En un primer apartado, se hará un repaso de los conceptos generales de UNIX,
nombrando los tipos de ficheros que existen, definiendo programas y procesos,
los identificadores y los permisos asociados. Estos son conceptos que ya se vieron
en las prácticas de Introducción básica al Sistema Operativo UNIX a nivel de
usuario.
En apartados posteriores, se tratará el formato de las llamadas al sistema y toda
la documentación relacionada con estas llamadas. Se clasificarán en Llamadas de
acceso a ficheros, Llamadas de control de procesos, Interrupciones software:
señales, y Comunicaciones entre procesos.
24
Introducción a las llamadas al Sistema Operativo UNIX
2.- Conceptos generales
Un sistema operativo es el programa o conjunto de programas que permiten
gestionar los recursos del hardware de un sistema informático como son la
memoria, dispositivos de almacenamiento de datos, terminales, etc. Los
diferentes programas que se desarrollan en una máquina se basan en las
peticiones de servicios a dicho sistema operativo.
UNIX como sistema operativo ofrece servicios para manejar la memoria, la
planificación de los procesos, la comunicación entre los mismos, y operaciones
de entrada y salida. Los procesos o programas pueden solicitar dichos servicios
directamente al KERNEL (llamadas al sistema), o indirectamente a través de
rutinas de librería. La comodidad de utilizar el lenguaje C viene del hecho de
que se puede utilizar cualquier llamada al sistema a través de las bibliotecas de
funciones de que se dispone.
Ficheros
Los ficheros en UNIX se organizan en lo que se conoce como file systems
(sistemas de ficheros), que son agrupaciones de ficheros bien por razones físicas o
lógicas. Hay tres tipos de ficheros en UNIX:
• fichero ordinario: conjunto de bytes en un ordenamiento secuencial.
Cualquier byte de dicho ordenamiento puede ser leído y escrito. Tan solo se
puede modificar el fichero añadiendo o eliminando bytes del final del mismo.
Un fichero ordinario se identifica por un número denominado i-number. Un i-
number es un índice a una tabla de i-nodos que se mantiene al comienzo de cada
sistema de ficheros. Cada i-nodo contiene información del tipo: tipo de fichero,
propietario, grupo, permisos, etc.
• directorio: permite utilizar nombres lógicos para referirnos a todos los
ficheros. Consiste en una tabla de dos campos: el primer campo contiene el
nombre de un fichero, y el segundo campo su correspondiente i-number. Cada
registro de dicha tabla (nombre, i-number) se conoce como enlace (link). Cuando
se solicita al sistema operativo el acceso a un fichero referenciándolo por su
nombre, éste busca en un directorio para encontrar el i-number. Entonces accede
al inodo asociado, donde se encuentra la información asociada al fichero y las
direcciones de dónde se encuentra en el disco.
• fichero especial: puede ser de dos clases, FIFO y dispositivo.
FIFO (first-in-first-out queue) es un mecanismo de intercambio de datos
entre procesos.
25
Introducción a las llamadas al Sistema Operativo UNIX
Dispositivo (device) es cualquier dispositivo hardware.
Los ficheros especiales también tienen un i-nodo asociado, pero dicho i-nodo
no apunta a ningún bloque en disco donde se contienen datos sino que se hace
referencia a una tabla que usa el kernel donde se encuentran unas rutinas
llamadas driver. El driver sirve para la comunicación con los terminales. Si se
trata de un proceso de entrada de datos desde un dispositivo externo, los datos
son pasados a un interface y es el driver el que realiza un procesamiento de éstos
y entrega los datos al programa. Si por el contrario, desde el proceso se envían
los datos, el driver procesa los datos de salida y los envía al interface.
Programas y procesos
Se entiende por programa al conjunto de instrucciones y datos que se
encuentran en un fichero normal en el disco. El i-nodo asociado está marcado
como ejecutable.
Un programa en ejecución se conoce como proceso. UNIX distingue dentro de
un proceso tres regiones básicas: texto, datos y pila. Texto es el conjunto de bytes
que se interpretan como instrucciones por la CPU. Los datos son tratados por el
procedimiento definido en el programa y pila es la zona dinámica de la
memoria de un proceso que permite la implementación de rutinas y paso de
parámetros. Varios procesos pueden compartir algunas de estas regiones.
Un proceso se puede encontrar en diferentes estados, como listo para
ejecutarse (ready to run), ejecutándose (running), o durmiendo (sleeping).
El system data segment (segmento de datos del sistema) de un proceso consiste
en una serie de información que mantiene el kernel para controlar la ejecución
de los procesos. Esta información (process id, parent process id, process group id,
current directory, etc) se encuentra repartida en diferentes tablas del sistema.
Identificadores de procesos y grupos
Todos los procesos en UNIX tienen un número positivo que los identifica, el
process-ID (pid). Todos los procesos excepto algunos del sistema tienen un
proceso padre. El identificador del proceso padre se conoce con el nombre de
parent process-ID (ppid).
Si el padre de un proceso muere (termina), éste es adoptado por el proceso init
(pid=1).
26
Introducción a las llamadas al Sistema Operativo UNIX
Permisos
Cada usuario del sistema tiene asociado un número positivo llamado user ID.
Los usuarios pueden estar organizados en grupos, cada grupo tiene una
identificación conocida con el nombre de group ID.
Cuando un usuario entra en el sistema se leen los ficheros en donde se
configuran los usuarios y los grupos y se asocian al usuario las identificaciones
de usuario y grupo.
Cada fichero en su i-nodo contiene información del user ID y del group ID del
propietario. Así mismo, contiene los conjuntos de permisos que ya se indicaron
en la Introducción básica al Sistema Operativo UNIX a nivel de usuario. Estos
conjuntos de permisos son: usuario, grupo y otros, y dentro de cada uno de ellos,
permisos de lectura, escritura y ejecución.
27
Introducción a las llamadas al Sistema Operativo UNIX
3.- Formato general de las llamadas al sistema
Las llamadas al sistema se pueden usar por medio de funciones en C y todas
ellas tienen un formato común, tanto en su documentación como en la
secuencia de llamada.
Una llamada al sistema se invoca mediante una función retornando ésta
siempre un valor con información acerca del servicio que proporciona o del
error que se ha producido en su ejecución. Aunque dicho retorno puede ser
ignorado, es recomendable siempre testearlo.
Retornan un valor de -1 como indicación de que se ha producido un error en
su ejecución. Además existe una variable externa errno, donde se indica un
código de información sobre el tipo de error que se ha producido. En el archivo
de include errno.h hay declaraciones referentes a esta variable.
La variable errno no cambia de valor después de una llamada al sistema que
retorna con éxito, por tanto es importante tomar dicho valor justo después de la
llamada al sistema y únicamente cuando éstas retornan error.
El formato general de documentación de una llamada al sistema es:
CREAT(2)
SYNOPSIS
Crear un fichero nuevo.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int creat(const char *pathname, mode_t mode);
Creat crea un fichero regular nuevo, o prepara para
volver a escribir uno ya existente.
DESCRIPTION
.......
ERRORS
ficheros.
[ENOSPC] no hay suficiente espacio en el sistema de
[EACCES] no se tiene permiso de acceso.
......
RETURN VALUE
Si no hay error retorna el file descriptor, si hay
algún error retorna un -1 y se guarda en la variable errno la
causa del error.
SEE ALSO
chmod(2), close(2),...
28
Introducción a las llamadas al Sistema Operativ
Comentarios de: INTRODUCCIÓN A LAS LLAMADAS AL SISTEMA OPERATIVO UNIX (0)
No hay comentarios