Diferencia entre revisiones de «Llamadas al sistema»
(→El dispatcher: reestructurar la frase para que sea más sencilla de entender.) |
(→2.4. Llamadas al sistema: faltaba contenido que tenia yo en los apuntes :s no se a donde habrá ido a parar.) |
||
Línea 10: | Línea 10: | ||
* '''write''', que se emplea para escribir un dato en un cierto dispositivo de salida, tales como una pantalla o un disco magnético. | * '''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. | * '''read''', que es usada para leer de un dispositivo de entrada, tales como un teclado o un disco magnético. | ||
+ | |||
+ | === Api === | ||
Cada sistema operativo implementa su propia API, por eso normalmente un programa diseñado para un cierto sistema operativo no funciona en otro sistema operativo diferente. No obstante, existen APIs estandarizadas, como [http://es.wikipedia.org/wiki/POSIX POSIX], que tienden a ser implementadas por los fabricantes de sistemas operativos. | Cada sistema operativo implementa su propia API, por eso normalmente un programa diseñado para un cierto sistema operativo no funciona en otro sistema operativo diferente. No obstante, existen APIs estandarizadas, como [http://es.wikipedia.org/wiki/POSIX POSIX], que tienden a ser implementadas por los fabricantes de sistemas operativos. | ||
+ | |||
+ | === Compatibilidad de Apis === | ||
+ | |||
+ | La interfaz de la llamada al sistema ha de ser estable a lo largo del tiempo. Además las llamadas en desuso u obsoletas deben permanecer para asegurar el funcionamiento de programas antiguos. | ||
== Ejemplo de llamada al sistema == | == Ejemplo de llamada al sistema == | ||
Línea 44: | Línea 50: | ||
En el caso de x86, el dispatcher consulta el registro eax e invoca a la llamada al sistema identificada con dicha numeración. | 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 |
Revisión del 14:04 28 ene 2012
Contenido
2.4. Llamadas al sistema
Definición
Una llamada al sistema es el mecanismo que puede emplear un proceso para solicitar un cierto servicio al sistema operativo. Todo sistema operativo ofrece un conjunto de llamadas al sistema que viene determinado por una cierta API. En el caso de Linux, su version 3.0, ofrece un total de 345 llamadas al sistema. Toda llamada al sistema se identifica de manera unívoca mediante un valor numérico que debe permanecer el mismo a lo largo de la vida del sistema operativo para evitar que se rompa la compatibilidad hacia atrás.
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.
Api
Cada sistema operativo implementa su propia API, por eso normalmente un programa diseñado para un cierto sistema operativo no funciona en otro sistema operativo diferente. No obstante, existen APIs estandarizadas, como POSIX, que tienden a ser implementadas por los fabricantes de sistemas operativos.
Compatibilidad de Apis
La interfaz de la llamada al sistema ha de ser estable a lo largo del tiempo. Además las llamadas en desuso u obsoletas deben permanecer para asegurar el funcionamiento de programas antiguos.
Ejemplo de llamada 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 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.
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