Está en la página 1de 10

Sistemas Operativos

Llamadas al sistema linux (linux system calls)


Una llamada al sistema est implementada en el ncleo de Linux.
Cuando un programa llama a una funcin del sistema, los
argumentos son empaquetados y manejados por el ncleo, el cual
toma el control de la ejecucin hasta que la llamada se completa.
Una llamada al sistema no es una llamada a una funcin ordinaria, y
se requiere un procedimiento especial para transferir el control al
ncleo. Sin embargo la librera GNU C encapsula las llamadas al
sistema con funciones de manera que pueden ser llamadas de
manera sencilla y se confunden con llamadas a funciones ordinarias.
Las funciones de entrada/salida como open y read son ejemplos de
llamadas al sistema en Linux.
GNU/Linux es un Sistema Operativo multitarea en el que van a
convivir un gran nmero de procesos. Es posible, bien por un fallo
de programacin o bien por un intento malicioso, que alguno de
esos procesos haga cosas que atenten contra la estabilidad de todo
el sistema. Por ello, con vistas a proteger esa estabilidad, el ncleo o
kernel del sistema funciona en un entorno totalmente diferente al
resto de programas. Se definen entonces dos modos de ejecucin
totalmente separados: el modo kernel y el modo usuario. Cada uno
de estos modos de ejecucin dispone de memoria y procedimientos
diferentes, por lo que un programa de usuario no podr ser capaz
de daar al ncleo.
Sistemas Operativos

Las syscalls o llamadas al sistema son el mecanismo por el cual los
procesos y aplicaciones de usuario acceden a los servicios del
ncleo. Son la interfaz que proporciona el ncleo para realizar desde
el modo usuario las cosas que son propias del modo kernel (como
acceder a disco o utilizar una tarjeta de sonido). La siguiente figura
explica de forma grfica cmo funciona la syscall read().
Mecanismo de peticin de servicios al
kernel


READ()

User Mode
Kernel Mode

FILE SYSTEM
I/O


SYSTEM CALL INTERFACE
HARDWARE
USER
PROCESS
Sistemas Operativos

El modo usuario necesita acceder al disco para leer, para ello utiliza
la syscall read() utilizando la interfaz de llamadas al sistema. El
ncleo atiende la peticin accediendo al hardware y devolviendo el
resultado al proceso que inici la peticin. Este procedimiento me
recuerda al comedor de un restaurante, en l todos los clientes
piden al camarero lo que desean, pero nunca entran en la cocina. El
camarero, despus de pasar por la cocina, traer el plato que cada
cliente haya pedido. Ningn comensal podra estropear la cocina,
puesto que no tiene acceso a ella. Prcticamente todas las funciones
que utilicemos desde el espacio de ejecucin de usuario necesitarn
solicitar una peticin al kernel mediante una syscall, esto es, la
ejecucin de las aplicaciones de usuario se canaliza a travs del
sistema de peticiones al sistema. Este hecho es importante a la hora
de fijar controles y registros en el sistema, ya que si utilizamos
nuestras propias versiones de las syscalls para ello, estaremos
abarcando todas las aplicaciones y procesos del espacio de
ejecucin de usuario. Imaginemos un camarero malicioso que
capturase todas las peticiones de todos los clientes y envenenase
todos los platos antes de servirlos... nuestro restaurante debera
cuidarse muy bien de qu personal contrata y nosotros deberemos
ser cautelosos tambin a la hora de cargar drivers o mdulos en
nuestro ncleo.
Para hacer uso de las llamadas al sistema desde el lenguaje de
programacin C, los sistemas operativos que trabajan con el ncleo
Sistemas Operativos

Linux ponen a disposicin del usuario varias funciones o
procedimientos de librera que representan a las llamadas del
sistema. Los prototipos relativos a estas funciones o procedimientos
pueden encontrarse listados en el archivo de cabecera unistd.h (este
se encuentra en el directorio /usr/include/asm/, aqu tambin
pueden encontrarse los archivos unistd_32.h y unistd_64.h, archivos
relativos a las arquitecturas de 32 y 64 bits respectivamente). El
sistema operativo de ncleo Linux cuenta con aproximadamente 200
funciones relacionadas con cada llamada al sistema, algunos de los
cuales pueden agruparse en ciertas categoras que permiten el
manejo o control de: procesos, seales, archivos, tiempo, etc. Los
conceptos explicados anteriormente pueden resumirse con el
siguiente esquema.

Sistemas Operativos


A la hora de programar en C hay 3 tipos de funciones a las que
podemos recurrir. Las funciones ordinarias internas a tu programa
(desarrollo propio al programa), las funciones de librera que son
funciones ordinarias que residen en una librera externa a tu
programa (desarrollo propio o ajeno al programa). Como por
ejemplo las funciones de la librera estndar C (libc). Una llamada a
estas funciones es igual a cualquier llamada a una funcin. Los
argumentos son situados en los registros del procesador o en la
pila. La ejecucin es transferida al comienzo del cdigo de la
funcin, que tpicamente est cargada en una librera compartida. Y,
por ltimo, las llamadas al sistema (system call).
Llamadas al sistema para el control de procesos
Sistemas Operativos

Este tipo de llamadas al sistema permiten realizar "actividades"
relacionadas con los programas que estn en espera para ejecucin
o que se estn ejecutando, es decir, cuando son un proceso; cada
sistema operativo tiene sus formas de invocar dichas llamadas, en el
caso de los sistemas operativos bajo el ncleo Linux estas se
pueden invocar desde el Shell o interprete de comandos y desde el
lenguaje C.
Las llamadas ms comunes de este tipo son:
1. fork( )
2. getpid( )

3. getppid( )
4. La familia de llamadas exec()
5. wait( )
6. waitpid()
7. exit()
8. system()

Llamadas al sistema para el control de seales:
Sistemas Operativos

Las llamadas a sistema para el control de seales, son un tipo de
llamada de sistema que permite a un proceso establecer
comunicacin con otros procesos que se estn ejecutando en la
mquina o para que el kernel se comunique con ellos, como puede
ser, informar sobre alguna condicin, una solicitud de espera, etc.
En tal comunicacin el proceso puede ser emisor o receptor de la
seal. Las seales que se pueden producir dependen de la mquina
y de los privilegios que el proceso tenga.
Para la mayora de aplicaciones grandes, se usan seales como
forma de controlar las tareas, pudiendo as teniendo aplicaciones en
segundo plano o corriendo provisionalmente.

Llamadas al sistema en Windows
En el mundo Windows en general, las llamadas al sistema se
denominan API (Windows application programming interface), es un
conjunto de funciones residentes en bibliotecas (generalmente
dinmicas, tambin llamadas DLL por sus siglas en ingls, trmino
usado para referirse a stas en Windows) que permiten que una
aplicacin corra bajo un determinado sistema operativo. Por
ejemplo, Windows proporciona una funcin denominada
FlashWindowEx que permite que la barra de ttulo de una aplicacin
alterne entre un sombreado claro y otro oscuro.
Sistemas Operativos

Las funciones API se dividen en varias categoras:
Depuracin y manejo de errores
E/S de dispositivos
Varias DLL, procesos e hilos
Comunicacin entre procesos
Manejo de la memoria
Monitoreo del desempeo
Manejo de energa
Almacenamiento
Informacin del sistema
GDI (interfaz para dispositivos grficos) de Windows (tales
como impresoras)
Interfaz de usuario de Windows
La ventaja de utilizar las API de Windows en el cdigo es que
pueden ahorrar tiempo porque contienen numerosas funciones
tiles ya escritas y listas para utilizar.
La desventaja es que puede resultar difcil trabajar con las API de
Windows y pueden ser implacables cuando las cosas van mal.
Las API de Windows representan una categora especial de
interoperabilidad. Las API de Windows no utilizan cdigo
administrado, no tienen bibliotecas de tipos integradas y utilizan
tipos de datos que son diferentes a los que se utilizan en Visual
Studio. Debido a estas diferencias y a que las API de Windows no
Sistemas Operativos

son objetos COM, la interoperabilidad con las API de Windows y
.NET Framework se lleva a cabo mediante la invocacin de la
plataforma o PInvoke. Invocacin de la plataforma es un servicio
que permite al cdigo administrado llamar a funciones no
administradas implementadas en archivos DLL.


Llamadas al sistema de Windows desde C# :
Como escribir un programa C# que hace llamadas al Sistema de
Windows y sus apis
Para este ejemplo he decido usar el API GetTickCount() que
devuelve un valor entero y no lleva datos entrada.
Su prototipo es:
Sistemas Operativos

Int GetTickCount(void) y se encuentra almacenada en Kernel32.dll,
Esta api nos regresa un entero con los milisegundo que ha estado
encendida nuestra PC.
La importacin de la api se hace en una sola lnea, el resto de
cdigo es simple programacin objetos.

También podría gustarte