Você está na página 1de 9

Unidad Acadmica Profesional Tianguistenco

Licenciatura: Ingeniera en Software.

Unidad De Aprendizaje: Sistemas Operativos.

Proyecto: System Call en CentOs 6.9.

Profesora: Julieta Reyes Garcilazo.

Alumno: Isaac Alavarado Gonzlez .

SN. de equipo: PF0FBBAQ

7 Semestre Grupo S8.

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().

Mecanismo de peticin de servicios al kernel


Funcin requerida
Se necesita una llamada donde el usuario ingrese una medida en centmetros y nos regrese
la conversin en pulgadas.
1 pulgada =2.54 cm.
1cm = .03937 pulgadas.

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.

Antes de empezar es necesario instalar actualizaciones y estos paquetes.

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

Cabe mencionar que es diferente la forma de agregar una llamda dependiendo de la


arquitectura del Sistema Operativo, en esta caso utilizamos CentOs de i386 (32bits ).

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

definimos nuestra llamada respetando de igual forma la sintaxis.

#define __NR_opsyscall 350

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

8.- terminados estos paso regresamos a la carpeta raiz linux-3.2/


ejecutaremos el siguiente comando:

-make menuconfig
solo guardaremos la configuracion para generar el .config que es la instruccion que permite
compilar.

Despues ejecutaremos el comando :

-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

por ultimo instalamos nuestro nuevo kernel con la funcion ya cargada.

-make install

9.- para hacer un test de la funcion se crea un convertido.c

#include <stdlib.h>
#include <stdio.h>
#include <linux/unistd.h>
#include <sys/syscall.h>
#define sys_opsyscall 350

int main(){

printf("CONVERTIR DE CENTIMETROS A PULGADAS\n");


int nume;
printf("Dame los Centimetros a convertir:");
scanf("%d",&nume );
printf("La convercion de Cm a in es:%d\n",syscall(sys_opsyscall,nume));
return 0;
}

Donde 78 cm es a 30.70

Você também pode gostar