Diferencia entre revisiones de «Llamadas al sistema»
(→2.4.2 El punto de entrada) |
(→2.4. Llamadas al sistema) |
||
Línea 17: | Línea 17: | ||
La direccion de memoria del punto de entrada puede cambiar si se modifica el sistema operativo (lo que invalida a todos los programas ejecutables existentes antes del cambio, que no podran solicitar servicios al no conocer la posicion del punto de entrada). | La direccion de memoria del punto de entrada puede cambiar si se modifica el sistema operativo (lo que invalida a todos los programas ejecutables existentes antes del cambio, que no podran solicitar servicios al no conocer la posicion del punto de entrada). | ||
Algunos sistemas operativos evitan este problema utilizando una direccion fija, mientras que otros lo hacen manteniendo una referencia a dicha direccion. | Algunos sistemas operativos evitan este problema utilizando una direccion fija, mientras que otros lo hacen manteniendo una referencia a dicha direccion. | ||
+ | |||
+ | == Ejemplo de llamada al sistema en lenguaje ensamblador == | ||
+ | |||
+ | <source lang="asm"> | ||
+ | |||
+ | section .text | ||
+ | global _start | ||
+ | _start: | ||
+ | mov eax, 4 ;cargamos un 4 en el registro eax para llamar a print | ||
+ | mov ebx, 1 ;cargamos un 1 para la salida estandar | ||
+ | mov ecx, string ;Se guarda el mensaje | ||
+ | mov edx, lenght ;El tamaño del mensaje | ||
+ | int 80h ;La llamada al sistema | ||
+ | |||
+ | mov eax, 1 | ||
+ | mov ebx, 0 | ||
+ | int 80h | ||
+ | |||
+ | section .data | ||
+ | string: db "Hola Mundo", 0x0A | ||
+ | lenght: equ 13 | ||
+ | |||
+ | |||
+ | </source> |
Revisión del 12:19 15 oct 2011
Contenido
2.4. Llamadas al sistema
Una llamada al sistema es una petición que hace un proceso al sistema operativo para obtener cualquier tipo de servicio. La interfaz que el sistema operativo presenta a los programas se denomina API, donde constan todas las llamadas al sistema de las que dispone. 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).
Los programas se hacen independientes de la maquina, aunque dependientes del API. Por ello, existen APIs estandarizadas, como POSIX.
2.4.1. Compatibilidad hacia atrás y hacia delante
En un sistema operativo bien diseñado, la interfaz de las llamadas al sistema ha de ser estable a lo largo del tiempo, de forma que la modificación de su funcionamiento interno no repercuta en el funcionamiento externo de éstas y así asegurar la compatibilidad hacia atrás (Backward compatibility). Además, aquellas llamadas que queden obsoletas o en desuso han de ser conservadas para, de la misma manera, asegurar el funcionamiento de programas antiguos (Legacy Support).
En ocasiones los sistemas operativos pueden incluir en su diseño criterios de compatibilidad hacia adelante (Fordward compatibility). Un ejemplo de este tipo de sistemas son aquellos capaces de mostrar información detallada al usuario de aquello que no pueden comprender o los sistemas ignorantes, que son aquellos que sólo ejecutan lo que pueden comprender y obvian el resto.
2.4.2 El punto de entrada
Llamamos punto de entrada a la posicion de memoria desde la cual es posible solicitarle servicios al sistema operativo, normalmente hay un unico punto de entrada. En algunos sistemas operativos el acceso al punto de entrada se realiza mediante llamadas a subprogramas. La direccion de memoria del punto de entrada puede cambiar si se modifica el sistema operativo (lo que invalida a todos los programas ejecutables existentes antes del cambio, que no podran solicitar servicios al no conocer la posicion del punto de entrada). Algunos sistemas operativos evitan este problema utilizando una direccion fija, mientras que otros lo hacen manteniendo una referencia a dicha direccion.
Ejemplo de llamada al sistema en lenguaje ensamblador
section .text
global _start
_start:
mov eax, 4 ;cargamos un 4 en el registro eax para llamar a print
mov ebx, 1 ;cargamos un 1 para la salida estandar
mov ecx, string ;Se guarda el mensaje
mov edx, lenght ;El tamaño del mensaje
int 80h ;La llamada al sistema
mov eax, 1
mov ebx, 0
int 80h
section .data
string: db "Hola Mundo", 0x0A
lenght: equ 13