Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Sistemas Operativos LLamadas al sistema (system calls) Oscar Alvarado Nava [email protected] Departamento de Electr´ onica Divisi´ on de Ciencias B´ asicas e Ingenier´ıa Universidad Aut´ onoma Metropolitana, Unidad Azcapotzalco 14O, septiembre de 2014 Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 1/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Contenido 1 Llamadas al sistema Modelo Operaci´ on Implementaci´ on 2 Linux en x86 Funcionalidad C´ odigo de Linux 0.01 C´ odigo de Linux 3.16.2 3 Clasificaci´ on Procesos 4 Atributos de proceso Identificaci´ on de proceso de usuario Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 2/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Modelo Modelo de UNIX/Linux Espacio de usuario Llamadas al sistema Espacio del kernel Subsistemas Controladores de dispositivos Hardware Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 3/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso ,ch01.2168 Page 6 Thursday, January 20, 2005 9:21 AM Modelo Linux kernel 2.6.x The System Call Interface Process management Memory management Filesystems Device control Networking Concurrency, multitasking Virtual memory Files and dirs: the VFS Ttys & device access Connectivity Archdependent code Memory manager File system types Character devices Network subsystem Kernel subsystems Features implemented Software support Block devices IF drivers Hardware CPU Memory Disks & CDs Consoles, etc. Network interfaces features implemented as modules Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 4/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Operaci´ on Solicitud de servicios net send mail sshd xinitd sys log bash ps init sub mem CPU IPC RAM Oscar Alvarado Nava planif NIC UAM Azcapotzalco HD SCSI sub red sub archivos ttys HD IDE LLamadas al sistema (system calls) 5/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Operaci´ on Llamadas al sistema (system calls) El sistema operativo (kernel) accede al hardware de forma directa Los programas de usuario solo podr´an acceder al hardware a trav´es del kernel El kernel proteger´a al sistema de programas mal hechos o mal intensionados Las llamadas al sistema es la interfaz entre el kernel y los programas de usuario Define lo que realmente el sistema operativo puede hacer Las llamadas al sistema se ejecutan en un CPU con capacidad de modo protegido o modo supervisor o modo kernel Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 6/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Implementaci´on La implementaci´on del conjunto de llamadas y el n´ umero de las misma pueden variar de un sistema a otro El est´andar IEEE-1003 POSIX (Portable Operating System Interface, la X es de UNIX) define sus nombres, par´ametros y operaci´on Las llamadas son implementadas en el n´ ucleo de sistema operativo Algunas son implementadas en lenguaje ensamblador de la arquitectura objetivo Otras son desarrolladas en lenguajes de alto nivel, comunmente C Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 7/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Envoltura de llamadas al sistema Las llamadas al sistema son presentadas al programador de sistemas como funciones de biblioteca Las funciones de biblioteca envuelven a las llamadas al sistema para facilitar su manejo Generalmente, el nombre de la funci´ on de biblioteca coincide con el nombre de la llamada al sistema Funci´ on de biblioteca: write Llamada al sistema: sys write Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 8/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Instalaci´on de documentaci´on de funciones root@kro:∼# apt-get install manpages-dev oskr@kro:∼/so14I$ man -f write write (1) - send a message to another user write (2) - write to a file descriptor oskr@kro:∼/so14I$ man 2 write Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 9/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Manual de referencia de la funci´on write Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 10/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Funci´on de biblioteca write en lenguaje C 1 2 3 4 5 6 7 8 9 10 11 /* Sistemas Operativos * Oscar Alvarado Nava */ # include < unistd .h > int main () { write (0 , " Hola mundo cruel \ n " ,17) ; return 0; } Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 11/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Compilaci´on y ejecuci´on oskr@kro:∼/so14I$ gcc mensaje.c -o mensaje oskr@kro:∼/so14I$ ./mensaje Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 12/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Ejecuci´on en una llamada al sistema en UNIX/Linux 11 pasos para la ejecuci´ on de una llamada al sistema: cont = read( fd, buffer, nbytes); Address 0xFFFFFFFF Return to caller Trap to the kernel 5 Put code for read in register 10 4 User space Increment SP Call read 3 Push fd 2 Push &buffer 1 Push nbytes 11 User program calling read 6 Kernel space (Operating system) Dispatch Library procedure read 9 7 8 Sys call handler 0 Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 13/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Funci´on de biblioteca La funci´on de biblioteca write envuelve a la llamada al sistema sys write para facilitar su manejo La funci´on de biblioteca har´a lo siguiente: 1 2 3 4 5 Coloca los par´ametros de la llamada en los registros en el orden establecido Agrega una instrucci´ on trampa (trap) que generar´a una interrupci´ on El el PC pasar´a al espacio de direcciones del sistema operativo El CPU cambiar´a a modo privilegiado Regresar´a el valor de retorno a la funci´ on que hizo la llamada Es posible hacer la llamada al sistema directamente desde lenguaje ensamblador Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 14/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Llamada al sistema en x86 Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 15/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Ensamblado, enlazado y ejecuci´on oskr@kro:∼/so14I$ as mensaje.s -o mensaje.o oskr@kro:∼/so14I$ ld -s mensaje.o -o mensaje oskr@kro:∼/so14I$ ./mensaje Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 16/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Bibiblioteca de funciones bufereadas stdio.h Las funciones de la biblioteca est´andar de entrada/salida son construidas a trav´es de llamadas al sistema La funci´on bufereada printf utiliza llamadas al sistema para su procesamiento Crea una cadena (da formato) y la escribe en una terminal (tty1) o pseudoterminal (pts/2) Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 17/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Documentaci´on de funciones buferadas oskr@kro:∼/so14I$ man -f printf printf (1) - format and print data printf (3) - formatted output conversion oskr@kro:∼/so14I$ man 2 printf Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 18/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Funci´on bufereada printf Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 19/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Traza de ejecuci´on de una llamada al sistema espacio de kernel espacio de usuario programa de usuario #include<stdio.h> int main() { ... ... printf(”hola\n”); ... ... } ... ... printf: ... ... write() ... ... ... write: push ... push ... push syscall4 int 0x80 ... ... 4 sys_write: ... write_tty write_hd write_mem ... write_tty: ... ... write_hd: ... ... 3 sys_read: ... read_tty read_hd read_mem ... read_tty: ... ... read_hd: ... ... tabla de llamadas Oscar Alvarado Nava biblioteca (glibc) UAM Azcapotzalco device drivers LLamadas al sistema (system calls) 20/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Implementaci´ on Visualizaci´on de traza con strace root@kro:∼# apt-get install strace oskr@kro:∼/so14I$ gcc fuente.c -o ejecutable oskr@kro:∼/so14I$ strace ./ejecutable Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 21/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Funcionalidad Llamada al sistema en x86 para i386 y superiores Solicitud al kernel de Linux de un servicio (system call): Un programa de usuario solicita un servicio al pasar el control a una rutina de biblioteca La rutina de biblioteca coloca los par´ametros necesarios y la identificaci´ on del servicio Genera una trampa (trap) (en x86, int 0x80) al CPU El CPU es pasado a modo protegido El kernel identifica el servicio y ejecuta la rutina El kernel regresa el control a la biblioteca y el estado de la ejecuci´ on de la llamada Finalmente, la rutina de biblioteca pasa el estado de la ejecuci´ on de la llamada al sistema Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 22/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Funcionalidad Trampas y privilegios de instrucciones 1 Si el CPU se encuentra en el nivel 3 y se trata de ejecutar una instrucci´on con mayor privilegios: 2 Se genera una excepci´ on de software. Se dice que el procesador cae en una trampa: trap 3 El CPU cambia al nievl 0. El valor de la trampa indexa el vector de trampas 4 El vector contiene la direcci´ on para la atenci´ on de la trampa, en el espacio de direcciones del kernel 5 Terminada la operaci´ on, el kernel regresa valores indicando el resultado de la operaci´ on (en UNIX/Linux: 0 en exito, < 0 en falla) y devuelve el control al programa de usuario Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 23/38 Llamadas al sistema Linux en x86 Clasificaci´ on 6-25 Funcionalidad Atributos de proceso Chapter 6: Datapath and Control Vector de trampas Branch (traps) Table • A branch table for trap handlers and interrupt service routines: Address Contents . . . 60 JUMP TO 2000 JUMP TO 3000 Illegal instruction 64 68 72 76 80 84 JUMP TO 3600 JUMP TO 5224 JUMP TO 4180 JUMP TO 5364 JUMP TO 5908 Underflow Zerodivide Disk Printer TTY 88 JUMP TO 6048 . . . Timer Principles of Computer Architecture by M. Murdocca and V. Heuring Oscar Alvarado Nava UAM Azcapotzalco Trap Handler Overflow © 1999 M. Murdocca and V. Heuring LLamadas al sistema (system calls) 24/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso C´ odigo de Linux 0.01 Tabla de llamadas al sistema oskr@kro:∼$ tar -zxvf linux-0.01.tar.gz oskr@kro:∼$ cd linux oskr@kro:∼/linux$ cat include/linux/sys.h oskr@kro:∼/linux$ cat kernel/system call.s Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 25/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso C´ odigo de Linux 0.01 Implementaci´on de llamadas oskr@kro:∼/linux$ cat kernel/fork.c oskr@kro:∼/linux$ cat kernel/sys.c Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 26/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso C´ odigo de Linux 3.16.2 Tabla de llamadas al sistema oskr@kro:∼$ tar -zxvf linux-3.16.2.tar.gz oskr@kro:∼$ cd linux-3.16.2 oskr@kro:∼/linux-3.16.2$ cat arch/x86/syscalls/syscall 32.tbl oskr@kro:∼/linux-3.16.2$ cat include/linux/syscalls.h Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 27/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso C´ odigo de Linux 3.16.2 Implementaci´on de llamadas oskr@kro:∼/linux-3.16.2$ cat kernel/fork.c oskr@kro:∼/linux-3.16.2$ cat kernel/sys.c La implementaci´on de la llamada se puede hacer en lenguaje ensamblador o lenguaje C Se puede agregar un directorio con el nombre del m´odulo junto su Makefile Se deber´a agregar la ruta al Makefile general Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 28/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Procesos Llamadas al sistema para procesos fork waitpid execve exit kill Oscar Alvarado Nava crea un proceso hijo espera por la terminaci´ on del hijo remplaza la imagen del proceso hijo termina su ejecuci´ on y regresa su estado env´ıa una se˜ nal a un proceso UAM Azcapotzalco LLamadas al sistema (system calls) 29/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Procesos Llamadas al sistema para archivos open close read write lseek stat Oscar Alvarado Nava abre un archivo para lectura-escritura cierra un archivo abierto lee datos de un archivo y los coloca en un buffer escribe datos a un archivo leidos de un buffer mueve el apuntador de archivo regresa informaci´ on de un archivo UAM Azcapotzalco LLamadas al sistema (system calls) 30/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Procesos Llamadas al sistema para el manejo de archivos mkdir rmdir link mount umount chdir chmod time Oscar Alvarado Nava crea un nuevo directorio borra un directorio crea una nueva entrada para un archivo monta un sistema desmonta un sistema cambia de directorio cambia de los bits de protecci´ on regresa el tiempo desde 01-01-1970 UAM Azcapotzalco LLamadas al sistema (system calls) 31/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Identificaci´ on de proceso de usuario Atributos de proceso Por medio de llamadas al sistema, un proceso puede conocer sus atributos Identificaci´ on PID Identificaci´ on del proceso padre PPID Due˜ no del proceso UID Grupo al que pertenece el propietario GUID Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 32/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Identificaci´ on de proceso de usuario Comando para identificaci´on de proceso Por medio de comandos es posible obtener informaci´on de los procesos oskr@kro:∼/so14I$ ps PID TTY TIME CMD 4430 pts/2 00:00:00 bash 5180 pts/2 00:00:00 ps Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 33/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Identificaci´ on de proceso de usuario Funci´on de biblioteca getpid() oskr@kro:∼/so14I$ man getpid Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 34/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Identificaci´ on de proceso de usuario LLamada al sistema en C 1 2 3 4 5 6 7 8 9 10 11 12 13 /* Sistemas Operativos * Oscar Alvarado Nava */ # include < stdio .h > # include < sys / types .h > # include < unistd .h > int main () { printf ( " Mi PID es: %d \ n " , getpid () ) ; return 0; } Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 35/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Identificaci´ on de proceso de usuario Compilaci´on y ejecuci´on oskr@kro:∼/so14O$ gcc getpid.c -o ejecutable oskr@kro:∼/so14O$ ./ejecutable Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 36/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Identificaci´ on de proceso de usuario Llamada a sleep() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /* Sistemas Operativos * Oscar Alvarado Nava */ # include < stdio .h > # include < sys / types .h > # include < unistd .h > int main () { pid_t pid ; pid = getpid () ; printf ( " Mi PID es: %d \ n " , pid ) ; while (1) { sleep (1) ; write (0 , " . " ,2) ; } return 0; } Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 37/38 Llamadas al sistema Linux en x86 Clasificaci´ on Atributos de proceso Identificaci´ on de proceso de usuario Espacio de direcciones oskr@kro:∼/so14O$ ./getpid Mi PID es: 2912 . . . oskr@kro:∼/so14O$ less /proc/2912/maps Oscar Alvarado Nava UAM Azcapotzalco LLamadas al sistema (system calls) 38/38
© Copyright 2024