INTRODUCCION Dado que el hardware es compartido por
múltiples procesos, el acceso a los recursos Podemos definir las llamadas al sistema o debe ser administrado para garantizar su syscalls como una interfaz entre el área de correcto uso y evitar problemas de usuario y la de kernel, si un proceso seguridad (si procesos malintencionados necesita realizar una tarea que implique desean acceder a recursos asignados a otros procesos). Por estas razones, en los acceder a la área de kernel, posiblemente sistemas duales, el acceso al ambiente físico por que no tenga privilegios para hacerlo el es manejado exclusivamente por el Sistema directamente, debe hacerlo a través de una Operativo. La única forma de acceder al llamada al sistema. Ejemplos típicos seria hardware es a través de las llamadas al acceder a un dispositivo de i/o, crear un sistema, que están perfectamente definidas. proceso hijo, esperar a que se cumpla una Esto no ocurre en los Sistemas Operativos no duales, como el MS-DOS, donde condición, etc. cualquier proceso podía acceder a todos los El listado completo de llamadas al sistema niveles del hardware. que existen lo encontramos en el fichero Los procesadores actuales pueden ejecutar /usr/include/sys/syscall.h. las instrucciones en diferentes estados. En los sistemas duales, normalmente son La información acerca de qué llamadas a llamados modo supervisor y modo usuario. sistema se están ejecutando nos puede dar Los procesadores proveen diferentes pistas de la actividad de los distintos niveles de privilegio de forma tal que los procesos en nuestro equipo. Lógicamente sistemas operativos pueden restringir las procesar una llamada tiene un coste a nivel operaciones que ejecutan los programas de recursos, sin embargo dependiendo de la tanto por razones de seguridad como de tarea que deba realizar su coste es distinto. estabilidad. Estas operaciones incluyen el acceso a periféricos, habilitar o deshabilitar Un porcentaje elevado de tiempo de sistema interrupciones, cambiar el estado del procesador, y acceder a la memoria, entre puede significar que nuestros procesos otras. están requiriendo llamadas a sistema muy costosas. 2. MECANISMO 1. FUNDAMENTOS Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que Los programas son un conjunto de causa que el procesador transfiera el control instrucciones organizadas con un objetivo. a un código privilegiado, previamente Un proceso es conceptualmente un especificado por el mismo código. Esto programa en ejecución. En los sistemas permite al código privilegiado especificar operativos multitarea como OpenSolaris, donde va a ser conectado así como el estado puede haber varios procesos ejecutándose del procesador. concurrentemente. Cada proceso puede requerir el uso de recursos de hardware, Cuando una llamada al sistema es invocada, como periféricos, o espacio de memoria la ejecución del programa que invoca es principal, u otros recursos. interrumpida y sus datos son guardados, normalmente en su PCB(Printed Circuit Board), para poder continuar ejecutándose normalmente es 256 (NSYSCALL). Este luego. El procesador entonces comienza a número teóricamente puede ampliarse. Se ejecutar las instrucciones de código de alto cree que el límite más difícil de ampliar es nivel de privilegio, para realizar la tarea el tamaño de sysset_t, cuyos 16 enteros requerida. Cuando esta finaliza, se retorna al proceso original, y continúa su ejecución. deben ser capaces de representar una El retorno al proceso demandante no bitmask completa de todas las llamadas al obligatoriamente es inmediato, depende del sistema. Esto pone nuestro límite real en tiempo de ejecución de la llamada al 16*32 o 512 llamadas al sistema, pero para sistema y del algoritmo de planificación de los propósitos de este ejemplo, eligiremos CPU. un número de llamada al sistema igual a 56 el cual normalmente no es usado. 3. LAS LIBRERIAS COMO UN Llamaremos a nuestra syscall “schrock”. INTERMEDIARIO Entonces agregamos la siguiente línea a OpenSolaris provee librerías que relacionan syscall.h: los programas de usuario y el resto del #define SYS_uadmin 55 sistema operativo. Estas librerías manejan #define SYS_schrock 56 los detalles de bajo nivel para transferir #define SYS_utssys 57 información al kernel y conmutar a modo supervisor, así como cualquier See usr/src/uts/common/sys/syscall.h procesamiento de datos o tareas que deba ser realizada en modo supervisor. 4.3. Escribiendo el Syscall Handler Idealmente, esto reduce la dependencia Ahora tenemos que agregar la función que entre el sistema operativo y la aplicación, e incrementa su portabilidad. será llamada cuando invoquemos a la llamada al sistema. Lo que realmente 4. AGREGANDO UNA LLAMADA deberíamos hacer es agregar un nuevo AL SISTEMA EN OPENSOLARIS archivo schrock.c a usr/src/uts/common/syscall.c, sin embargo Veremos un ejemplo de cómo agregar una solo usaremos el código de getpid.c. llamada al sistema en OpenSolaris. #include <sys/cmn_err.h> 4.1. Estableciendo los Parámetros del int schrock(void *arg) Kernel { char buf[1024]; Asumiremos que se trata de una simple size_t len; llamada al sistema que reside en el código if (copyinstr(arg, buf, sizeof genérico del kernel, y que pondremos el (buf), &len) != 0) return (set_errno(EFAULT)); código en un archivo ya existente. El objetivo es imprimir un mensaje arbitrario cmn_err(CE_WARN, "%s", buf); cuando se realice la llamada al sistema. return (0); } 4.2. Escogiendo el Número de Syscall
Antes de escribir algún código, primero
tenemos que elegir un número que identifique a nuestra llamada al sistema. La fuente principal de documentación aquí es syscall.h, el cual especifica todos los números de llamadas al sistema disponibles y además aquellos que están reservados. El número máximo de llamadas al sistema CONCLUSIONES
Vimos los conceptos básicos de lo
que son las llamadas al sistema. En OpenSolaris sólo podemos acceder al hardware a través de las llamadas al sistema. Vimos como es el mecanismo para la ejecución de las llamadas al sistema. Vimos la importancia de las librerías, las cuales relacionan los programas de usuario con el resto del sistema operativo. Por ultimo vimos un ejemplo básico de como es que se agrega una llamada al sistema en OpenSolaris.
REFERENCIAS BIBLIOGRAFICAS
OpenSolaris 2008.5. Iván Nieto
Castillero. Introducción a OpenSolaris. Ricardo Laziano M. http://sun.com/solaris http://opensolaris.org