+ All Categories
Home > Documents > Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un...

Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un...

Date post: 04-Jul-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
16
Llamadas al sistema Dr. Alonso Ramírez Manzanares 27-Ago-2009
Transcript
Page 1: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Llamadas al sistemaDr. Alonso Ramírez Manzanares

27-Ago-2009

Page 2: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

El ShellEl shell no forma parte del SO pero es muy importante.

Utiliza intensivamente las llamadas al SO.

Es la interfaz primaria entre el SO y el usuario.

Tenemos el prompt $, ejemplos

$ date

$ date > file1

$ sort <archivo1 > archivo2

$ cat archivo1 arch2 arch3 | sort > /dev/lp (y si agregamos & al final)

Page 3: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Llamadas al Sistema

Se proporciona una biblioteca para hacer las llamadas desde C. Esto es la interfaz entre el SO y sus programas de aplicación.

Ejemplo: READ

cuenta = read(file,buffer,nbytes)

Si hay un error cuenta es -1 y el identificador de error se guarda en la global errno.

Page 4: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Ejemplos de llamadas al sistema (53 en MINIX)

Page 5: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Ejemplos de llamadas al sistema

Page 6: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Ejemplos de llamadas al sistema

Page 7: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Llamadas al sistema para admin. de procesos.

Fork, crea un proceso, proceso padre crea un proceso hijo.

Se genera una copia de todo, por lo que le p. hijo tiene su propio espacio de

trabajo.

Devuleve in pid que es el identifacor de proceso.

Caso del shell, cuando teclean un comando el shell usa fork() y espera con

WAITPID (se puede especificar cual hijo esperar usando el parámetro o bien

-1 para esperar a cualquier hijo).

Page 8: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Ejemplo de un shell mínimo

Un ejemplo en el comando $cp arch1 arch2que usa en su interior main(argc, argv,envp)

Page 9: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Funcionamiento de waitpid

Si un proceso padre ejecuta

n = waitpid(-1,&status,options);

se suspenderá hasta que el hijo termine.

En la llamada EXIT (llamada al sistema) se asigna el estado de salida como argumento (0 a 255).

Si el proceso hijo sale con codigo 4, entonces n es el pid del hijo y status vale 0x0400 (estado de terminación mas estado de salida).

Page 10: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

División de la memoria de procesos

Segmento de texto o código de programa (tamaño fijo)

Segmento de datos o variables (crece hacia arriba llamando a int brk(char *addr) , puede agrandarse o encogerse).

Segmento de pila (crece hacia abajo automaticamente al ser requerido)

Page 11: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

GETPI

Recuerden que con fork el id solo era devuelto al padre, pero el hijo si quiere conocer su propio ID puede usar

pid_t = getpid(void);

También tenemos pids de grupo getpgrp.

y ptrace para poder debbugear.

Page 12: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Llamadas al sistema para señalización

Aunque casi en todos los casos la comunicación entre procesos es planeada, existen casos donde se requiere comunicación inesperada,

ejem. interrumpir un proceso por el usuario,

o por un error de hardware,

o por expiración de tiempo

Page 13: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Recibiendo señalesSi el proceso no esta preparado para recibir señales y le llega una, este se termina¡

Para indicar que se está peparado para recibir se usa SIGACTION, donde se indica la funcion que va a manejar la señal (ver la ayuda man SIG_DFL y SIG_IGN).

Cuando una señal llega el proceso se mete en su propia pila e invoca el manejador de señales, el cual puede usar el tiempo que quiera y hacer llamadas al sistema, pero normalmente es un proceso corto. Cuando el manejador termina llama a SIGRETURN para que el

Page 14: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Las señales se pueden bloquear ...

con SIGPROGMASK y se mantiene pendiente hasta que se desbloquea, pero no se pierde.

Para ver las señales pendientes se puede usar SIGPENDING.

SIGSUSPEND puede indicar que señales estan suspendidas y suspenderse a si mismo, esperando por una señal, por ejemplo.

Page 15: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Que sucede con el comando comando &

La señal DEL del teclado no debe de afectar el proceso que está en segundo plano, asi que después de FORK y antes de EXEC se hace:

sigaction(SIGINT,SIG_ING,NULL);

sigaction(SIGQUIT,SIG_ING,NULL);

Para inhabilitar las señales DEL y QUIT.

Page 16: Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un proceso, proceso padre crea un proceso hijo. Se genera una copia de todo, por lo que

Como usar el make, por neto:

Los proyectos los RAD, por ejemplo C++ Builder

Decir que es lo análogo en sistemas linux

Mostrar cual es la sintaxis de un MakeFile

Tips importantes para hacer un MakeFile

Como se ejecuta (que es make)

Decir que hay otras opciones como make clean


Recommended