Diferencia entre revisiones de «Llamadas al sistema»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(Definición de llamada al sistema: modificaciones)
(Ejemplo de llamada al sistema)
Línea 22: Línea 22:
 
* WIN32/64, empleada en los sistemas operativos de tipo-Windows. Además, existen emuladores como '''Wine''' que también las implementan.
 
* WIN32/64, empleada en los sistemas operativos de tipo-Windows. Además, existen emuladores como '''Wine''' que también las implementan.
  
== Ejemplo de llamada al sistema ==
+
== Implementación 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.
 
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.
Línea 45: Línea 45:
 
</source>
 
</source>
  
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 una rutina. En el caso de las llamadas al sistema, la rutina que se encarga del tratamiento de la interrupción por software número 80 es el ''dispatcher''.
+
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.
  
 
== El ''dispatcher'' ==
 
== El ''dispatcher'' ==

Revisión del 17:42 5 oct 2012

2.4. Llamadas al sistema

Definición de 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 requieren 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 sistemas 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.

Algunos ejemplos de llamadas al sistema son las siguientes:

  • time, que permite obtener la fecha y hora del sistema.
  • 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.

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.

Toda llamada al sistema se identifica de manera unívoca mediante un valor numérico que no ser modificado a lo largo de la vida del sistema operativo para evitar que se rompa la compatibilidad hacia atrás.

Familias de llamadas al sistemas operativo: POSIX y WIN32/64

Las dos familias de APIs estandarizas más importantes son:

  • POSIX.
  • WIN32/64, empleada en los sistemas operativos de tipo-Windows. Además, existen emuladores como Wine que también las implementan.

Implementación 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.

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, lenght    ;cargamos en edx el tamaño de la cadena a imprimir
    int 80h            ;se invoca al de

    mov eax, 1
    mov ebx, 0
    int 80h

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

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.

El dispatcher

El dispatcher, que forma parte 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.

En el caso de x86, el dispatcher consulta el registro eax e invoca a la llamada al sistema identificada con dicha numeración.

El punto de entrada

Es la posición de memoria desde la cual es posible solicitarle servicios al sistema operativo. Normalmente hay un único punto de entrada. En algunos SO se realiza mediante llamadas a subprogramas. La dirección de memoria del punto de entrada puede cambiar si se modifica el SO. En algunos SO éste problema lo solucionan usando una dirección fija, mientras en otros han preferido usar una referencia a dicha dirección