dso-3: drivers y procesos (v4b)
TRANSCRIPT
Lección 3drivers y servicios ampliados
Diseño de Sistemas Operativos
Grado en Ingeniería Informática
Grupo ARCOSUniversidad Carlos III de Madrid
Alejandro Calderón Mateos
Lecturas recomendadas
2
1. Carretero 2007:
1. Cap.7
1. Tanenbaum 2006(en):
1. Cap.3
2. Stallings 2005(en):
1. Parte tres
3. Silberschatz 2006:
1. Cap. Sistemas de E/S
Base Recomendada
ARCOS @ UC3M
Alejandro Calderón Mateos
1. Estudiar la teoría asociada.� Estudiar el material asociado a la bibliografía:
las transparencias solo no son suficiente.
� Crear cuestiones con sus respuestas y justificación.
2. Repasar lo visto en clase.� Realizar el cuaderno de prácticas progresivamente.
3. Ejercitar las competencias.� Realizar las prácticas progresivamente.
� Realizar todos los ejercicios posibles.
A recordar…
ARCOS @ UC3M3
Alejandro Calderón Mateos
Contenidos
4
� Introducción
� Periféricos
� Organización de los drivers
� Procesos
� Estructura de un driver
� Ejemplos de diseño
� Reloj: temporización y C.C.I.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
Alejandro Calderón Mateos
Contenidos
5
� Introducción
� Periféricos
� Organización de los drivers
� Procesos
� Estructura de un driver
� Ejemplos de diseño
� Reloj: temporización y C.C.I.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
Alejandro Calderón Mateos
Ámbito de gestión
6
� Parte del sistema operativo encargada de la interaccióncon todos los posibles controladores (hardware)
� Incluye toda la comunicación de la CPU y la memoria con el resto de elementos hardware.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
drivers
Alejandro Calderón Mateos
Características por el ámbito de gestión
7
� Dependiente delsistema operativo:� Los controladores de un
sistema operativo no son fáciles de reutilizar en otro.
� Parte muy dinámica:� Se añade drivers
continuamente.
� Implementados en módulos:� Añadir/quitar sin parar.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
drivers
Alejandro Calderón Mateos
Objetivos de la E/S
8
� Ofrecer una visión lógica simplificada para:� Resto del sistema operativo
� Usuarios
� Optimizar la E/S
� Facilitar la gestión de periféricos
� Facilitar añadir soporte a nuevos dispositivos
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
drivers
Alejandro Calderón Mateos
Importancia de los controladores
9
� Estadísticas del kernel de Linux (2007-2008):
� 9,2 millones de líneas de código.
� Se incrementa un 10% cada año:
� La mayor parte del código es de los drivers:
� El 55% del código son los controladores de dispositivo (o drivers)
� Software parte del sistema operativo que la CPU ejecuta para trabajar con el dispositivo asociado
� Es un código que funciona con acceso total al sistema (mismo nivel de protección que el kernel)
� El núcleo del kernel ocupa un 5% y el resto (40%) se reparte entre soporte para las distintas arquitectura, el código de red, etc.
http://cityblogger.com/archives/2008/06/16/linux-kernel-stats ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
10
� Introducción
� Periféricos
� Organización de los drivers
� Procesos
� Estructura de un driver
� Ejemplos de diseño
� Reloj: temporización y C.C.I.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
drivers
Alejandro Calderón Mateos
Concepto de periférico
11
� Periférico:
� Todo aquel dispositivo externo
que se conecta a una CPU a través
de la unidades o módulos de
entrada/salida (E/S).
� Permiten almacenar información o
comunicar el computador con el
mundo exterior.
Periféricos
ARCOS @ UC3M
Alejandro Calderón Mateos
Clasificación de periféricos (por uso)
12
� Comunicación:
� Hombre - máquina
� (Terminal) teclado, ratón, …
� (Impresa) plotter, escáner, …
� Máquina - máquina (Módem, …)
� Medio físico - máquina
� (Lectura/accionamiento) x (analógico/digital)
� Almacenamiento:
� Acceso “directo” (Discos, DVD, …)
� Acceso secuencial (Cintas)
ARCOS @ UC3M
Alejandro Calderón Mateos
Estructura general de un periférico
13
� Compuesto de:
� Dispositivo
� Hardware que interactúa con el entorno
� Módulo de Entrada/Salida
� También denominado controlador
� Interfaz entre dispositivo y la CPU, que le oculta las particularidades de este
Dispositivo
Módulo de E/S
Periféricos
Periférico = Dispositivo + Controlador
ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploDisco duro
14
Dispositivo
Módulo de E/S
Periféricos
ARCOS @ UC3M
Alejandro Calderón Mateos
Módulo de E/S qué son
15
� Las unidades o módulos de E/Srealizan la conexión de la CPU con los dispositivos periféricos.
Dispositivo
Módulo de E/S
Memoria
…
Bus
ARCOS @ UC3M
Alejandro Calderón Mateos
Módulo de E/Snecesidad
16
� Son necesarios debido a:� Gran variedad de periféricos.
� Los periféricos son ‘raros’
� La velocidad de transferencia de datos de los periféricos es mucho menor que la de la memoria o el procesador.� Los periféricos son ‘muy lentos’
� Formatos y tamaños de palabra de los periféricos distintos a los del computador al que se conectan.
Dispositivo
Módulo de E/S
Periférico
ARCOS @ UC3M
Alejandro Calderón Mateos
Módulo de E/S estructura
17
� Interacción entre CPU y Unidad de E/S a través de 3 tipos de registros:
� Registro de control� Ordenes para el periférico
� Registro de estado� Estado desde de la última orden
� Registro de datos� Datos intercambiados CPU/periférico
ControlEstadoDatos
0x05010x05020x0503
Unidad de E/S
Lógica de E/S
Lógica dispositivo externo
Lógica dispositivo externo
…
datos
estado
controldatos
estado
control
ARCOS @ UC3M
Alejandro Calderón Mateos
Ejemplodispositivo USB
18
� Información de control 1
� 0: leer
� 1: escribir
� Información de control 2
� Posición de lec./esc.
� Información de estado
� 0: dispositivo ocupado
� 1: dispositivo (dato) listo
� Datos
� Dato del dispositivo
Control 1Control 2Estado
0x05000x05040x0508
Unidad de E/S
Datos0x050C
ARCOS @ UC3M
Alejandro Calderón Mateos
Ejemplodispositivo USB
19
Control:
out(0x504,10) ; // offset
out(0x500, 0) ; // leer
Estado:
do {
in(0x508, &status) ; // ¿listo?
} while (0 == status) ;
Datos:
in(0x50C, &datos[i]) ; // leer dato
Control 1Control 2Estado
0x05000x05040x0508
Unidad de E/S
Datos0x050C
� Información de control 1
� 0: leer
� 1: escribir
� Información de control 2
� Posición de lec./esc.
� Información de estado
� 0: dispositivo ocupado
� 1: dispositivo (dato) listo
� Datos
� Dato del dispositivo
ARCOS @ UC3M
Alejandro Calderón Mateos
Módulo de E/Sfuncionamiento
20
� Aspectos fundamentales:
� Direccionamiento
� Interacción computador-controlador
� Unidad de transferencia
Control:
out(0x504,10) ; // offset
out(0x500, 0) ; // leer
Estado:
do {
in(0x508, &status) ; // ¿listo?
} while (0 == status) ;
Datos:
in(0x50C, &datos[i]) ; // leer dato
ARCOS @ UC3M
Alejandro Calderón Mateos
(1/3) Direccionamiento de E/S
21
� Espacio de memoria conjunto
� Los registros del ‘controlador’ se proyectan en memoria y usando un conjunto de direcciones de memoria se acceden a dichos registros.
� Ej: sw $a0 etiqueta_discoA
� Espacio de memoria separado (puertos)
� Con instrucciones ensamblador especiales (In/Out) se acceden a las direcciones de E/S (denominadas puertos) que representan los registros del ‘controlador’.
� Ej: out $a0 0x105A
Mem.
E/S
Mem.
E/S
ARCOS @ UC3M
out(0x504,10) ;
out(0x500, 0) ;
do {
in(0x508, &status) ;
} while (0 == status) ;
in(0x50C, &datos[i]) ;
Alejandro Calderón Mateos
(2/3) Unidad de transferencia
22
� Dispositivos de bloque:
� Unidad: bloque de bytes
� Acceso: secuencial o directo
� Operaciones: leer, escribir, situarse, …
� Ejemplos: “cintas” y discos
� Dispositivos de carácter:
� Unidad: caracteres (ASCII, Unicode, etc.)
� Acceso: secuencial
� Operaciones: get, put, ….
� Ejemplo: terminales, impresoras, etc.
ARCOS @ UC3M
out(0x504,10) ;
out(0x500, 0) ;
do {
in(0x508, &status) ;
} while (0 == status) ;
in(0x50C, &datos[i]) ;
Alejandro Calderón Mateos
(3/3) Interacción con computador
23
� E/S programada o directa
� CPU no hace otra cosa que E/S: espera � transfiere
� E/S por interrupciones
� CPU: sólo transfiere
� E/S por DMA (acceso directo a memoria)
� CPU no transfiere solo se le avisa del fin del bloque transferido
� controlador de periférico más sofisticado
� lógica para DMA: contadores, señales de control, etc.
‘polling’
ARCOS @ UC3M
out(0x504,10) ;
out(0x500, 0) ;
do {
in(0x508, &status) ;
} while (0 == status) ;
in(0x50C, &datos[i]) ;
Alejandro Calderón Mateos
Contenidos
24
� Introducción
� Periféricos
� Organización de los drivers
� Procesos
� Estructura de un driver
� Ejemplos de diseño
� Reloj: temporización y C.C.I.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
drivers
Alejandro Calderón Mateos
Visión lógica simplificadaLinux
25 ARCOS @ UC3M
Periférico
driver
mplayer
/dev/fb0
vfs
Alejandro Calderón Mateos
Visión lógica simplificadaLinux
26 ARCOS @ UC3M
Periférico
driver
mplayer
/dev/fb0
vfs
Alejandro Calderón Mateos
Inventario de hardwareLinux
� Al arrancar el kernel descubre los periféricos.
� Les asocia el driver más apropiado que disponga.
� Hotplugging (Inserción en caliente de hardware)
ARCOS @ UC3M27
alejandro@tesla:~$ lspci
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller (rev 09)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
00:1b.0 Audio device: Intel Corporation 6 Series/C200 Series Chipset Family High Definition Audio Controller (rev 05)
…
alejandro@tesla:~$ lsusb
Bus 002 Device 004: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 002 Device 005: ID 046d:082b Logitech, Inc.
Bus 002 Device 003: ID 04cc:1521 ST-Ericsson USB 2.0 Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
…
alejandro@tesla:~$ lshw
…
Alejandro Calderón Mateos
Gestión básica de driversLinux
28 ARCOS @ UC3M
lsmod
/proc/modules
kmod
modprobe <x>
/lib/modules/<version>/modules.dep
depmod -ainsmod </a/x>
rmmod </a/x>
kernel
Alejandro Calderón Mateos
Visión lógica simplificadaLinux
29 ARCOS @ UC3M
Periférico
driver
mplayer
/dev/fb0
vfs
Alejandro Calderón Mateos
Representación de los dispositivosLinux
� Habitualmente como ficheros de /dev: /dev/xxxx
� Puede existir ficheros para dispositivos virtuales ydispositivos para los que no hay fichero: Tarjeta de red, entrada o salida estándar, etc.
30http://sopa.dis.ulpgc.es/ii-dso/leclinux/drivers/i0/io.pdf ARCOS @ UC3M
alejandro@tesla:~$ ls -las /dev/
total 4
0 crw------- 1 root root 5, 1 feb 16 12:59 console
0 crw-rw---- 1 root video 29, 0 feb 16 12:59 fb0
0 crw-r----- 1 root kmem 1, 1 feb 16 12:59 mem
0 crw-rw-rw- 1 root root 1, 3 feb 16 12:59 null
0 crw------- 1 root root 10, 1 feb 16 12:59 psaux
0 brw-rw---- 1 root disk 1, 0 feb 16 12:59 ram0
0 crw-rw-rw- 1 root root 1, 8 feb 16 12:59 random
0 crw------- 1 root root 254, 0 feb 16 12:59 rtc0
0 brw-rw---- 1 root disk 8, 0 feb 16 12:59 sda
0 brw-rw---- 1 root disk 8, 1 feb 16 12:59 sda1
0 brw-rw---- 1 root disk 8, 2 feb 16 12:59 sda2
0 crw-rw-rw- 1 root tty 5, 0 feb 20 20:30 tty
0 crw-rw-rw- 1 root root 1, 9 feb 16 12:59 urandom
0 crw-rw-rw- 1 root root 1, 5 feb 16 12:59 zero
…
Alejandro Calderón Mateos
Representación de los dispositivosLinux
� Se identifican con:
� Major number (driver) + minor number (“dispositivo”)
31http://sopa.dis.ulpgc.es/ii-dso/leclinux/drivers/i0/io.pdf ARCOS @ UC3M
alejandro@tesla:~$ ls -las /dev/
total 4
0 crw------- 1 root root 5, 1 feb 16 12:59 console
0 crw-rw---- 1 root video 29, 0 feb 16 12:59 fb0
0 crw-r----- 1 root kmem 1, 1 feb 16 12:59 mem
0 crw-rw-rw- 1 root root 1, 3 feb 16 12:59 null
0 crw------- 1 root root 10, 1 feb 16 12:59 psaux
0 brw-rw---- 1 root disk 1, 0 feb 16 12:59 ram0
0 crw-rw-rw- 1 root root 1, 8 feb 16 12:59 random
0 crw------- 1 root root 254, 0 feb 16 12:59 rtc0
0 brw-rw---- 1 root disk 8, 0 feb 16 12:59 sda
0 brw-rw---- 1 root disk 8, 1 feb 16 12:59 sda1
0 brw-rw---- 1 root disk 8, 2 feb 16 12:59 sda2
0 crw-rw-rw- 1 root tty 5, 0 feb 20 20:30 tty
0 crw-rw-rw- 1 root root 1, 9 feb 16 12:59 urandom
0 crw-rw-rw- 1 root root 1, 5 feb 16 12:59 zero
…
Alejandro Calderón Mateos
Representación de los dispositivosLinux
� Gestionado mediante:
� mkdev (obsoleto): script para creación de todos los posibles ficheros
� devfs (obsoleto): sistema de ficheros con todos los posibles dispositivos
� udev: sistema de ficheros dinámico (hot-plug/unplug, triggers, etc.)
32http://sopa.dis.ulpgc.es/ii-dso/leclinux/drivers/i0/io.pdf ARCOS @ UC3M
alejandro@tesla:~$ ls -las /dev/
total 4
0 crw------- 1 root root 5, 1 feb 16 12:59 console
0 crw-rw---- 1 root video 29, 0 feb 16 12:59 fb0
0 crw-r----- 1 root kmem 1, 1 feb 16 12:59 mem
0 crw-rw-rw- 1 root root 1, 3 feb 16 12:59 null
0 crw------- 1 root root 10, 1 feb 16 12:59 psaux
0 brw-rw---- 1 root disk 1, 0 feb 16 12:59 ram0
0 crw-rw-rw- 1 root root 1, 8 feb 16 12:59 random
0 crw------- 1 root root 254, 0 feb 16 12:59 rtc0
0 brw-rw---- 1 root disk 8, 0 feb 16 12:59 sda
0 brw-rw---- 1 root disk 8, 1 feb 16 12:59 sda1
0 brw-rw---- 1 root disk 8, 2 feb 16 12:59 sda2
0 crw-rw-rw- 1 root tty 5, 0 feb 20 20:30 tty
0 crw-rw-rw- 1 root root 1, 9 feb 16 12:59 urandom
0 crw-rw-rw- 1 root root 1, 5 feb 16 12:59 zero
...
Alejandro Calderón Mateos
Representación de los dispositivosLinux
� Es posible manualmente crear un nuevo fichero de dispositivo:
� Nombre del fichero
� Tipo: bloque o carácter
� Major & minor number
33 ARCOS @ UC3M
alejandro@tesla:~$ mknod /dev/sensor1 c 12 1
alejandro@tesla:~$ ls sensor1
0 crw-r--r-- 1 root root 12, 1 feb 21 13:46 sensor1
alejandro@tesla:~$ cat sensor1
cat: /dev/sensor1: No existe el dispositivo o la dirección
alejandro@tesla:~$ udevadm info -a -n /dev/sda | grep DRIVER
DRIVERS=="sd"
DRIVERS=="ata_piix“
Alejandro Calderón Mateos
Visión lógica simplificadaLinux
34 ARCOS @ UC3M
Periférico
driver
mplayer
/dev/fb0
vfs
Alejandro Calderón Mateos
Arquitectura del sistema de E/S
35
Sistema de ficheros
Controladordispositivo
Controladordispositivo
Drivers de caracteresDrivers de bloque
Interfaz del Sistema Operativo
BufferCache
Sockets
Protocolos de red
Drivers de red
Controladordispositivo
ARCOS @ UC3M
Alejandro Calderón Mateos
Estructura genérica del sistema de E/S
36
Sistema de ficheros
Controladordispositivo (1)
Controladordispositivo (n)
Controladordispositivo (1)
Controladordispositivo (n)
… Específico 1 Específico n…carga
Específico 1 Específico n…
carga
Interfaz del Sistema Operativo
BufferCache
…
Servicio ampliado (A)
cargacarga
Servicio ampliado (A)
carga
…
ARCOS @ UC3MAlejandro Calderón Mateos
Driver bloque (1)
interfaz
Driver caracteres (1)
interfaz
S. ampliado (X)
interfaz
…
Alejandro Calderón Mateos
Estructura genérica del sistema de E/S
37
Sistema de ficheros
Controladordispositivo (1)
Controladordispositivo (n)
Controladordispositivo (1)
Controladordispositivo (n)
… Específico 1 Específico n…carga
Específico 1 Específico n…
carga
Interfaz del Sistema Operativo
BufferCache
…
Servicio ampliado (A)
cargacarga
Servicio ampliado (A)
carga
…
ARCOS @ UC3MAlejandro Calderón Mateos
Driver bloque (1)
interfaz
Driver caracteres (1)
interfaz
S. ampliado (X)
interfaz
…
Alejandro Calderón Mateos
Estructura genérica del sistema de E/Sclasificación de drivers
� Los drivers se clasifican según el grupo de dispositivos a los que trata.
� Si dos drivers tratan un mismo tipo de dispositivo entonces la interfaz es similar
� Parte de la implementación del driver es común (se ahorra código)
� De forma clásica hay tres tipos:
� Dispositivos de caracteres: teclado, módem, etc.
� Dispositivos de bloques: discos, cintas, etc.
� Dispositivos de red: tarjetas de red
38 ARCOS @ UC3M
Controladordispositivo (1)
Controladordispositivo (n)
Controladordispositivo (1)
Controladordispositivo (n)
… Específico 1 Específico n…carga
Específico 1 Específico n…
carga Driver bloque (1)
interfaz
Driver caracteres (1)
interfaz
…
Alejandro Calderón Mateos
Estructura genérica del sistema de E/S
39
Sistema de ficheros
Controladordispositivo (1)
Controladordispositivo (n)
Controladordispositivo (1)
Controladordispositivo (n)
… Específico 1 Específico n…carga
Específico 1 Específico n…
carga
Interfaz del Sistema Operativo
BufferCache
…
Servicio ampliado (A)
cargacarga
Servicio ampliado (A)
carga
…
ARCOS @ UC3MAlejandro Calderón Mateos
Driver bloque (1)
interfaz
Driver caracteres (1)
interfaz
S. ampliado (X)
interfaz
…
Alejandro Calderón Mateos
Estructura genérica del sistema de E/Sservicios ampliados
� Servicio ampliado:
• Módulo que extiende un driver para añadirle algún tipo de funcionalidad.
• Son apilables entre sí.
� Tiene, al menos, dos interfaces:
� La interfaz del servicio que ofrece:
� Interfaz de llamadas al sistema
� Interfaz de un S. Ampliado superior
� La interfaz del recurso que utiliza:
� Interfaz de un driver
� Interfaz de un S. Ampliado inferior
40
Controladordispositivo (1)
Controladordispositivo (n)
Sistema de ficheros
Interfaz del Sistema Operativo
…
Servicio ampliado (A)
carga
S. ampliado (X)
carga
interfaz
ARCOS @ UC3M
Específico 1 Específico n…
carga Driver bloque (1)
interfaz
Alejandro Calderón Mateos
Servicios ampliadosLinux
� Ejemplo de servicio ampliado:
� md (multiple disks)
� Combina varios discos duros, o particiones (o volúmenes) en un único disco virtual.� mdadm --create /dev/md0
--level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
41
/dev/sda1 /dev/sdb2
/dev/md0
ARCOS @ UC3M
Alejandro Calderón Mateos
Jerarquía de driversLinux
� La jerarquía del modelo se muestra en la figura:
� Buses en el nivel inferior
� Dispositivos en el nivel intermedio
� Clases en el nivel más alto
� Acceso a través de sysfs:
� /sys/block: disp. de bloques (cualquier bus)
� /sys/bus: buses del sistema (disp. están aquí)
� /sys/devices: dispositivos organizados por buses
� /sys/class: clases de dispositivos (audio, de red, ...)
� /sys/module: drivers registrados en el núcleo
� /sys/power: manejo del estado de energía
� /sys/firmware: manejo de firmware (en ciertos disp.)
42http://sopa.dis.ulpgc.es/ii-dso/leclinux/drivers/i0/io.pdf ARCOS @ UC3M
Alejandro Calderón Mateos
Visión lógica simplificadaLinux
43 ARCOS @ UC3M
Periférico
driver
mplayer
/dev/fb0
vfs
Alejandro Calderón Mateos
Contenidos
44
� Introducción
� Periféricos
� Organización de los drivers
� Procesos
� Estructura de un driver
� Ejemplos de diseño
� Reloj: temporización y C.C.I.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
drivers
Alejandro Calderón Mateos
Introducción
� Concepto de proceso
� Modelo ofrecido
� Implicaciones en S.O.
ARCOS @ UC3M45
Proceso
kernel
Alejandro Calderón Mateos
Introducción
� Concepto de proceso
ARCOS @ UC3M46
Proceso
Alejandro Calderón Mateos
Concepto de proceso
� Proceso
� Programa en ejecución
� Unidad de procesamiento gestionada por el S.O.
ARCOS @ UC3M47
1
2
Disco
CPU
Memoria
App 1
Alejandro Calderón Mateos
Introducción
� Concepto de proceso
� Modelo ofrecido
ARCOS @ UC3M48
Proceso
Alejandro Calderón Mateos
Modelo ofrecido
� Recursos asociados
� Zonas de memoria
� Al menos: código, datos y pila
� Archivos abiertos
� Señales
ARCOS @ UC3M49
Disco
CPU
Memoria
Alejandro Calderón Mateos
Modelo ofrecido
� Multiprogramación
� Tener varias aplicaciones en memoria
� Si una aplicación se bloquea por E/S, entoncesse ejecuta mientras otra hasta que quede bloqueada
� Cambio de contexto voluntario (C.C.V.)
� Eficiencia en el uso del procesador
� Grado de multiprogramación = número de aplicaciones en RAM
ARCOS @ UC3M50
CPU
Memoria
App 1
App 2
App 3
App1
App2
App3
Alejandro Calderón Mateos
Modelo ofrecido
� Protección / Compartición
� El espacio de direcciones privado por aplicación, pero
� Posibilidad de comunicar datos entre dos aplicaciones
� Paso de mensajes
� Compartición de memoria
ARCOS @ UC3M51
CPU
Memoria
App 1
App 2
App 3
Alejandro Calderón Mateos
Modelo ofrecido
� Jerarquía de procesos
� Creación de proceso
� Como copia de otro proceso existente
� A partir del programa en disco
� Como proceso en el arranque
� Grupo de procesos que comparten mismo tratamiento
ARCOS @ UC3M52
CPU
Memoria
App 1
App 2
App 3App1 App2
App3
App0
Alejandro Calderón Mateos
Modelo ofrecido
� Multitarea
� Cada proceso se ejecuta un quantum de tiempo (Ej.: 5 ms) yse rota el turno para ejecutar procesos no bloqueados
� Cambio de contexto involuntario (C.C.I.)
� Reparto del uso del procesador
� Parece que todo se ejecuta a la vez
ARCOS @ UC3M53
CPU
Memoria
App 1
App 2
App 3
App1 App2 App3
Alejandro Calderón Mateos
Modelo ofrecido
� Multiproceso
� Se dispone de varios procesadores (multicore/multiprocesador)
� Además del reparto de cada CPU (multitarea) hay paralelismo real entre varias tareas (tantas como procesadores)
� Se suele usar planificador y estructuras de datos separadas por procesador con algún mecanismo de equilibrio de carga
ARCOS @ UC3M54
Memoria
App 1
App 2
App 3
App1 App2 App3
CPU
Alejandro Calderón Mateos
Introducción
� Concepto de proceso
� Modelo ofrecido
� Implicaciones en S.O.
ARCOS @ UC3M55
Proceso
kernel
Alejandro Calderón Mateos
Implicaciones en el sistema operativo
ARCOS @ UC3M56
Requisitos Información (en estructuras de datos) Funciones (internas, servicio y API)
Recursos• Zonas de memoria (código, datos y pila)• Archivos abiertos• Señales activas
• Diversas funciones internas• Diversas funciones de servicio para
memoria, ficheros, etc.
Multiprogramación• Estado de ejecución• Contexto: registros de CPU…• Lista de procesos
• Int. hw/sw de dispositivos• Planificador• Crear/Destruir/Planificar proceso
o Protección / Compartición
• Paso de mensajes• Cola de mensajes de recepción
• Memoria compartida• Zonas, locks y conditions
• Envío/Recepción mensaje y gestiónde la cola de mensaje
• API concurrencia y gestión de estructuras de datos
o Jerarquía de procesos
• Relación de parentesco• Conjuntos de procesos relacionados• Procesos de una misma sesión
• Clonar/Cambiar imagen de proceso• Asociar procesos e indicar proceso
representante
Multitarea• Quantum restante• Prioridad
• Int. hw/sw de reloj• Planificador• Crear/Destruir/Planificar proceso
Multiproceso • Afinidad• Int. hw/sw de reloj• Planificador• Crear/Destruir/Planificar proceso
1. Estructuras de datos
Alejandro Calderón Mateos
Implicaciones en el sistema operativo
1. Estructuras de datos
ARCOS @ UC3M57
kernel
Alejandro Calderón Mateos
Implicaciones en el sistema operativo
ARCOS @ UC3M58
Requisitos Información (en estructuras de datos) Funciones (internas, servicio y API)
Recursos• Zonas de memoria (código, datos y pila)• Archivos abiertos• Señales activas
• Diversas funciones internas• Diversas funciones de servicio para
memoria, ficheros, etc.
Multiprogramación• Estado de ejecución• Contexto: registros de CPU…• Lista de procesos
• Int. hw/sw de dispositivos• Planificador• Crear/Destruir/Planificar proceso
o Protección / Compartición
• Paso de mensajes• Cola de mensajes de recepción
• Memoria compartida• Zonas, locks y conditions
• Envío/Recepción mensaje y gestiónde la cola de mensaje
• API concurrencia y gestión de estructuras de datos
o Jerarquía de procesos
• Relación de parentesco• Conjuntos de procesos relacionados• Procesos de una misma sesión
• Clonar/Cambiar imagen de proceso• Asociar procesos e indicar proceso
representante
Multitarea• Quantum restante• Prioridad
• Int. hw/sw de reloj• Planificador• Crear/Destruir/Planificar proceso
Multiproceso • Afinidad• Int. hw/sw de reloj• Planificador• Crear/Destruir/Planificar proceso
2. Funciones: de gestión internas
Alejandro Calderón Mateos
Implicaciones en el sistema operativo
2. Funciones: de gestión internas
ARCOS @ UC3M59
kernel
� Estados y cambios de contexto
� Colas de procesos
� Planificación
� Etc.
Alejandro Calderón Mateos
Implicaciones en el sistema operativo
3. Funciones: de servicio
ARCOS @ UC3M60
kernel
� Creación de proceso
� Destrucción de proceso
� Cambio de imagen
� Espera por el fin de otro proceso
� Etc.
� Estados y cambios de contexto
� Colas de procesos
� Planificación
� Etc.
Alejandro Calderón Mateos
Implicaciones en el sistema operativo
3. Funciones: API de servicio
ARCOS @ UC3M61
kernel
� Creación de proceso
� Destrucción de proceso
� Cambio de imagen
� Espera por el fin de otro proceso
� Etc.
� Estados y cambios de contexto
� Colas de procesos
� Planificación
� Etc.
� fork, exit, exec, wait, …
� pthread_create, pthread…
Alejandro Calderón Mateos
Introducciónresumen
� Concepto de proceso
� Modelo ofrecido
� Implicaciones en S.O.
ARCOS @ UC3M62
Proceso
kernel
� …
� …
� …� …
� …� …
Alejandro Calderón Mateos
Principales estructuras de datos
ARCOS @ UC3M63
kernel
� …
� …
� …� …
� …� …
Alejandro Calderón Mateos
Información en el sistema operativo
ARCOS @ UC3M64
Memoria física
App 1
App 2
App 3
Tabla de procesos
Tabla de memoria
Tabla de E/S
Tabla de ficheros
Tablas del S.O.
Alejandro Calderón Mateos
Información para un proceso
ARCOS @ UC3M65
Memoria física
App 1
App 2
App 3
Tabla de procesos
Tabla de memoria
Tabla de E/S
Tabla de ficheros
Tablas del S.O.
Tabla de procesos
BCP
(1)
BCP
(2)
BCP
(3)
…
Alejandro Calderón Mateos
BCP: entrada de la tabla de procesos
� Gestión de proceso
� Registros generales
� Contador de programa
� Registro de estado
� Puntero de pila
� Identificador del proceso
� Proceso padre
� Grupo de proceso
� Prioridad
� Parámetros del planificador
� Señales
� Instante inicio de ejecución
� Tiempo de uso de CPU
� Tiempo hasta siguiente alarma
ARCOS @ UC3M66
est
ad
oId
.g
est
ión
� Process Control Block (PCB / BCP)
� Estructura de datos con la información necesaria para gestionar un proceso en particular
� Manifestación de un proceso en el kernel
� Thread Control Block (TCB / BCT)
� Similar al BCP para cada hilo de un proceso
Tabla de procesos
BCP
(1)
BCP
(2)
BCP
(3)
…
Alejandro Calderón Mateos
BCP: entrada de la tabla de procesos
� Gestión de proceso
� Registros generales
� Contador de programa
� Registro de estado
� Puntero de pila
� Identificador del proceso
� Proceso padre
� Grupo de proceso
� Prioridad
� Parámetros del planificador
� Señales
� Instante inicio de ejecución
� Tiempo de uso de CPU
� Tiempo hasta siguiente alarma
ARCOS @ UC3M67
est
ad
oId
.g
est
ión
� Process Identification (PID)
� Identificador de cara a los usuarios
� Número positivo de 16 bits (32767) dinámicamente asignado, reusado no de forma inmediata
� Address of process descriptor (APD)
� Identificación dentro del kernel
� Existe mecanismo PID -> APD (Ej.: hash)
Tabla de procesos
BCP
(1)
BCP
(2)
BCP
(3)
…
Alejandro Calderón Mateos
Dónde: información del proceso
ARCOS @ UC3M68
Tabla de procesos
Tabla de memora
Tabla de E/S
Tabla de ficheros
Tabla de procesos
BCP
(1)
BCP
(2)
BCP
(3)
…
� La información de cada proceso está en el BCP…
� Información fuera del BCP:
� Por razones de eficiencia
� Para compartir información entre procesos
� Ejemplos:
� Tabla de segmentos y páginas de memoria
� Tabla de punteros de posición de ficheros
� Lista de peticiones a dispositivos
Alejandro Calderón Mateos
Dónde: información del proceso
� Tabla de punteros de posición de ficheros:
� Describe la posición de lectura/escritura de los ficheros abiertos
� La compartición de estado del fichero entre procesos obliga a que sea externa al BCP
� El BCP contiene el índice del elemento de la tabla que contiene la información del fichero abierto: el i-nodo y la posición de lectura/escritura.
ARCOS @ UC3M69
Tabla deficheros
Tabla deficheros
Tabla deficheros
BCP 4 BCP 7 BCP 23
23 23
24456IDFF PP
0
544563 4563
34512 2345
63356 56
28 5566
53684 4
34512 10000
33678 2
0 0 01 1
1
12 2
2
23 3
3
34 4
4
4
fd
0
fd fd
Sistemas operativos: una visión aplicada
Alejandro Calderón Mateos
Información del proceso
� Gestión de proceso
� Registros generales
� Contador de programa
� Registro de estado
� Puntero de pila
� Identificador del proceso
� Proceso padre
� Grupo de proceso
� Prioridad
� Parámetros del planificador
� Señales
� Instante inicio de ejecución
� Tiempo de uso de CPU
� Tiempo hasta siguiente alarma
ARCOS @ UC3M70
� Gestión de memoria
� Puntero al segmento de código
� Puntero al segmento de datos
� Puntero al segmento de pila
� Gestión de ficheros
� Directorio raíz
� Directorio de trabajo
� Descriptores de ficheros
� Identificador de usuario
� Identificador de grupo
est
ad
oId
.g
est
ión
BCP
Alejandro Calderón Mateos
Información del procesoLinux
ARCOS @ UC3M71
task_struct (Process Descriptor)
tty_struct (communications)
signal_struct (signals)
fs_struct (directory name space)
files_struct (Open Files)
stack + thread_info (low_level scheduling)
mm_struct (memory)
sighand_struct (signal handers)
Understanding the Linux Kernel (O'Really)
http://www.eecs.harvard.edu/~margo/cs161/videos/sched.h.html
process hierarchy info
…
state (runability)
stack
pid hash table
scheduling info
debugging support
state (exit status)
pid and tgid
mm
credentialsfs
files
signal
sighand
Alejandro Calderón Mateos
Servicios del sistema operativoinicialización y finalización de procesos
ARCOS @ UC3M72
kernel
� …
� …
� …� …
� …� …
Alejandro Calderón Mateos
Creación de procesos
� Un proceso se crea:
� Durante el arranque del sistema� Hilos del kernel + primer proceso (Ej.: init, swapper, etc.)
� Cuando un proceso existe hace una llamada al sistema para crear otro: � Cuando el sistema operativo comienza un nuevo trabajo
� Cuando un usuario arranca un nuevo programa
� Cuando durante la ejecución de un programa se necesite
ARCOS @ UC3M73 CS 6560 Operating System Design (clase 4: procesos)
Alejandro Calderón Mateos
Finalización de procesos
� Un proceso termina:
� De forma voluntaria:� Finalización normal
� Finalización con error
� De forma involuntaria: � Finalizado por el sistema (Ej.: excepción, sin recursos necesarios)
� Finalizado por otro proceso (Ej.: a través de llamada al sistema)
� Finalizado por el usuario (Ej.: control-c por teclado)
ARCOS @ UC3M74 CS 6560 Operating System Design (clase 4: procesos)
� En Unix/Linux se usan señales como mecanismo� Se pueden capturar y tratar (salvo SIGKILL) para evitar finalizar involuntariamente
Alejandro Calderón Mateos
Creación y terminación de procesosLlamadas al sistema
� Linux
� Windows
ARCOS @ UC3M75 Sistemas operativos: una visión aplicada
clone()
exec() exit()
wait()
padre
hijo
CreateProcess()
ExitProcess()
GetExitCodeProcess()
padre
hijo
Alejandro Calderón Mateos
Creación de procesosLinux: clone
ARCOS @ UC3M76
Copiar PCB del padre
clone:
Duplicar mapa de M del
padre (incluyendo pilas)
Estado listo
Contexto end_fork()
PCB en cola de listos
Otras actualizaciones:
p.ej., limpiar señales,
eventos y mensajes
pendientes
Devuelve PID al
padre
Devuelve 0 al
hijo
“Clona al proceso padre
y da una nueva
identidad al hijo”
Obtener entrada libre en Tabla de Procesos
Apila PC inicial
*
Alejandro Calderón Mateos
Cambio de imagen de un procesoLinux: exec
ARCOS @ UC3M77
exec:
“Cambia la imagen de
memoria de un proceso
usando como
‘recipiente’ uno previo”
Liberar imagen de M
del proceso
Leer ejecutable
Crear nueva imagen
M � BCP
Cargar secciones
.texto y .datos
Crear pila inicial U
Crear pila S: dir.
principio programa
Inicio BCP: regs.;
PC dir SO: RETI
Otras acciones:
gestión de señales,
SETUID, etc
Alejandro Calderón Mateos
Terminación de procesosLinux: exit
ARCOS @ UC3M78
exit:
“Termina la ejecución
de un proceso y libera
los recursos”
Finaliza todos los hilos menos uno
Limpia operaciones asíncronas,
temporizadores y señales pendientes
Cierra todos los descriptores de archivo
Libera semáforos y cerrojos activos
Reasigna huérfanos a init
Estado proceso <- zombie
Trata de enviar señal SIGCLD al padre:
si responde:
freeproc(): libera P y MNO responde:
mantener señal
Alejandro Calderón Mateos
Creación de procesosWindows: CreateProcess
ARCOS @ UC3M79 http://flylib.com/books/en/4.491.1.52/1/
crea EPROCESScrea esp. M inicial proc.crea KPROCESScrea PEB
crea pila threadcrea contexto threadcrea thread y queda suspendido
Kernel32.dll: mensaje a Win32: manejadores; flags; PID padre
≈ activa el primer thread del proceso
[IW2K: 315]: 12 pasos
thread inicial: comienza ejecución en contexto nuevo proceso
construye: contexto y pila inicial del thread:-IRQL APC-- encola APC: loader, heap manager, etc--baja a IRQL 0: hace APC--...-- se pone en modo U
Alejandro Calderón Mateos
Multiprogramación (datos y funciones)
ARCOS @ UC3M80
kernel
� …
� …
� …� …
� …� …
Requisitos Información (en estructuras de datos) Funciones (internas, servicio y API)
Multiprogramación• Estado de ejecución• Contexto: registros de CPU…• Lista de procesos
• Int. hw/sw de dispositivos• Planificador• Crear/Destruir/Planificar proceso
Alejandro Calderón Mateos
Multiprogramación
ARCOS @ UC3M81
� Tener varias aplicaciones en memoria
� Si una aplicación se bloquea por E/S, entoncesse ejecuta otra (hasta que quede bloqueada)
� Cambio de contexto voluntario (C.C.V.)
Memoria
App 1
App 2
App 3
App1
App2
App3
Alejandro Calderón Mateos
Multiprogramación (datos)Estados de un proceso (c.c.v.)
ARCOS @ UC3M82
finalizaciónRunning
Ready Blockedfin E/Screación
� Tener varias aplicaciones en memoria
� Si una aplicación se bloquea por E/S, entoncesse ejecuta otra (hasta que quede bloqueada)
� Cambio de contexto voluntario (C.C.V.)
Memoria
App 1
App 2
App 3
App1
App2
App3
BCP5
Alejandro Calderón Mateos
Multiprogramación (datos)Estados de un proceso (c.c.v.)
ARCOS @ UC3M83
finalizaciónRunning
Ready Blockedfin E/Screación
� En ejecución: con CPU asignada
� Listo para ejecutar: no procesador disponible para él
� Bloqueado: esperando un evento
� Suspendido y listo: expulsado pero listo para ejecutar
� Suspendido y bloqueado: expulsado y esperando evento
BCP5
Alejandro Calderón Mateos
Multiprogramación (datos)Lista/Colas de procesos (c.c.v.)
ARCOS @ UC3M84
finalizaciónRunning
Ready Blockedfin E/Screación
� Tener varias aplicaciones en memoria
� Si una aplicación se bloquea por E/S, entoncesse ejecuta otra (hasta que quede bloqueada)
� Cambio de contexto voluntario (C.C.V.)
Memoria
App 1
App 2
App 3
App1
App2
App3
BCP1 BCP3 BCP4BCP7 BCP2
BCP5
Alejandro Calderón Mateos
Multiprogramación (datos)Lista/Colas de procesos (c.c.v.)
ARCOS @ UC3M85
finalizaciónRunning
Ready Blockedfin E/Screación
BCP1 BCP3 BCP4BCP7 BCP2
BCP5
� Cola de listos: procesos esperando a ejecutar en CPU
� Cola de bloqueados por recurso: procesos a la espera de finalizar una petición bloqueante al recurso asociado
o Un proceso solo puede estar en una cola (como mucho)
Alejandro Calderón Mateos
Implementación de las colas de procesos
ARCOS @ UC3M86
Estado del proceso
Límites de memoria
Lista de ficheros abiertos
Registros
. . .
Tabla de procesos
Proceso 0
Estado del proceso
Límites de memoria
Lista de ficheros abiertos
Registros
. . .
Estado del proceso
Límites de memoria
Lista de ficheros abiertos
Registros
. . .
…
Proceso 1 Proceso n
cola
cabezaCola de listos
cola
cabezaCola de …
� Cola de listos: procesos esperando a ejecutar en CPU
� Cola de bloqueados por recurso: procesos a la espera de finalizar una petición bloqueante al recurso asociado
o Un proceso solo puede estar en una cola (como mucho)
Alejandro Calderón Mateos
Multiprogramación (datos)Contexto de un proceso
ARCOS @ UC3M87
finalizaciónRunning
Ready Blockedfin E/Screación
� Tener varias aplicaciones en memoria
� Si una aplicación se bloquea por E/S, entoncesse ejecuta otra (hasta que quede bloqueada)
� Cambio de contexto voluntario (C.C.V.)
Memoria
App 1
App 2
App 3
App1
App2
App3
BCP1 BCP3 BCP4BCP7 BCP2
Alejandro Calderón Mateos
Multiprogramación (datos)Contexto de un proceso
ARCOS @ UC3M88
finalizaciónRunning
Ready Blockedfin E/Screación
BCP7 BCP2
� Registros generales: PC, RE, etc.
� Registros específicos: Registros de coma flotante, etc.
� Referencias a recursos: puntero a código, datos, etc.
BCP1 BCP3 BCP4
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M89
proceso P0 proceso P1sistema operativo
listo
ejecutando
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M90
proceso P0 proceso P1sistema operativo
listo
ejecutando
llamada bloqueante1
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M91
proceso P0 proceso P1sistema operativo
listo
ejecutando
salvar estado en el BCP0
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M92
proceso P0 proceso P1sistema operativo
listo
ejecutando
salvar estado en el BCP0
bloqueado
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M93
proceso P0 proceso P1sistema operativo
listo
ejecutando
salvar estado en el BCP0
cargar estado en el BCP1
bloqueado
ejecutando
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M94
proceso P0 proceso P1sistema operativo
listo
ejecutando
salvar estado en el BCP0
cargar estado en el BCP1
listo
bloqueado
interrupción2ejecutando
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M95
proceso P0 proceso P1sistema operativo
listo
ejecutando
salvar estado en el BCP0
cargar estado en el BCP1
listo
bloqueado
3 llamada bloqueante (petición de lectura a disco, esperar en
una pipe, etc.)
ejecutando
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M96
proceso P0 proceso P1sistema operativo
listo
ejecutando
listo
salvar estado en el BCP0
cargar estado en el BCP1
salvar estado en el BCP1
cargar estado en el BCP0
bloqueado
ejecutando
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M97
proceso P0 proceso P1sistema operativo
listo
ejecutando
ejecutando
listo
salvar estado en el BCP0
cargar estado en el BCP1
salvar estado en el BCP1
cargar estado en el BCP0
bloqueado
bloqueado
ejecutando
Alejandro Calderón Mateos
Multiprogramación: ejemplo de ejecución
ARCOS @ UC3M98
proceso P0 proceso P1sistema operativo
listo
ejecutando
ejecutando
listo
salvar estado en el BCP0
cargar estado en el BCP1
salvar estado en el BCP1
cargar estado en el BCP0
bloqueado
bloqueado
ejecutando
1
2
3
llamada bloqueante
interrupción
llamada bloqueante
Alejandro Calderón Mateos
Teclado_LeerTecla()
• Si (no hay tecla)• procesoActual->estado = BLOQUEADO;• Insertar(Teclado_Procesos, procesoActual);• proceso = procesoActual;
• procesoActual = planificador();• procesoActual->estado = EJECUCION;
• cambio_contexto( &(proceso->contexto), &(procesoActual->contexto));
• return extraer(Teclado_Teclas) ;
Pseudocódigo de ejemplo (P0)
ARCOS @ UC3M99
salvar estado en BCP0
cargar estado en BCP1
Running
Blocked
BCP7 BCP2
BCP1 BCP3
planificador()
• return extraer(CPU_Listo);
1
Alejandro Calderón Mateos
Teclado_Interrupción_Software ()
• proceso = primero (Teclado_Procesos);• SI (proceso != NULL)
• eliminar (Teclado_Procesos);• proceso->estado = LISTO;• insertar (CPU_Listos, proceso);
• return ok;
Pseudocódigo de ejemplo (P1)
ARCOS @ UC3M100
BlockedReadyfin E/S
BCP7 BCP2
Teclado_Interrupción_Hardware ()
• T = in (TECLADO_HW_ID);• proceso = insertar (T, Teclado_Teclas);• Insertar (Teclado_interrupción_software); • Activar_Interrupción_Software();
2
Alejandro Calderón Mateos
Teclado_Interrupción_Software ()
• proceso = primero (Teclado_Procesos);• SI (proceso != NULL)
• eliminar (Teclado_Procesos);• proceso->estado = LISTO;• insertar (CPU_Listos, proceso);
• return ok;
Pseudocódigo de ejemplo (P1)
ARCOS @ UC3M101
BlockedReadyfin E/S
BCP7 BCP2
Teclado_Interrupción_Hardware ()
• T = in (TECLADO_HW_ID);• proceso = insertar (T, Teclado_Teclas);• Insertar (Teclado_interrupción_software); • Activar_Interrupción_Software();
• Un proceso solo puede estar en una cola (como mucho):[correcto] eliminar + insertar
[incorrecto] insertar + eliminar
2
Alejandro Calderón Mateos
Teclado_LeerBloqueDisco()
• Si (no hay bloque en caché)• procesoActual->estado = BLOQUEADO;• Insertar(Disco_Procesos, procesoActual);• proceso = procesoActual;
• procesoActual = planificador();• procesoActual->estado = EJECUCION;
• cambio_contexto( &(proceso->contexto), &(procesoActual->contexto));
• return extraer(Disco_caché, bloque) ;
Pseudocódigo de ejemplo (P1)
ARCOS @ UC3M102
salvar estado en BCP1
cargar estado en BCP0
Running
Blocked
BCP7 BCP2
BCP1 BCP3
planificador()
• return extraer(CPU_Listo);
3
Alejandro Calderón Mateos
Teclado_LeerTecla()
• Si (no hay tecla)• procesoActual->estado = BLOQUEADO;• Insertar(Teclado_Procesos, procesoActual);• proceso = procesoActual;
• procesoActual = planificador();• procesoActual->estado = EJECUCION;
• cambio_contexto( &(proceso->contexto), &(procesoActual->contexto));
• return extraer(Teclado_Teclas) ;
Pseudocódigo de ejemplo (P0)
ARCOS @ UC3M103
3
Alejandro Calderón Mateos
Planificador y activador
� Planificador: Selecciona el proceso a ser ejecutado entre los que están listos para ejecutar
� Activador: Da control al proceso que elplanificador ha seleccionado(cambio de contexto - restaurar)
ARCOS @ UC3M104
finalizaciónRunning
Ready Blockedfin E/S
Ready & Suspend
Blocked & Blocked & Suspend
creación
cola
cabeza
registros
BCP7
…
registros
BCP2
…
Alejandro Calderón Mateos
Teclado_LeerTecla()
• Si (no hay tecla)• procesoActual->estado = BLOQUEADO;• Insertar(Teclado_Procesos, procesoActual);• proceso = procesoActual;
• procesoActual = planificador ();• procesoActual->estado = EJECUCION;• activador ( &(proceso->contexto),
&(procesoActual->contexto));
• return extraer(Teclado_Teclas) ;
Planificador y activador
ARCOS @ UC3M105
planificador ()
• return extraer(CPU_Listo);
Alejandro Calderón Mateos
Colas/Listas de procesosLinux
ARCOS @ UC3M106
"sched.c"
struct rq runqueues
"current.h"
task_struct *current
…
"wait.h"
DEFINE_WAIT(wq1)
…
"sched.h"
task_struct init_task…
Alejandro Calderón Mateos
Colas/Listas de procesosLinux
ARCOS @ UC3M107
runqueueskernel/sched.c
struct rq
current
…
init_tasksched.h
task_struct…
sched.h
task_struct
a. atomic_t is_blocking_mode = ATOMIC_INIT(0);DECLARE_WAIT_QUEUE_HEAD(dso_wq1);
b. atomic_set(&is_blocking_mode, 0);wait_event_interruptible(dso_wq1,
(atomic_read(&is_blocking_mode) == 1));
c. atomic_set(&is_blocking_mode, 1);wake_up_interruptible(&dso_wq1);
"wait.h"
DEFINE_WAIT(wq1)
…
Alejandro Calderón Mateos
Colas/Listas de procesosLinux
ARCOS @ UC3M108
runqueueskernel/sched.c
struct rq
current
…
init_tasksched.h
task_struct…
sched.h
task_struct
a. atomic_t is_blocking_mode = ATOMIC_INIT(0);DECLARE_WAIT_QUEUE_HEAD(dso_wq1);
b. atomic_set(&is_blocking_mode, 0);wait_event_interruptible(dso_wq1,
(atomic_read(&is_blocking_mode) == 1));
c. atomic_set(&is_blocking_mode, 1);wake_up_interruptible(&dso_wq1);
• DEFINE_WAIT, DECLARE_WAIT_QUEUE_HEAD(wq)• wq->flags &= ~WQ_FLAG_EXCLUSIVE
wq->flags |= WQ_FLAG_EXCLUSIVE
"wait.h"
DEFINE_WAIT(wq1)
…
wake_up, wake_up_nr, wake_up_all, wake_up_interruptible, wake_up_interruptible_nr, wake_up_interruptible_all, wake_up_interruptible_sync, wake_up_locked(queue)
wait_event, wait_event_interruptible (wq, condition)wait_event_timeout, wait_event_interruptible_timeout (wq, condition, timeout)
Alejandro Calderón Mateos
Visión lógica simplificadaLinux
109 ARCOS @ UC3M
Periférico
driver
mplayer
/dev/fb0
vfs
Alejandro Calderón Mateos
Contenidos
110
� Introducción
� Periféricos
� Organización de los drivers
� Procesos
� Estructura de un driver
� Ejemplos de diseño
� Reloj: temporización y C.C.I.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
drivers
Alejandro Calderón Mateos
Organización básica de un driver/s.a.drivers basados en módulos del kernel
� No todos los drivers/ss.aa. son necesarios en todo momento:
� Hay dispositivos que se conectan/desconectan sin apagar el ordenador (hot-plug)
� Hay dos métodos (combinables) para la selección de drivers/ss.aa. a usar:
� Elegirlos al compilar el kernel.
� En el arranque del sistema operativo se crean los drivers/ss.aa. elegidos.
� Elegirlos mientras el kernel está ejecutando (enlace dinámico).
� Se crean en algún punto de la ejecución del sistema operativo.
111
Driver de tipo (1)
Servicio ampliado (X)
Controladordispositivo (1)
Controladordispositivo (n)
…
Interfaz del Sistema Operativo
ARCOS @ UC3M
Alejandro Calderón Mateos
Módulos para ampliar el kernel
� Los módulos se utilizan no solo para los drivers de los dispositivos, actualmente también se utilizan para añadir otro tipos de funcionalidad:
� Sistemas de ficheros, protocolos de red, llamadas al sistema extras, etc.
112
Sistema de ficheros
DriverDriver
kernel
……
ARCOS @ UC3M
Alejandro Calderón Mateos
Organización básica de un driver/s.a.partes internas de un módulo driver
113
Driver de tipo (1)
Servicio ampliado (X)
Controladordispositivo (1)
Controladordispositivo (n)
…
Interfaz del Sistema Operativo
/* modulo_teclado.c (Javier Fernández Muñoz) */
#include <string.h>#include <stdlib.h>#include "minikernel.h"
/* Tipo con atributos específicos del dispositivo de teclado */
typedef struct {TipoBufferCaracteres bufferCaracteres;TipoListaBCP listaProcesosBloqueados;
} TipoDatosPropiosDispositivo_teclado;
/* Descriptor de fichero de teclado */int cerrarFichero_teclado (int descFichero) ;int abrirFichero_teclado (int descFichero, char *nombr e, int flags) ;int leerFichero_teclado (int descFichero, char *buffer, int tamanyo) ;
/* Dispositivo de teclado */int interrupcionHW_teclado (int descDispositivo) ;void interrupcionSW_teclado (int descDispositivo) ; int peticionCaracter_teclado (int descDispositivo,
char *caracter, int operacion) ;
/* Cargar y descarga de módulos */int cargarModulo_teclado () ;int crearDispositivo_teclado (int descDriver,
char *nombreDispositivo, int hardwareID) ;int destruirDriver_teclado (int descDriver) ;int crearDescFicheroDispositivo_teclado (int descDispo sitivo,
TipoTablaDescFicheros tablaDescFicheros) ;int mostrarDispositivo_teclado (int descDispositivo,
char *buffer, int bytesLibres) ;
ARCOS @ UC3M
Alejandro Calderón Mateos
Organización básica de un driver/s.a.partes internas de un módulo driver
114
Interfaz del Sistema Operativo
Controladordispositivo (1)
Controladordispositivo (n)
…
Específico 1 Específico n…
carga
interfaz
carga
interfaz
/* modulo_teclado.c (Javier Fernández Muñoz) */
#include <string.h>#include <stdlib.h>#include "minikernel.h"
/* Tipo con atributos específicos del dispositivo de teclado */
typedef struct {TipoBufferCaracteres bufferCaracteres;TipoListaBCP listaProcesosBloqueados;
} TipoDatosPropiosDispositivo_teclado;
/* Descriptor de fichero de teclado */int cerrarFichero_teclado (int descFichero) ;int abrirFichero_teclado (int descFichero, char *nombr e, int flags) ;int leerFichero_teclado (int descFichero, char *buffer, int tamanyo) ;
/* Dispositivo de teclado */int interrupcionHW_teclado (int descDispositivo) ;void interrupcionSW_teclado (int descDispositivo) ; int peticionCaracter_teclado (int descDispositivo,
char *caracter, int operacion) ;
/* Cargar y descarga de módulos */int cargarModulo_teclado () ;int crearDispositivo_teclado (int descDriver,
char *nombreDispositivo, int hardwareID) ;int destruirDriver_teclado (int descDriver) ;int crearDescFicheroDispositivo_teclado (int descDispo sitivo,
TipoTablaDescFicheros tablaDescFicheros) ;int mostrarDispositivo_teclado (int descDispositivo,
char *buffer, int bytesLibres) ;
interfaz
específico X
carga
Driver de tipo (1)
Servicio ampliado (X)
ARCOS @ UC3M
Alejandro Calderón Mateos
Organización básica de un driver/s.a.partes internas de un módulo driver
1. Registro de driver
2. Interfaz para llamadas al sistema
3. Petición al controlador de dispositivo
4. Planificación de E/S en el driver
5. Inicialización y finalización del driver
115
Interfaz del Sistema Operativo
Controladordispositivo (1)
Controladordispositivo (n)
Driver de tipo (1)
Específico 1 Específico n…
carga
interfaz
Servicio ampliado (X)
carga
interfazinterfaz
21
34-5
interfaz
2
3
1
4-5
…
ARCOS @ UC3M
Alejandro Calderón Mateos
Organización básica1. registro de drivers
� Tabla con los drivers cargados:
� Funciones para registrar drivers.
� cargar el módulo asociado al driver.
� Funciones para borrar drivers.
� Tabla con dispositivos detectados:
� Funciones para registrar el dispositivo en el driver, y dar de alta sus estructuras/funciones particulares.
� Desde el driver se tiene acceso a la lista de dispositivos que maneja.
� Funciones para buscar y dar de baja un dispositivo.
116
Controladordispositivo (1)
Controladordispositivo (n)
Driver de tipo (1)
Específico 1 Específico n…
carga
interfaz
ARCOS @ UC3M
Alejandro Calderón Mateos
Estructuras principales de gestiónLinux
117 ARCOS @ UC3M
init_module()
cleanup_module()
open()
close()
read()
write()
ioctl()
request()
int_hw()
int_sw()
insmod
rmmod
Module Kernel core
register_capability()
unregister_capability()
printk()
…()
http://www.xml.com/ldd/chapter/book/ch02.html
Function call
Function pointer
Data pointer
fs
file
fd_array
f_op
files
files_struct
task_struct
files_operations
read
write
…
…
Alejandro Calderón Mateos
#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init (void) {
printk("<1> Test1 cargado…\n");return 0;
}
static void hello_exit (void){
printk("<1> Test1 descargado.\n");}
module_init (hello_init );module_exit (hello_exit );
Proceso de registroLinux
118
dso/test1.c
ARCOS @ UC3M
Alejandro Calderón Mateos
Proceso de registroLinux
119
obj-m := test1.o
dso/Makefile
ARCOS @ UC3M
make -C /usr/src/linux M=`pwd` modulesinsmod test1.kolsmoddmesgrmmod test1
Alejandro Calderón Mateos
Organización básica2. interfaz para llamadas al sistema
� Interfaz para llamadas al sistema:
• Conjunto de funciones que proporciona un driver para acceder al dispositivo.
� Características:
� Estandarización:
� Si un dispositivos hardware es válido para una tarea, el programa de usuario o servicio del SO que la realiza debe poder utilizarlo sin modificar su código.
� Uso de interfaces comunes y reducidas de llamadas al sistema:
� Crear una nueva llamada es más costoso que reutilizar llamadas ya existentes.
120
Controladordispositivo (1)
Controladordispositivo (n)
Driver de tipo (1)
Específico 1 Específico n…
carga
interfazinterfaz
ARCOS @ UC3M
Alejandro Calderón Mateos
Interfaz para llamadas al sistemaLinux
� Llamadas para establecer el acceso al dispositivo:
� Open (nombre, flags, modo)
� Close (descriptor)
� Llamadas para intercambiar datos con el dispositivo:
� Read (descriptor, buffer, tamaño)
� Write (descriptor, buffer, tamaño)
� Lseek (descriptor, desplazamiento, origen)
� Llamadas especificas del dispositivo:
� Ioctl (descriptor, num_operacion, puntero_parametros)
� Permite la ejecución de cualquier servicio con cualquier parámetros.
� Las operaciones debe hacerse públicas de alguna forma para que no haya conflictos entre distintos drivers.
121 ARCOS @ UC3M
Alejandro Calderón Mateos
Estructuras principales de gestiónLinux
122 ARCOS @ UC3M
init_module()
cleanup_module()
open()
close()
read()
write()
ioctl()
request()
int_hw()
int_sw()
insmod
rmmod
Module Kernel core
register_capability()
unregister_capability()
printk()
…()
http://www.xml.com/ldd/chapter/book/ch02.html
Function call
Function pointer
Data pointer
fs
file
fd_array
f_op
files
files_struct
task_struct
files_operations
read
write
…
…
Alejandro Calderón Mateos
#include <linux/init.h>#include <linux/module.h>
#include <linux/kernel.h> /* printk() */#include <linux/fs.h> /* everything... */#include <linux/errno.h> /* error codes */#include <linux/types.h> /* size_t */#include <linux/proc_fs.h>#include <linux/fcntl.h> /* O_ACCMODE */
#include <asm/uaccess.h> /* copy_from/to_user */
MODULE_LICENSE("Dual BSD/GPL");
Interfaz para llamadas al sistemaLinux
123
dso/test2.c
ARCOS @ UC3M
Alejandro Calderón Mateos
int test2_open (struct inode *inode, struct file *filp); int test2_release (struct inode *inode, struct file *filp); ssize_t test2_read (struct file *filp, char *buf, size_t count, loff_t *f_pos); ssize_t test2_write (struct file *filp, const char *buf, size_t count, loff_t *f_pos);
struct file_operations test2_fops = {open: test2_open ,release: test2_release, /* AKA close */read: test2_read ,write: test2_write
};
void test2_exit (void); int test2_init (void);
module_init (test2_init );module_exit (test2_exit );
Interfaz para llamadas al sistemaLinux
124
dso/test2.c
ARCOS @ UC3M
Alejandro Calderón Mateos
int test2_major = 60;
int test2_init (void) {int result;
result = register_chrdev (test2_major , ”test2", &test2_fops );if (result < 0) {
printk("<1> test2: error on register_chrdev\n”);return result;
}
printk("<1>test2: inserted…\n"); return 0;
}
void test2_exit (void) {unregister_chrdev (test2_major , ”test2");printk("<1> test2: removed. \n");
}
Interfaz para llamadas al sistemaLinux
125
dso/test2.c
ARCOS @ UC3M
Alejandro Calderón Mateos
int test2_open (struct inode *inode, struct file *filp) {
/* * Once the associate file is open, increment the usage count* Three column from the lsmod output*/
try_module_get (THIS_MODULE) ;return SUCCESS;
}
int test2_release (struct inode *inode, struct file *filp) {
/* * Decrement the usage count.*/
module_put (THIS_MODULE) ;return 0;
}
Interfaz para llamadas al sistemaLinux
126
dso/test2.c
ARCOS @ UC3M
Alejandro Calderón Mateos
char test2_buffer = ‘a’;
ssize_t test2_read (struct file *filp, char *buf, size_t count, loff_t *f_pos) {
if (*f_pos > 1024) {return 0;
}
copy_to_user (buf, &test2_buffer , 1);*f_pos+=1; return 1;
}
ssize_t test2_write ( struct file *filp, const char *buf, size_t count, loff_t *f_pos ) {
copy_from_user (&test2_buffer , buf,1);return 1;
}
Interfaz para llamadas al sistemaLinux
127
dso/test2.c
ARCOS @ UC3M
Alejandro Calderón Mateos
Interfaz para llamadas al sistemaLinux
128
obj-m := test1.o test2.o
dso/Makefile
ARCOS @ UC3M
make -C /usr/src/linux M=`pwd` modulesinsmod test2.kodmesg
mknod /dev/test2 c 60 0chmod 777 /dev/test2echo –n ‘b’ > /dev/test2cat /dev/test2
rm –fr /dev/test2rmmod test2 test2.o
echo/cat
/dev/test2
2
vfs
3
1
Alejandro Calderón Mateos
Interfaz para llamadas al sistemaLinux
� Llamadas para establecer el acceso al dispositivo:
� Open (nombre, flags, modo)
� Close (descriptor)
� Llamadas para intercambiar datos con el dispositivo:
� Read (descriptor, buffer, tamaño)
� Write (descriptor, buffer, tamaño)
� Lseek (descriptor, desplazamiento, origen)
� Llamadas especificas del dispositivo:
� Ioctl (descriptor, num_operacion, puntero_parametros)
� Permite la ejecución de cualquier servicio con cualquier parámetros.
� Las operaciones debe hacerse públicas de alguna forma para que no haya conflictos entre distintos drivers.
129
+ IreadIwriteWaitReady
http://www.ibm.com/developerworks/linux/library/l-async/ ARCOS @ UC3M
Alejandro Calderón Mateos
Interfaz para llamadas al sistemaResumen de los modos básicos de E/S en Linux
130http://www.ibm.com/developerworks/linux/library/l-async/
Blocking Non-blocking
Synchronous
Asynchronous
Read/write
I/O multiplexing(select/poll)
AIO
Read/write(O_NONBLOCK)
ARCOS @ UC3M
Alejandro Calderón Mateos
Interfaz para llamadas al sistemaResumen de los modos básicos de E/S en Linux
131http://www.ibm.com/developerworks/linux/library/l-async/
Síncrono(petición)
Asíncrono(petición)
NO-bloqueante(notificación)
Bloqueante(notificación)
ARCOS @ UC3M
Alejandro Calderón Mateos
Organización básica3. petición al controlador de dispositivo
� Requiere implementar hasta dos funciones:
� Función para solicitar la operación
� Solicitada por un servicio del S.O.
� Función para manejar la interrupción del dispositivo (al finalizar la operación)
� Se ejecuta al recibir la interrupción.
� Necesario adaptar al tipo de controlador hardware del dispositivo:� Dispositivos rápidos o dispositivos real-time
� D. con peticiones dependientes o independientes
� Dispositivos proactivos o reactivos
132
Controladordispositivo (1)
Controladordispositivo (n)
Driver de tipo (1)
Específico 1 Específico n…
carga
interfaz
ARCOS @ UC3M
Alejandro Calderón Mateos
Estructuras principales de gestiónLinux
133 ARCOS @ UC3M
init_module()
cleanup_module()
open()
close()
read()
write()
ioctl()
request()
int_hw()
int_sw()
insmod
rmmod
Module Kernel core
register_capability()
unregister_capability()
printk()
…()
http://free-electrons.com/doc/books/ldd3.pdf
Function call
Function pointer
Data pointer
fs
file
fd_array
f_op
files
files_struct
task_struct
files_operations
read
write
…
…
Alejandro Calderón Mateos
Módulo de E/Sresumen de las características fundamentales
134
� Unidad de transferencia� De bloques
� De caracteres
� Direccionamiento � Proyectados en memoria
� Mediante puertos
� Interacción computador-controlador� E/S programada o directa
� E/S por interrupciones
� E/S por DMA
ControlEstadoDatos
0x05010x05020x0503
Unidad de E/S
…
ARCOS @ UC3M
Alejandro Calderón Mateos
� E/S programada o directa
� E/S por interrupciones
� E/S por DMA
Interacción computador-controlador
135 ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S programada
136
Memoria
Bus
E/SE/SE/SE/S
ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S programada
137
petición: for (i=0; i<100;i++)
{
// pedir leer a partir de la posición 10
out(0x504,10) ;
out(0x500,0) ;
// bucle de espera
do {
in(0x508,&status) ; // ¿listo?
} while (0 == status) ;
// leer dato
in(0x50C,&(datos[i])) ;
}
Control 1Control 2Estado
0x05000x05040x0508
Unidad de E/S
Datos0x050C
� Información de control 1
� 0: leer
� 1: escribir
� Información de control 2
� Posición de lec./esc.
� Información de estado
� 0: dispositivo ocupado
� 1: dispositivo (dato) listo
� Datos
� Dato del dispositivo
ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S programada
138
out(0x504,10) ;
out(0x500,0) ;
for (i=0; i<100;i++) {
do {
in(0x508,&status) ;
} while (0 == status) ;
in(0x50C,&datos[i]) ;
}
k
// read(fichero,offset,100) ;…
P1
// read(fichero,offset,100) ;…
P1
ARCOS @ UC3M
Alejandro Calderón Mateos
� E/S programada o directa
� E/S por interrupciones
� E/S por DMA
Interacción computador-controlador
139 ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S por interrupciones
140
Memoria
Bus
INTE/SE/SE/SE/S
ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S por interrupciones
141
petición:
// lectura a partir de posición 10
p.neltos = 100; p.contador = 0;
out(0x504,10) ; // offset
out(0x500,0) ; // leer
// cambio de contexto voluntario (C.C.V.)
INT_05: in(0x508,&status) ; // leer estado
in(0x50C,&p.datos[p.contador]) ; // leer dato
if (p.contador < p.neltos) {
out(0x504,10+p.contador) ; // offset
out(0x500,0) ; // leer
p.contador++ ;
} else { // poner proceso peticionario a listo }
ret_int # restore registers & return
Control 1Control 2Estado
0x05000x05040x0508
Unidad de E/S
Datos0x050C
� Información de control 1
� 0: leer
� 1: escribir
� Información de control 2
� Posición de lec./esc.
� Información de estado
� 0: dispositivo ocupado
� 1: dispositivo (dato) listo
� Datos
� Dato del dispositivo
ARCOS @ UC3M
Alejandro Calderón Mateos
P2
EjemploE/S por interrupciones
142
// pedir datos (out)
// proceso peticionario a dormir
// ejecutar otro proceso listo
// read(fichero,offset,100) ;…
k
…P2
INT_05: // leer dato (in)
INT_05: // leer último dato
// peticionario a listo
k
k
// read(fichero,offset,100) ;…
P1
INT_05: // leer dato (in)k
P2
P1
…
ARCOS @ UC3M
Alejandro Calderón Mateos
� E/S programada o directa
� E/S por interrupciones
� E/S por DMA
Interacción computador-controlador
143 ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S por DMA
144
Memoria
Bus
INT
E/SE/Scon DMA
BUSACK
BUSRQ
Coordinación entre CPU y Módulos de E/S para acceder a memoria
ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S por DMA
145
Memoria
Bus
INT
E/SE/Scon DMA
BUSACK
BUSRQ
Cada dato transferido a memoria supone:• Pedir permiso para acceder a memoria (BUSRQ)• Esperar el permiso (BUSACK)• Transfiere a memoria• Desactiva petición de permiso (BUSRQ)
ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S por DMA
146
Memoria
Bus
INT
E/SE/Scon DMA
BUSACK
BUSRQ
Una vez transferido todos los datos:• Generar una interrupción (INT) para avisar a la CPU
ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S por DMA
147
petición:
// Programar la petición del bloque
out(0x500,0) ; // leer
out(0x500,datos) ; // dirección vector
out(0x500,100) ; // nº elementos
out(0x504,10) ; // posición lec./esc.
// Cambio de contexto voluntario (C.C.V.)
INT_05: // leer estado y datos
in(0x508, &status) ;
in(0x50C, &status) ;
// poner proceso peticionario a listo
ret_int # restore registers & return
Control 1Control 2Estado
0x05000x05040x0508
Unidad de E/S
Datos0x050C
� Información de control 1
� 0: leer
� 1: escribir
� Información de control 2
� Posición de lec./esc.
� Información de estado
� 0: dispositivo ocupado
� 1: dispositivo (dato) listo
� Datos
� Dato del dispositivo
ARCOS @ UC3M
Alejandro Calderón Mateos
EjemploE/S por DMA
148
// pedir datos (out)
// proceso peticionario a dormir
// ejecutar otro proceso listo
// read(fichero,offset,100) ;…
k
P1
…
P2
INT_05: // fin DMA
// peticionario a listo
k
// read(fichero,offset,100) ;…
P1
ARCOS @ UC3M
Alejandro Calderón Mateos
#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/workqueue.h>#include <linux/interrupt.h>
MODULE_LICENSE("Dual BSD/GPL");MODULE_DESCRIPTION("DSO Device Driver Demo");
struct wq1_work {
struct work_struct work ;unsigned char status ;
char scancode ;};
static struct workqueue_struct *wq1 ;
Comunicación con el controlador Linux
149
dso/test3.c
ARCOS @ UC3M
Alejandro Calderón Mateos
static void got_char (struct work_struct *work) {struct wq1_work *_w;
_w = container_of (work, struct wq1_work, work);printk (KERN_INFO ” test3: scan Code %x %s.\n”,
(int)(_w->scancode) & 0x7F, (_w->scancode) & 0x80 ? "Released" : "Pressed");}
irqreturn_t irq_handler (int irq, void *dev_id) {static int initialised = 0;static struct wq1_work task;
task.status = inb (0x64);task.scancode = inb (0x60);if (initialised == 0)
{ INIT_WORK (&(task.work), got_char); }else { PREPARE_WORK (&(task.work), got_char); }initialised = 1;queue_work (wq1 , &(task.work));return IRQ_HANDLED;
}
Comunicación con el controlador Linux
150
dso/test3.c
ARCOS @ UC3M
Alejandro Calderón Mateos
int test3_init (void) {printk (KERN_INFO “ test3: inserting the new irq-hander…\n"); wq1 = create_workqueue ("WQsched.c");return request_irq (1,
irq_handler, IRQF_SHARED, "test3",(void *)(irq_handler));
}
void test3_exit (void) {printk (KERN_INFO “ test3: removing the new irq-hander…\n");free_irq (1, (void *)(irq_handler));
}
module_init (test3_init );module_exit (test3_exit );
Comunicación con el controlador Linux
151
dso/test3.c
ARCOS @ UC3M
Alejandro Calderón Mateos
Comunicación con el controlador Linux
152
obj-m := test1.o test2.o test3.o
dso/Makefile
ARCOS @ UC3M
make -C /usr/src/linux M=`pwd` modulestail –f /var/log/syslog &insmod test3.kolsrmmod test3
Alejandro Calderón Mateos
Organización básica4. planificación de E/S en el driver
� Cuando hay varias peticiones a un dispositivo, estas se mantienen en una cola de peticiones. El driver suele disponer de un planificador de E/S que permite planificar las peticiones de manera que se minimice el tiempo de atención a las mismas
� Los bloques de disco se planifican para minimizar el tiempo gastado en mover las cabezas del disco.
� El planificador de E/S suele realizar, al menos, dos operaciones básicas:
� Ordenación: las peticiones se insertan en una lista según algún criterio
� Fusión: dos peticiones pequeñas consecutivas se transforman en una única petición.
153
Controladordispositivo (1)
Controladordispositivo (n)
Driver de tipo (1)
Específico 1 Específico n…
carga
interfaz
ARCOS @ UC3M
Alejandro Calderón Mateos
Planificación de E/S en el driver
Enviar mandatosal controlador
Operacionessobre datos
Contestación ala petición
Traducir a formatodel controlador
Prepararrespuestade error
Extraer peticiónE/S de la lista
Peticiones de E/S del dispositivo
Bloqueo
Error
Esperarinterrupción
Programación delcontrolador
Si
Si
No
No
Interrupción
Leer registrosestado delcontrolador
154 Sistemas operativos: una visión aplicada ARCOS @ UC3M
Alejandro Calderón Mateos
Flujo de una operación de E/S AplicaciónSubsistema
o DLL
Manejadorde
dispositivo
Manejador deinterrupción
Gestor dearchivos
Gestor debloques
Gestor decache
Servicios
Controlador
Dispositivo(disco)
Copia en elsistema operativo
Copia enmemoria delusuarioModo usuario
Modo núcleo
Proceso
de usuario
SW de E/S
independiente
de dispositivo
SW de E/S
independiente
de dispositivo
SW de E/S
dependiente
de dispositivo
Hardware
Software
Bloque deldispositivo
Copia en elcontrolador
155 Sistemas operativos: una visión aplicada ARCOS @ UC3M
Alejandro Calderón Mateos
Organización básica5. inicialización y finalización del driver
� Cuando se está utilizando un driver necesita una serie de recursos asociados (IRQ, buffer de memoria, etc.)
� Para controlar la asignación de recursos se puede seguir el siguiente esquema:
� Un contador mantiene el número de procesos que van a trabajar con un dispositivo.
� Cada vez que un nuevo proceso opera con un dispositivo se incrementa el contador, y cuando deja de operar se decrementa.
� Cuando el contador pasa a 1 se realiza la asignación de recursos al driver.
� Cuando el contador pasa a 0 se libera todos los recursos.
156
Controladordispositivo (1)
Controladordispositivo (n)
Driver de tipo (1)
Específico 1 Específico n…
carga
interfaz
ARCOS @ UC3M
Alejandro Calderón Mateos
Organización básicaresumen
1. Interfaz para llamadas al sistema
2. Petición al controlador de dispositivo
3. Registro de drivers
4. Planificación de E/S en el driver
5. Inicialización y finalización del driver
157
Interfaz del Sistema Operativo
Controladordispositivo (1)
Controladordispositivo (n)
Driver de tipo (1)
Específico 1 Específico n…
carga
interfaz
Servicio ampliado (X)
carga
interfazinterfaz
13
24-5
interfaz
1
2
3
4-5
…
ARCOS @ UC3M
Alejandro Calderón Mateos
Windows 2000rutinas en un driver
Inside Microsoft Windows 2000 (Microsoft Programming Series) – 539 a 541
Start I/O routine
Interruptservice routine
DPC routine
I/Osystem
Initializationroutine
Dispatchroutines
Add-deviceroutine
ARCOS @ UC3M
Alejandro Calderón Mateos
Estructuras de datosLinux
159 http://blog.csdn.net/vhghhd/article/details/6853550 ARCOS @ UC3M
Alejandro Calderón Mateos
Contenidos
160
� Introducción
� Periféricos
� Organización de los drivers
� Procesos
� Estructura de un driver
� Ejemplos de diseño
� Reloj: temporización y C.C.I.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
drivers
Alejandro Calderón Mateos
Organización básicaEjemplos con distintos tipos de dispositivos
� Dispositivo rápido
� Dispositivo lento
� Peticiones independientes
� Peticiones compartidas
161 ARCOS @ UC3M
Alejandro Calderón Mateos
� Petición de datos:
� Escribir los datos en un buffer
� Manejador de interrupción del dispositivo:
Petición al controlador de dispositivorápido (salida)
162
Pantalla
� Dispositivo rápido
ARCOS @ UC3MAlejandro Calderón Mateos
Alejandro Calderón Mateos
� Petición de datos:
� Manejador de interrupción del dispositivo:
� Ticks = Ticks + 1
Petición al controlador de dispositivorápido (entrada)
163
Reloj
� Dispositivo rápido
ARCOS @ UC3MAlejandro Calderón Mateos
Alejandro Calderón Mateos
� Petición de datos:
� Crear una petición
� Si no imprimiendo datos
� Poner a imprimir petición
� Dormir + ejecutar otro proceso
� Manejador de interrupción del dispositivo:
� Despertar proceso
� Si hay datos a imprimir
� Poner a imprimir siguiente petición
Petición al controlador de dispositivolento / independiente (salida)
164
Impresora
� Dispositivo lento
� Peticiones independientes
peticiones
procesos bloqueados(1 por petición)
ARCOS @ UC3MAlejandro Calderón Mateos
Alejandro Calderón Mateos
� Petición de datos:
� Crear una petición
� Si scanner libre
� Poner a escanear petición
� Dormir + Ejecutar otro proceso
� Leer los datos de un buffer
� Manejador de interrupción del dispositivo:
� Insertar datos en buffer
� Despertar proceso
� Si hay más peticiones
� Poner a escanear siguiente petición
Petición al controlador de dispositivolento / independiente (entrada)
165
Scanner
� Dispositivo lento
� Peticiones independientes
peticiones
procesos bloqueados(1 por petición)
ARCOS @ UC3MAlejandro Calderón Mateos
Alejandro Calderón Mateos
� Petición de datos:
� Si NO hay datos
� Dormir + Ejecutar otro proceso
� Leer los datos de un buffer
� Manejador de interrupción del dispositivo:
� Insertar datos en buffer
� Si hay procesos dormidos
� Despertar al primero
Petición al controlador de dispositivolento / independiente (entrada)
166
Teclado
� Dispositivo lento
� Peticiones independientes
datos
procesos bloqueados(si no hay datos)
ARCOS @ UC3MAlejandro Calderón Mateos
Alejandro Calderón Mateos
Petición al controlador de dispositivolento / compartidas (salida)
� Petición de datos:
� Si otro proceso realizó la petición
� Actualizar los datos
� Dormir por esa petición
� En caso contrario
� Construir una nueva petición
� Encolar la petición
� Dormir en esa petición
� Manejador de interrupción del dispositivo:
� Despertar a todos los procesos dormidos por la petición completada
� Si hay peticiones pendientes
� Ir pidiendo la siguiente petición
167
peticiones
Disco
� Dispositivo lento
� Peticiones compartidas
procesos bloqueados(n por petición)
ARCOS @ UC3MAlejandro Calderón Mateos
Alejandro Calderón Mateos
Petición al controlador de dispositivolento / compartidas (entrada)
� Petición de datos:
� Si otro proceso realizó la petición
� Actualizar los datos
� Dormir por esa petición
� En caso contrario
� Construir una nueva petición
� Encolar la petición
� Dormir en esa petición
� Copiar los datos leídos
� Manejador de interrupción del dispositivo:
� Insertar datos en buffer
� Despertar a todos los procesos dormidos por la petición completada
� Si hay peticiones pendientes
� Ir pidiendo la siguiente petición
168
peticiones
CDROM
� Dispositivo lento
� Peticiones compartidas
procesos bloqueados(n por petición)
ARCOS @ UC3MAlejandro Calderón Mateos
Alejandro Calderón Mateos
Contenidos
169
� Introducción
� Periféricos
� Organización de los drivers
� Procesos
� Estructura de un driver
� Ejemplos de diseño
� Reloj: temporización y C.C.I.
ARCOS @ UC3M
Periféricos
kernel
Servicios
ShellProcesos
Usuarios
Sistemaoperativo
Har
dwar
eS
oftw
are
drivers
Alejandro Calderón Mateos
El reloj: tratamiento mínimo
ARCOS @ UC3M170
proceso P0 sistema operativo
ejecutando
interrupción o llamada al sistema
interrupción o llamada al sistema
interrupción o llamada al sistema
Reloj_Interrupción_Hardware ()
• Ticks++
Reloj_Interrupción_Hardware ()
• Ticks++
Reloj_Interrupción_Hardware ()
• Ticks++
Alejandro Calderón Mateos
TemporizaciónLinux
ARCOS @ UC3M171
• void process_timeout (unsigned long __data) {wake_up_process((task_t *)__data);
}
• timespec t;unsigned long expire;struct timer_list timer;
Understanding the Linux kernel (250)
"timer.h"
timer_list
…
…
Alejandro Calderón Mateos
TemporizaciónLinux
ARCOS @ UC3M172
"timer.h"
timer_list
…
• expire = timespec_to_jiffies(&t) + 1 + jiffies;init_timer(&timer);timer.expires = expire;timer.data = (unsigned long) current;timer.function = process_timeout;add_timer(&timer);current->state = TASK_INTERRUPTIBLE;schedule(); /* ejecutar mientras otro proceso */del_singleshot_timer_sync(&timer);
Understanding the Linux kernel (250)
…
Alejandro Calderón Mateos
Curiosidad: Timer Coalescing en MacOS 10.9.x
ARCOS @ UC3M173http://appleinsider.com/articles/13/06/18/os-x-mavericks-new-app-nap-timer-coalescing-features-target-battery-efficiency
Alejandro Calderón Mateos
Curiosidad: Timer Coalescing en MacOS 10.9.x
ARCOS @ UC3M174 http://www.apple.com/osx/advanced-technologies/
SIN Timer Coalescing
Alejandro Calderón Mateos
Curiosidad: Timer Coalescing en MacOS 10.9.x
ARCOS @ UC3M175 http://www.apple.com/osx/advanced-technologies/
CON Timer Coalescing
Alejandro Calderón Mateos
Multitarea (datos y funciones)
ARCOS @ UC3M176
Requisitos Información (en estructuras de datos) Funciones (internas, servicio y API)
Recursos• Zonas de memoria (código, datos y pila)• Archivos abiertos• Señales activas
• Diversas funciones internas• Diversas funciones de servicio para
memoria, ficheros, etc.
Multiprogramación• Estado de ejecución• Contexto: registros de CPU…• Lista de procesos
• Int. hw/sw de dispositivos• Planificador• Crear/Destruir/Planificar proceso
o Protección / Compartición
• Paso de mensajes• Cola de mensajes de recepción
• Memoria compartida• Zonas, locks y conditions
• Envío/Recepción mensaje y gestiónde la cola de mensaje
• API concurrencia y gestión de estructuras de datos
o Jerarquía de procesos
• Relación de parentesco• Conjuntos de procesos relacionados• Procesos de una misma sesión
• Clonar/Cambiar imagen de proceso• Asociar procesos e indicar proceso
representante
Multitarea• Quantum restante• Prioridad
• Int. hw/sw de reloj• Planificador• Crear/Destruir/Planificar proceso
Multiproceso • Afinidad• Int. hw/sw de reloj• Planificador• Crear/Destruir/Planificar proceso
Alejandro Calderón Mateos
Estados de un proceso
ARCOS @ UC3M177
finalizaciónRunning
Ready Blockedfin E/Screación
finalizaciónRunning
Ready Blockedfin E/Screación
C.C.V.
C.C.V. + C.C.I.
Alejandro Calderón Mateos
El reloj: tratamiento con c.c.v. + c.c.i.
ARCOS @ UC3M178
proceso P0 sistema operativo
ejecutando
interrupción o llamada al sistema
interrupción o llamada al sistema
interrupción o llamada al sistema
salvar estado en el BCP0
cargar estado en el BCP1
listo
proceso P1
ejecutando
listo
interrupción o llamada al sistema
Alejandro Calderón Mateos
Reloj_Planificar_Rodaja ()
• pActual->rodaja = pActual->rodaja - 1;• SI (pActual->rodaja == 0)
• pActual->estado = LISTO;• insertar (CPU_Listos, pActual);• proceso = pActual;
• pActual = planificador();• pActual->estado = EJECUCIÓN;• cambio_contexto(
&(proceso->contexto), &(pActual->contexto));
• return ok;
Pseudocódigo de ejemplo (P0)
ARCOS @ UC3M179
Running
Ready
BCP7 BCP2
Reloj_Interrupción_Hardware ()
• Ticks++;• Insertar (Reloj_Planificar_Rodaja); • Activar_Interrupción_Software();
BCP2 BCP5
salvar estado en BCP0
cargar estado en BCP1
planificador()
• return extraer(CPU_Listo);
Alejandro Calderón Mateos
Estados de un procesoLinux
ARCOS @ UC3M180
Ready
Stopped
Executing ZombieScheduling
Signal
Termination
Signal
Creation
Uninterruptible
Event Event
Interruptible
Alejandro Calderón Mateos
Multiproceso
ARCOS @ UC3M181
Requisitos Información (en estructuras de datos) Funciones (internas, servicio y API)
Recursos• Zonas de memoria (código, datos y pila)• Archivos abiertos• Señales activas
• Diversas funciones internas• Diversas funciones de servicio para
memoria, ficheros, etc.
Multiprogramación• Estado de ejecución• Contexto: registros de CPU…• Lista de procesos
• Int. hw/sw de dispositivos• Planificador• Crear/Destruir/Planificar proceso
o Protección / Compartición
• Paso de mensajes• Cola de mensajes de recepción
• Memoria compartida• Zonas, locks y conditions
• Envío/Recepción mensaje y gestiónde la cola de mensaje
• API concurrencia y gestión de estructuras de datos
o Jerarquía de procesos
• Relación de parentesco• Conjuntos de procesos relacionados• Procesos de una misma sesión
• Clonar/Cambiar imagen de proceso• Asociar procesos e indicar proceso
representante
Multitarea• Quantum restante• Prioridad
• Int. hw/sw de reloj• Planificador• Crear/Destruir/Planificar proceso
Multiproceso • Afinidad• Int. hw/sw de reloj• Planificador• Crear/Destruir/Planificar proceso
Alejandro Calderón Mateos
Multiproceso
� Afinidad:� Los procesos tienen ‘afinidad’ (affinity) a una CPU: «mejor volver a la misma CPU»
� Simetría:� Los procesos se ejecutan en la CPU que tienen unas capacidades específicas
ARCOS @ UC3M182
Alejandro Calderón Mateos
Planificación de procesosniveles de planificación
� A largo plazo
� añadir procesos a ejecutar
� Invocado con baja frecuencia
� puede ser algo lento
� A medio plazo
� añadir procesos a RAM
� A corto plazo
� qué proceso tiene la UCP
� Invocado frecuentemente
� rápido
ARCOS @ UC3M183
finalizaciónRunning
Ready Blockedfin E/S
Ready & Suspend
Blocked & Suspend
creación
Planificación a medio plazo
Planificación a corto plazo
Planificación a largo plazo
Sistemas operativos: una visión aplicada
Alejandro Calderón Mateos
Planificación de procesosobjetivos de los algoritmos de planificación (según sistema)
� Todos los sistemas:
� Equitativo – ofrece a cada proceso una parte equitativa de la CPU
� Expeditivo – cumplimiento de la política emprendida de reparto
� Balanceado – mantener todas las partes del sistema ocupadas
� Sistemas batch:
� Productividad – maximizar el número de trabajos por hora
� Tiempo de espera – minimizar el tiempo entre emisión y terminación del trabajo
� Uso de CPU – mantener la CPU ocupada todo el tiempo
� Sistemas Interactivos:
� Tiempo de respuesta – responder a las peticiones lo más rápido posible
� Ajustado – satisfacer las expectaciones de los usuarios
� Sistemas de tiempo real:
� Cumplimiento de plazos – evitar la pérdida de datos
� Predecible – evitar la degradación de calidad en sistemas multimedia
ARCOS @ UC3M184
Alejandro Calderón Mateos
Planificación de procesoscaracterísticas de los algoritmos de planificación (1/2)
� Preemption:
� Sin expulsión:
� El proceso conserva la CPU mientras desee.
� Cambios de contexto voluntarios (C.C.V.)
� [v/i] Un proceso puede bloquear al resto pero solución fácil a la compartición de recursos
� Windows 3.1, Windows 95 (16 bits), NetWare, MacOS 9.x.
� Con expulsión:
� Exige un reloj que interrumpe periódicamente:
� cuando pasa el quantum de un proceso se cambia a otro
� (Se añade) Cambios de contexto involuntarios (C.C.I.)
� [v/i] Mejora la interactividad pero precisa de mecanismos para condiciones de carrera
� AmigaOS (1985), Windows NT-XP-Vista-7, Linux, BSD, MacOS X
ARCOS @ UC3M185
Alejandro Calderón Mateos
Planificación de procesoscaracterísticas de los algoritmos de planificación (2/2)
� Clasificación de elementos en las colas:
� Por prioridad
� Por tipo
� CPU-bound (más ‘rachas’ –burst– de tiempo usando CPU)
� IO-bound (más ‘rachas’ de tiempo esperando E/S)
� CPU-aware:
� Afinidad:
� Los procesos tienen ‘afinidad’ (affinity) a una CPU: «mejor volver a la misma CPU»
� Simetría:
� Los procesos se ejecutan en la CPU que tienen unas capacidades específicas a dicha CPU
ARCOS @ UC3M186
A B C D
Alejandro Calderón Mateos
Planificación de procesosprincipales algoritmos de planificación (1/3)
� Cíclico o Round Robin:
� Asignación rotatoria del procesador
� Se asigna un tiempo máximo de procesador (rodaja o quantum)
� Equitativo pero interactivo:
� Mejor por UID que por proceso
� En Linux:
� Aparición en 11/2010 de un parche para el kernel que automáticamente crea un grupo de tareas por TTY para mejorar la interactividad en sistemas cargados.
� Son 224 líneas de código que modifican el planificador del kernel que en las primeras pruebas muestra que la latencia media cae a una 60 veces (1/60).
� Uso en sistemas de tiempo compartido
ARCOS @ UC3M187 http://www.phoronix.com/scan.php?page=article&item=linux_2637_video&num=1
A B C D B C D A
• Grande:
• menos cambios de contexto
• Peor reactividad
Alejandro Calderón Mateos
Planificación de procesosprincipales algoritmos de planificación (2/3)
� Por prioridad:
� Asignación a procesos más prioritarios el procesador
� Se puede combinar con cíclica. Ejemplo con tres clases de prioridad
� Características:
� Uso de prioridades fijas: problema de inanición
� No fijas: uso de algún algoritmo de envejecimiento
� Uso en sistemas de tiempo compartido con aspectos de tiempo real
ARCOS @ UC3M188
Prioridad 2
Prioridad 1
Prioridad 3
Alejandro Calderón Mateos
Planificación de procesosprincipales algoritmos de planificación (3/3)
� Primero el trabajo más corto:� Dado un conjunto de trabajo del que se sabe la duración total de la ejecución
de cada uno de ellos, se ordenan de la menor a la mayor duración.
� Características:
� [v] Produce el menor tiempo de respuesta (medio)
� [i] Penaliza los trabajos largos.
� Uso en sistemas batch.
� FIFO:� Ejecución por el estricto orden de llegada.
� Características:
� [v] Simple de implantar.
� [i] Penaliza los trabajos prioritarios.
� Uso en sistemas batch.
ARCOS @ UC3M189
Alejandro Calderón Mateos
Política vs mecanismo
� Separación de lo qué se puede hacer de cómo se puede hacer
� Normalmente, un proceso conoce cuál es el hilo más prioritario, el que más E/S necesitará, etc.
� Uso de algoritmos de planificación parametrizados
� Mecanismo en el kernel
� Parámetros rellenados por los procesos de usuarios
� Política establecida por los procesos de usuario
ARCOS @ UC3M190
Alejandro Calderón Mateos
Planificación multipolíticaWindows 2000 y Linux
ARCOS @ UC3M191 Sistemas operativos: una visión aplicada
31-1616 niveles de RT
15 niveles variables 15-1
1 nivel del sistema
0-99
100-139
Prioridades de RT
Prioridades procs. convencionales
Windows 2000 Linux
CPU
I/O
CPU
I/O
0
Alejandro Calderón Mateos
Planificación multipolíticaWindows 2000
ARCOS @ UC3M192 Sistemas operativos: una visión aplicada
31-1616 niveles de RT
15 niveles variables 15-1
1 nivel del sistema
Windows 2000
CPU
I/O
0
Lección 3drivers y servicios ampliados
Diseño de Sistemas Operativos
Grado en Ingeniería Informática
Grupo ARCOSUniversidad Carlos III de Madrid