Sistemas Operativos - Escuela Politécnica Nacional

Anuncio
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
Descargar