Está en la página 1de 2

1

2 Usando cscope vemos lo siguiente: desc.h >>> Funcion set_system_trap_gate >>>>linea 378 traps.c >>> Funcion trap_init >>>> linea 723 irq_vectors.h >>> linea 51 >>> define SYSCALL_VECTOR 0x80 define SYSCALL_VECTOR 0x80 por lo que el valor de las syscall es la interrupcin 0x80. 3 en entry_32.S, syscall.h, en syscall_32.c y en syscall_64.c Esta tabla es un array que contiene tantas entradas como hay en el systema de llamadas. Cada llamda la sistema es identificada dentro del kernel por una constante representando un un numero integer. Este numero es usado como index in la sys_call_table para recueprar la direccion de la funcion kernel la cual implementa esta llamada en particular. 4 Para uso comn de todos los programas se construye una librera de mdulos objeto con los nombres y referencias de las llamadas a sistema de linux a utilizar(unistd.h). Este cdigo se encargar de efectuar el paso de parmetros a la rutina residente en memoria, segn algn convenio establecido (registros, memoria ...) y ejecutar la instruccin de salto (trap) o llamada a sistema.

Las diferencias estan en que en la distro U 10.04 la rutina libc_write empieza en el 0x0804f8a0, mientras que en U 12.04 esta en 0x08053b70. En esta rutina se hace una llamada a la rutina _write_nocancel y es en esta donde se llama a la interrupcion 0x80 que produce un salto a la zona de codigo del Sistema Operativo. Concretamente salta a la funcion system_call en el proceso de salto.