Está en la página 1de 6

Sistemas Operativ

Operativos
os

Llamadas al sistema linux (linux system calls)


Una llamada al sistema está implementada en el núcleo de Linux. Cuando un programa llama a una
función del sistema, los argumentos son empaquetados y manejados por el núcleo, el cual toma el
control de la ejecución hasta que la llamada se completa. Una llamada al sistema no es una llamada

aSinuna funciónlaordinaria,
embargo y seCrequiere
librería GNU unlas
encapsula procedimiento especialcon
llamadas al sistema para transferir
funciones de el controlque
manera al núcleo.
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
ll amadas al sistema en Linux.
GNU/Linux es un Sistema Operativo multitarea
mu ltitarea en el que van a convivir un gran número de procesos.
Es posible, bien por un fallo de programación 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 núcleo o kernel del sistema funciona en un entorno totalmente diferente
al resto de programas. Se definen entonces dos modos de ejecución totalmente separados: el modo
kernel y el modo usuario. Cada uno de estos modos de ejecución dispone de memoria y
procedimientos diferentes, por lo que un programa de usuario no podrá ser capaz
c apaz de dañar al núcleo.
Las syscalls o llamadas al sistema son el mecanismo por el cual los procesos y aplicaciones de
usuario acceden a los servicios del núcleo. Son la interfaz que proporciona el núcleo 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
e xplica de forma gráfica cómo funciona la syscall
s yscall read().
Mecanismo de petición de servicios al kernel

USER

PROCESS
READ()

User Mode
SYSTEM CALL INTERFACE

Kernel Mode

FILE SYSTEM
I/O
HARDWARE
Sistemas Operativ
Operativos
os

El modo usuario necesita acceder al disco para leer, para ello utiliza la syscall read() utilizando la
interfaz de llamadas al sistema. El núcleo atiende la petición accediendo al hardware y devolviendo el
resultado al proceso que inició la petición. Este procedimiento me recuerda al comedor de un
restaurante, en él todos los clientes piden al camarero
cam arero lo que desean, pero nunca entran en la cocina.
coc ina.
El camarero, después de pasar por la cocina, traerá el plato que cada cliente haya pedido. Ningún
comensal podría estropear la cocina, puesto que no tiene acceso a ella. Prácticamente todas las
funciones que utilicemos desde el espacio de ejecución de usuario necesitarán solicitar una petición
al kernel mediante una syscall, esto es, la ejecución de las aplicaciones de usuario se canaliza a
través 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 ejecución 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 debería cuidarse muy bien de

qué personal
módulos contrata
en nuestro y nosotros deberemos ser cautelosos también a la hora de cargar drivers o
núcleo.
Para hacer uso de las llamadas al sistema desde el lenguaje de programación C, los sistemas
operativos que trabajan con el núcleo Linux ponen a disposición del usuario varias funciones o
procedimientos de librería 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í también 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 núcleo Linux cuenta con aproximadamente 200 funciones
relacionadas con cada llamada al sistema, algunos de los cuales pueden agruparse en ciertas
categorías que permiten el manejo o control de: procesos, señales, archivos, tiempo, etc. Los
conceptos explicados anteriormente pueden resumirse con el siguiente esquema.
Sistemas Operativ
Operativos
os

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 librería que son
funciones ordinarias que residen en una librería externa a tu programa (desarrollo propio o ajeno al
programa). Como por ejemplo las funciones de la librería estándar C (libc). Una llamada a estas
funciones es igual a cualquier llamada a una función. Los argumentos son situados en los registros
del procesador o en la pila. La ejecución es transferida al comienzo del código de la función, que
típicamente está cargada en una librería compartida. Y, por último, las llamadas al sistema (system
call).
Llamadas al sistema para el control de procesos

Este tipo de llamadas al sistema permiten


perm iten realizar "actividades" relacionadas con los programas que
están en espera para ejecución o que se están 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 núcleo Linux estas se pueden invocar desde el Shell o interprete de comandos y desde el
lenguaje C.
Las llamadas más comunes de este tipo son:
1. fork( )
2. getpid( )
Sistemas Operativ
Operativos
os

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

Llamadas al sistema para el control de señales:


Las llamadas a sistema para el control de señales, son un tipo de llamada de sistema que permite a
un proceso establecer comunicación con otros procesos que se están ejecutando en la máquina o
para que el kernel se comunique con ellos, como puede ser, informar sobre alguna condición, una

solicitud de espera, etc.


En tal comunicación el proceso puede ser emisor o receptor de la señal. Las señales que se pueden
producir dependen de la máquina y de los privilegios que el proceso tenga.
Para la mayoría de aplicaciones grandes, se usan señales 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
dinámicas, también llamadas DLL por sus siglas en inglés, término usado para referirse a éstas en
Windows) que permiten que una aplicación corra bajo un determinado sistema
s istema operativo. Por ejemplo,
Windows proporciona una función denominada FlashWindowEx que permite que la barra de título de
una aplicación alterne entre un sombreado claro y otro oscuro.
Las funciones API se dividen en varias categorías:
 Depuración y manejo de errores
 E/S de dispositivos


Varias DLL, procesos
Comunicación e hilos
entre procesos
Sistemas Operativ
Operativos
os

 Manejo de la memoria
 Monitoreo del desempeño
 Manejo de energía
 Almacenamiento
 Información del sistema

GDI (interfaz para dispositivos gráficos) de Windows (tales como impresoras)
 Interfaz de usuario de Windows
La ventaja de utilizar las API
A PI de Windows en el código es que pueden
pu eden ahorrar tiempo porque contienen
numerosas funciones útiles ya escritas y listas para utilizar.
La desventaja es que puede resultar difícil trabajar con las API
A PI de Windows y pueden ser implacables
cuando las cosas van mal.
Las API de Windows representan una categoría especial de interoperabilidad. Las API de Windows no
utilizan código administrado, no tienen bibliotecas de tipos integradas y utilizan tipos de datos que

son diferentes
Windows no sonaobjetos
los queCOM,
se utilizan en Visual Studio.
la interoperabilidad con Debido
las API adeestas diferencias
Windows y a que lasseAPIlleva
y .NET Framework de
a cabo mediante la invocación de la plataforma o PInvoke. Invocación de la plataforma es un servicio
que permite al código administrado llamar a funciones no administradas implementadas en archivos
DLL.
Sistemas Operativ
Operativos
os

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:
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 importación de la api se hace en una sola línea, el resto de código es simple programación objetos.
o bjetos.

También podría gustarte