Está en la página 1de 24

Sistemas Operativos

Llamadas al Sistema

1
Llamada al Sistema

Una llamada al sistema es un método o función que


puede invocar un proceso para solicitar un cierto
servicio al sistema operativo. Dado que el acceso a
ciertos recursos del sistema requiere la ejecución de
código en modo privilegiado, el sistema operativo
ofrece un conjunto de métodos o funciones que el
programa puede emplear para acceder a dichos
recursos. En otras palabras, el sistema operativo actúa
como intermediario, ofreciendo una interfaz de
programación (API) que el programa puede usar en
cualquier momento para solicitar recursos gestionados
por el sistema operativo.
2
Algunos ejemplos de llamadas al sistema son las
siguientes:
● write, que se emplea para escribir un dato en un
cierto dispositivo de salida, tales como una pantalla
o un disco magnético.
● read, que es usada para leer de un dispositivo de
entrada, tales como un teclado o un disco
magnético.
● open, que es usada para obtener un descriptor de
un fichero del sistema, este fichero suele pasarse a
write.
● close, que se emplea para cerrar un descriptor de
fichero.

3
Llamada al Sistema

● Todo sistema operativo ofrece un conjunto de


llamadas al sistema.
○ En el caso de Linux 3.0, se ofrecen un total de
345 llamadas al sistema.
○ El sistema operativo xv6 ofrece también una lista
de llamadas al sistema mucho menor al ser un
sistema operativo muy sencillo.
● Toda llamada al sistema se identifica de manera
unívoca mediante un valor numérico que no debe
ser modificado a lo largo de la vida del sistema
operativo para evitar que se rompa la compatibilidad
hacia atrás.
4
Ejemplo de llamadas al sistema

● El siguiente ejemplo muestra el código en


ensamblador de x86 para invocar a la llamada al
sistema write que permite escribir un dato en
cualquier dispositivo. En concreto, se va a escribir
una cadena por el dispositivo de salida pantalla, que
se identifica mediante el descriptor de fichero
número 1.

5
Ejemplo de llamadas al sistema
section .text
global _start
_start:
mov eax, 4 ;cargamos el número de la llamada al sistema en el regitro eax
mov ebx, 1 ;cargamos el descriptor de fichero sobre el que queremos escribir
mov ecx, string ;cargamos en ecx la dirección de la cadena a imprimir
mov edx, length ;cargamos en edx el tamaño de la cadena a imprimir
int 80h ;se invoca a interrupción por software número 80
;que invoca al dispatcher de llamadas al sistema

mov eax, 1
mov ebx, 0
int 80h

section .data
string: db "Hola Mundo", 0x0A
lenght: equ 13

6
Ejemplo de llamadas al sistema

● La instrucción int forma parte del conjunto de


instrucciones de procesadores x86. Esta instrucción
emite una interrupción por software cuyo tratamiento
es realizado por la rutina dispatcher. Dicha rutina se
encarga del tratamiento de la interrupción por
software número 80.

7
El Dispatcher
● El dispatcher, que forma parte del núcleo del SO, se
ejecuta cuando se invoca una llamada al sistema.
Cuando un proceso hace una llamada al sistema, el
dispatcher, se encarga de invocar la llamada que el
proceso ha solicitado.
● Tiene un comportamiento sincronizado, cuando
recibe una llamada se la pasa al sistema operativo y
hasta que no recibe respuesta no atiende otra
llamada.
● En el caso de x86, el dispatcher consulta el registro
eax e invoca a la llamada al sistema identificada
con dicha numeración.

8
• Ejemplo en Windows, la función
CreateProcess() de Win32, para crear un
nuevo proceso, lo que realmente hace es invocar
una llamada al sistema
• NTCreateProcess() del Kernel de Windows,
que tiene asociado un número a una tabla indexada,
devuelve el estado de la ejecución de la llamada y
los posibles valores de retorno.

9
Pasos al realizar una llamada al sistema

Hay 11 pasos al realizar una llamada al sistema


read (fd, buffer, nbytes)
10
Windows y Linux: visión general de las
llamadas al sistema
● La medida en que los tipos de llamadas al sistema se
pueden implementar o realizar depende principalmente del
hardware y de la arquitectura del sistema utilizados, pero
también del sistema operativo.
● En Linux, por ejemplo, las llamadas al sistema se
almacenan directamente en el núcleo de Linux en la “Tabla
de llamadas al sistema”. Cada entrada de esta tabla tiene
asignados un número único y una función específica que
se ejecutará en el modo núcleo. Para ejecutar cualquier
llamada al sistema Linux, se carga el número en la
memoria de la CPU y después se carga mediante una
interrupción de software 128 (llamada a una subfunción del
sistema operativo que interrumpe la ejecución del
11
Windows y Linux: visión general de las
llamadas al sistema

● La funcionalidad es similar en los sistemas operativos


Windows, pero aquí una llamada al sistema siempre se
convierte primero internamente: una función de biblioteca
de la API de Windows (abreviatura WinAPI) se convierte
automáticamente en una llamada al sistema que el sistema
operativo puede leer, incluyendo un número único que
hace referencia a la función deseada en el modo núcleo.

12
Algunas llamadas para el manejo de procesos

● Una bifurcación o fork, cuando se aplica en el contexto


de un lenguaje de programación o un sistema operativo,
hace referencia a la creación de una copia de sí mismo
por parte de un programa, que entonces actúa como un
"proceso hijo" del proceso originario, ahora llamado
"padre". Los procesos resultantes son idénticos, salvo
que tienen distinto número de proceso (PID).
13
Algunas llamadas para el manejo de archivos

14
Algunas llamadas para el manejo de directorios

15
Algunas llamadas para otras tareas

16
Llamadas al sistema
• La forma de un shell:
while (TRUE) { /* repeat forever */
type_prompt( ); /* display prompt */
read_command (command, parameters) /* input from
terminal */

if (fork() != 0) { /* fork off child process */


/* Parent code */
waitpid( -1, &status, 0); /* wait for child to exit */
} else {
/* Child code */
execve (command, parameters, 0); /* execute command */
}
}

17
Llamadas al sistema

(a) Sistema de archivos antes de montar


(b) Sistema de archivos después de
montar

18
Llamadas al sistema

19
Llamadas al Sistema

En resumen

Se puede decir que una llamada al sistema es


necesaria siempre que un proceso que se ejecuta en
modo usuario intenta ejecutar una función que solo sea
ejecutable en modo núcleo.

20
Tipos de Llamadas al Sistema

Control de procesos: todos los procesos de un


sistema informático deben controlarse para que en
cualquier momento se puedan detener u otros procesos
los puedan dirigir. Para esto, las llamadas al sistema de
esta categoría supervisan, por ejemplo, el inicio o la
ejecución o la detención/terminación de procesos.
Gestión de archivos: los programas de aplicación
requieren este tipo de llamadas al sistema para acceder
a las operaciones típicas con archivos. Estos métodos
de manipulación de archivos incluyen la creación,
eliminación, apertura, cierre, escritura y lectura (create,
delete, open, close, write y read). 21
Tipos de Llamadas al Sistema

Gestión de dispositivos: la categoría “Gestión de


dispositivos” incluye todas las llamadas al sistema que
sirven para solicitar o administrar los recursos de
hardware necesarios, como la potencia de computación
o el espacio de almacenamiento.
Gestión de la información: los procesos tienen mucha
información asociada, y la puntualidad y la integridad
son muy importantes. Para intercambiar o solicitar
información, los programas de aplicación utilizan
llamadas al sistema para la gestión o el mantenimiento
de la información.
22
Tipos de Llamadas al Sistema

Comunicación entre procesos: solo se puede


garantizar una interacción fluida entre el sistema
operativo y los distintos programas de aplicación si los
procesos individuales están coordinados. Con este fin,
es indispensable la comunicación a través de las
correspondientes llamadas al sistema.

23
Interrupciones

24

También podría gustarte