Page 1 W555i `nr/Ms i ARTICLE NAME Power drinks |Original

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