Escolar Documentos
Profissional Documentos
Cultura Documentos
Periodo 2017B
Las llamadas a sistema, son procedimientos que se pueden invocar desde el espacio de
usuario (en un programa en C, por ejemplo), y que requieren que sean atendidas por el
kernel del Sistema operativo (en el espacio del kernel), por lo que se debe realizar un cambio
de modo de ejecuci n para atender estas llamadas. Algunos ejemplos de estas llamadas son
las o primitivas de la libc read, write, open, rand, socket, entre otras.
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().
Implementacin
Se requiere una llamada al sistema en el Kernel de linux que resuleva lo siguente:
Introducir una medida expresada en centimetros y convertirla en pulgadas.
yum update
yum install gcc-c++
yum install ncurses-devel
1.- Iniciamos descargando el nucleo (Kernel) con el que se quiera trabajar, en este caso se
utillizo el Kernel 3.5.1 que se puede descargar de la siguente pagina:
https://www.kernel.org/pub/linux/kernel/v3.x/
linux-3.5.1.tar.gz
una ves descargada la versin de Kernel es necesario abrir la terminal y logearse como super
usuario.
2.- Una vez logueado tenemos que copiar el archivo linux-3.5.1.tar.gz ala carpeta usr/src/ .
Nos dirijimos a la carpeta usr/src/ y descompactamos el kernel linux-3.5.1.tar.gz
cuando termine nos aparecera una una carpeta con el nombre linux-3.5.1
3.- nos dirijimos a ./arch/x86/syscalls/ dentro de ella editaremos es archivo con el nombre
syscall_32.tbl
dentro de este agregaremos nuestra llamada con la misma sitaxis que se muestra es
importante seguir la secunecia de las llamdas en mi caso es la nmero 350.
4.- Guardamos ese archivo y nos dirigimos a ./arch/x86/include/generated/asm
editaremos el archivo unistd_32.h
guardamos.
5.- Ahora nos dirijimos a la carpeta linux-3.5.1/include/linux/
editamos el archivo syscalls.h
agregaremos nustro prototipo de la funcion.
asmlinkage int sys_opsyscall(int cm);
Guardamos.
6.- Ingresar a linux-3.5.1/kernel
dentro de esta crearemos un archivo que contendra nuestra funcion para realizar la
conversin de centimetros a pulgadas. gedit opsyscall.c
#include<linux/linkage.h>
#include <linux/kernel.h>
#include <linux/syscalls.h>
asmlinkage int sys_opsyscall(int cm)
{
int obj,obj2;
obj=cm*3937;
obj2=obj/10000;
return obj2;
}
guardamos el archivo.
7.- Dentro de esta misma carpeta editamos el archivo Makefile que permitira la compilacion
de nuestra funcion, agregando en la seccion de obj-y .
obj-y += opsyscall.o
-make menuconfig
solo guardaremos la configuracion para generar el .config que es la instruccion que permite
compilar.
-make
una ves que termina de compilar es necesario cargar los modulos con el siguiente comando:
-make modules
terminado de cargar los modulos de instalan
-make modules_intall
-make install
#include <stdlib.h>
#include <stdio.h>
#include <linux/unistd.h>
#include <sys/syscall.h>
#define sys_opsyscall 350
int main(){
Donde 78 cm es a 30.70