Está en la página 1de 61

Master en Ingeniería de Sistemas Empotrados

Departamento de Arquitectura y Tecnología de


Computadores
Universidad del País Vasco / Euskal Herriko Unibertsitatea
UPV / EHU

Introducción al tiempo
MOISE

real en sistemas
empotrados

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 1
Contenido

• Introducción
UPV / EHU • Soporte de interrupciones
MOISE • Conceptos de sistemas operativos
• Planificación en sistemas de tiempo real
• Mecanismos de sincronización y comunicación
• Planificación de tiempo real con recursos
compartidos

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 2
Conceptos de Sistemas
Operativos
CONTENIDO

• El sistema operativo como interfaz para las aplicaciones


• Modos de ejecución
• Threads y procesos
UPV / EHU • Control de procesos. Cambio de contexto
• Gestión de la memoria
• Gestión de la entrada/salida
MOISE • Gestión de tiempos y temporización

BIBIOGRAFIA

• Q. Li: Real-Time concepts for embedded systems. CMP Books, 2003.


• A. Lafuente: Sistemas Operativos II. Apuntes de la asignatura. Edición 2009-10.
http://www.sc.ehu.es/acwlaroa/SO2.htm
• M.J. Rochkind: Advanced Unix Programming (2nd Edition), Addison-Wesley, 2004.
• C. Rodríguez, I. Alegria, J. Abascal, A. Lafuente: Descripción funcional de los sistemas
operativos. Síntesis, 1994.
• S. Sánchez Prieto: Sistemas Operativos. Universidad de Alcalá de Henares, Servicio
Editorial, 2005.
• A. Silberschatz, P. Galvin, G. Gagne: Conceptos de Sistemas Operativos (7a edición).
Willey, 2006.
• A.S. Tanenbaum: Modern Operating Systems (3rd edition). Prentice-Hall, 2008.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 3
El sistema operativo como interfaz
para las aplicaciones

• Los dos papeles del sistema operativo:


– Proporciona a las aplicaciones una interfaz
(llamadas al sistema) para el acceso a los
UPV / EHU
recursos.
MOISE – Arbitra y gestiona eficientemente el uso de los
recursos.

Qué es un recurso:
• Procesadores
• Memoria
• Dispositivos (de E/S, relojes, comunicaciones…)
• Ficheros

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 4
El sistema operativo como interfaz
para las aplicaciones
Aplicaciones

SO
UPV / EHU

MOISE
Hw

Interfaz de
llamadas al sistema

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 5
El sistema operativo como interfaz
para las aplicaciones

• Las llamadas al sistema (system calls) proporcionan


UPV / EHU
una interfaz homogénea que abstrae las
características físicas de los recursos.
MOISE – Por ejemplo, una aplicación de reproducción de sonido
funciona de la misma forma para reproducir un archivo
sobre un disco duro o sobre una memoria flash.
• Las llamadas al sistema se utilizan como llamadas a
funciones de biblioteca.
– Su especificación debe estar bien definida (p. ej., el
man de Linux/UNIX).

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 6
UPV / EHU

MOISE

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 7
El sistema operativo como interfaz
para las aplicaciones (cont)

UPV / EHU
• También se denominan APIs.
MOISE • Estándares para compatibilidad de
aplicaciones (p. ej: POSIX)
• Proporcionan un mecanismo único de
entrada al sistema mediante cambio a modo
protegido:
– La llamada se implementa mediante un trap.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 8
Modos de ejecución
• Las instrucciones máquina pueden ser normales o
reservadas.
• Las instrucciones reservadas acceden a espacios (de
UPV / EHU memoria y de E/S) protegidos.
• Dos modos de ejecución: normal y protegido.
MOISE
• Las instrucciones privilegiadas sólo pueden
ejecutarse en modo protegido.
• Un programa se ejecuta, en principio, en modo
normal.
• La instrucción de cambio de modo es privilegiada.
• ¿Cómo pasar a modo protegido para acceder a
recursos necesarios (dispositivos de E/S, etc)?

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 9
Modos de ejecución
Cambio de modo
• Mecanismo unificado para paso de modo normal a
modo privilegiado: vector de interrupciones (VI).
– Los servicios del sistema se implementan en espacio
protegido mediante rutinas que se direccionan a través
UPV / EHU
del VI.
MOISE • Rutinas de servicio de interrupción.
• Excepciones
• Llamadas al sistema operativo.
– Las rutinas se ejecutan bien asíncronamente
(interrupciones), bien llamadas desde el programa
(interrupciones programadas o traps).
• Mediante un instrucción especial de LM: INT
– El retorno de la rutina restaura el modo de ejecución
anterior.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 10
Threads y Procesos

• Flujo de ejecución:
– Secuencia de valores que adopta el registro
Contador de Programa (PC) durante la ejecución
UPV / EHU de un programa.
MOISE
• Requiere una pila (normalmente en memoria) para
representar las llamadas/retorno a subrutinas).
• Contexto de ejecución:
– Estado del sistema asociado a la ejecución del
programa. Incluye o puede incluir:
• PC, SP (puntero a pila), pila
• Estado del procesador
• Estado de la memoria
• Estado de la E/S

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 11
Threads y Procesos
Ejemplo: un proceso con tres threads

UPV / EHU

MOISE

(Extraído de Tanenbaum, 2008 © Prentice-Hall, Inc)


Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 12
Ejemplo:
creación de un proceso LINUX
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

UPV / EHU
int main (int argc, const char * argv[]) {
int pid;
MOISE

printf("%d: Soy el padre!\n", getpid());


pid= fork();
if (pid == 0)
printf("%d: Soy el hijo!\n", getpid());
else
printf("%d: Soy el padre de %d\n", getpid(), pid);
printf("%d: Agur!\n", getpid());
exit(0);
}

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 13
Ejemplo
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

#include <stdio.h> int main (int argc, const char * argv[]) {


int pid;
#include <unistd.h>
printf("%d: Soy el padre!\n", getpid());
#include <stdlib.h> pid= fork();
if (pid == 0) Código del padre (pid≠0)
UPV / EHU printf("%d: Soy el hijo!\n", getpid());
int main (int argc, const char * argv[]) {
else
printf("%d: Soy el padre de %d\n", getpid(), pid);
int pid;
MOISE printf("%d: Agur!\n", getpid());
exit(0);
}
printf("%d: Soy el padre!\n", getpid());
pid= fork();
#include <stdio.h>
if (pid == 0) #include <unistd.h>
#include <stdlib.h>
printf("%d: Soy el hijo!\n", getpid());
else int main (int argc, const char * argv[]) {
int pid;
printf("%d: Soy el padre de %d\n", getpid(), pid);
printf("%d: Soy el padre!\n", getpid());
printf("%d: Agur!\n", getpid()); pid= fork();
if (pid == 0) Código del hijo (pid=0)
exit(0);
printf("%d: Soy el hijo!\n", getpid());
} else
printf("%d: Soy el padre de %d\n", getpid(), pid);
printf("%d: Agur!\n", getpid());
exit(0);
}
Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 14
Ejemplo

UPV / EHU

MOISE Hijo Padre

#include <stdio.h> #include <stdio.h>


#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>

int main (int argc, const char * argv[]) { int main (int argc, const char * argv[]) {
int pid; int pid;

printf("%d: Soy el padre!\n", getpid()); printf("%d: Soy el padre!\n", getpid());


pid= fork(); pid= fork();
if (pid == 0) if (pid == 0)
printf("%d: Soy el hijo!\n", getpid()); printf("%d: Soy el hijo!\n", getpid());
else else
printf("%d: Soy el padre de %d\n", getpid(), pid); printf("%d: Soy el padre de %d\n", getpid(), pid);
printf("%d: Agur!\n", getpid()); printf("%d: Agur!\n", getpid());
exit(0); exit(0);
} }

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 15
Ejemplo:
contexto de un proceso LINUX
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

char a;

UPV / EHU int f_ejemplo() {


a= 'H';
printf("%d: Soy el hijo! (%c)\n", getpid(), a);
MOISE return 0;
}
int main (int argc, const char * argv[]) {
int pid;
a= 'P';
printf("%d: Soy el padre! (%c)\n", getpid(), a);
pid= fork();
if (pid == 0) ¿cuál es el valor de a?
f_ejemplo();
else {
printf("%d: Soy el padre de %d (%c)\n", getpid(), pid, a);
}
printf("%d: Agur!\n", getpid());
exit(0);
}

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 16
Ejemplo:
threads en LINUX
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sched.h>
#include <wait.h>

void* pila;
UPV / EHU char memoria_pila[64*1024];
char a;

MOISE int f_ejemplo() {


a= 'H';
printf("%d: Soy el hijo! (%c)\n", getpid(), a);
return 0;
}
int main (int argc, const char * argv[]) {
int pid;
a= 'P';
printf("%d: Soy el padre! (%c)\n", getpid(), a);
pila= &memoria_pila[0];
pid= clone(&f_ejemplo, (char*) pila + 1024*64, SIGCHLD | CLONE_FS |
CLONE_FILES | CLONE_SIGHAND | CLONE_VM, 0 );
printf("%d: Soy el padre de %d (%c)\n", getpid(), pid, a);
printf("%d: Agur!\n", getpid());
exit(0);
}
¿cuál es el valor de a?
Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 17
Threads y Procesos (cont)
• Las entidades de ejecución son los procesos/threads.
• En terminología de TR, tareas (indistintamente).
• Un thread (hilo) es un flujo de ejecución con un
UPV / EHU contexto reducido
• PC, SP (puntero a pila), pila
MOISE • Estado del procesador
• Un proceso es un flujo de ejecución con un contexto
ampliado
• Estado de la memoria
• Estado de la E/S
• Puede haber entidades de ejecución intermedias
• Sistemas combinados: un proceso incluye un
conjunto de threads
– En este caso las entidades de ejecución/planificación
son los threads

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 18
Threads y procesos
Memoria

UPV / EHU

MOISE
a a

Padre Hijo

fork()

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 19
Threads y procesos
Memoria

UPV / EHU

MOISE
a

Hijo
Padre

clone()

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 20
Threads y Procesos
Estados y grafo de transición

nue vo
proc eso e jec utá ndose finaliz ado
UPV / EHU

MOISE

prepara do bloque ado

• Nota: se toma aquí el proceso como entidad de ejecución,


sin pérdida de generalidad.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 21
Control de procesos
Representación
• Bloque de Control de Procesos (PCB)
– Identificador.
– Estado del proceso.
UPV / EHU
– Información para la planificación (prioridad,
MOISE quantum).
– Contadores de consumo de recursos (tiempo de
CPU).
– Puntero a la pila del proceso
• En sistemas combinados: puntero a los threads del
proceso (representados por TCBs).
– Puntero a los recursos de memoria (tablas de
páginas).
– Puntero a los recursos de E/S (tabla de
descriptores).

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 22
Control de procesos
Representación
• Los PCBs se enlazan en colas
• Una cola por estado
– Incluso para el estado ejecutándose.
UPV / EHU
– Proceso nulo: al menos un proceso preparado para
MOISE ejecución.
– Estado bloqueado: una cola por cada condición de
bloqueo.
co l a PCB PCB PCB

p ri o ri d ad p ri o ri d ad p ri o ri d ad

i n fo i n fo i n fo

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 23
Control de procesos
El sistema operativo como un sistema de colas

nuevo
proceso finalizado
cola preparados CPU
UPV / EHU

MOISE

DISP1 cola disp. 1

. . . .
. . . .
. . . .

DISPn cola disp. n

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 24
Control de procesos
Planificación

• La planificación de procesos (o threads) es la función


del sistema operativo que decide qué proceso va
entrar a ejecutándose y cuándo.
UPV / EHU
• La realiza el scheduler.
MOISE • Se elige un proceso de entre la cola de preparados
de acuerdo a un criterio:
– FCFS
– Prioridades
• Estáticas. Se asigna una prioridad al proceso cuando se
crea y no cambia durante su ejecución.
• Dinámicas. A partir de una prioridad inicial, se ajusta
durante la ejecución de acuerdo a determinados criterios
(p. ej. consumo de CPU del proceso).

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 25
Control de procesos
Planificación (cont)
• Cuándo planificar:
– Sólo cuando la CPU queda libre
• porque el proceso ejecutándose termina o se
UPV / EHU
bloquea: sistemas no expulsores
MOISE – Además, los sistemas operativos expulsores,
sacan al proceso que está ejecutándose
• cuando ha consumido un quantum de tiempo:
– Combinado con FCFS: planificación de turno circular o
Round-Robin
• cuando otro proceso llega a preparados.
– Le da la oportunidad de ejecutarse inmediatamente.
Como veremos, combinada con prioridades estáticas
esta planificación expulsora es adecuada para tiempo
real.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 26
Cambio de contexto

• El cambio de contexto es el conjunto de


operaciones necesarias para realizar una
UPV / EHU
transición de un proceso (o thread) a otro:
– Guardar el contexto del proceso que abandona la
MOISE CPU.
– Restaurar el contexto del proceso seleccionado por
el scheduler.
– Transferirle el control.
– Además, actualizar la representación de los
procesos en colas de PCBs.
• Implica manipular las pilas de procesos
– Se implementa en lenguaje máquina.
BA de la Rut.
PBA de Atención
1. Se está ejecutando PA.
BA
Contexto
de la Rut. 2. Se produce una interrupción
Cola de ejecución de de
Atención
PA
(externa o trap).

3. Se salva el contexto de PA.

UPV / EHU PB 4. Cambio de estado de PA.


SP
Pila de PA 5. Scheduler: elige a PB.
MOISE
Cola de preparados
CPU 6. Cambio de estado de PB.

7. Manipulación del Stack Pointer


para retornar al bloque de
PA activación de PB.
Contexto
de PB
8. Se carga el contexto de PB en la
Una cola de CPU.
bloqueados (por
ejemplo)
9. Retorno de la interrupción.

10. Se ejecuta PB.

Pila de PB

http://www.sc.ehu.es/acwlaroa/SO2/CambioContexto.pps
Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 28
Gestión de la memoria

• Se refiere a la memoria principal (RAM), donde un


programa almacena su código, sus datos y su pila.
UPV / EHU
• Gran diversidad de técnicas y políticas, dependiendo
de si el programa se almacena:
MOISE – Estática o dinámicamente.
– Contiguo o en trozos.
• Algunas técnicas (paginación, memoria virtual)
requieren importante soporte hardware:
– MMU, hoy en día on-chip.
– Almacenamiento secundario (memoria virtual).
• Las técnicas más elaboradas (memoria virtual) son
incompatibles con el tiempo real.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 29
Gestión de la memoria
Técnicas

• Monitor residente
UPV / EHU
• Particionado
MOISE
• Swapping
• Paginación y segmentación
• Memoria virtual
• Otras: solapamientos y rutinas de enlace
dinámico

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 30
Gestión de la memoria
Monitor residente

• Para un único programa en memoria

UPV / EHU
Sistema operativo
MOISE
(monitor)

registro
barrera

Programa de
usuario

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 31
Gestión de la memoria
Particionado

• Particionado fijo (MFT)

UPV / EHU
Sistema operativo
MOISE

2 Kb

4 Kb

8 Kb

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 32
Gestión de la memoria
Particionado

• Particionado variable (MVT)

UPV / EHU
Sistema operativo
MOISE

Programa 1

Programa 2

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 33
Gestión de la memoria
Particionado
• En particionado fijo se pierde espacio dentro
de las particiones (fragmentación interna).
– ¿Qué hacer si llega un programa nuevo y la
UPV / EHU partición adecuada a su tamaño está ocupada?
• Encolarlo hasta que se libere.
MOISE
• Ejecutarlo en una partición mayor libre.
• En particionado variable el espacio se pierde
en los huecos entre programas
(fragmentación externa).
– Tiende a aumentar (cada vez más huecos más
pequeños): degradación de la memoria.
– Compactar para recuperar espacio.
• Implica reubicación dinámica.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 34
Gestión de la memoria
Particionado

UPV / EHU

MOISE
• Políticas de asignación de huecos
– ¿En qué hueco almacenar un nuevo programa?
• ¿En el más ajustado al tamaño del programa?
• ¿En en más grande?
• ¿En el primero que se encuentre?

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 35
Gestión de la memoria
Swapping

UPV / EHU

MOISE
• Un programa puede, durante su ejecución,
abandonar la memoria.
• Implica reubicación dinámica de programas.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 36
Gestión de la memoria
Paginación y segmentación
• Los programas se dividen en trozos
– De igual tamaño (paginación)
– De tamaño variable (segmentación)
UPV / EHU • Como consecuencia, un programa no aparece
contiguo en memoria.
MOISE
• Dirección virtual vs dirección física.
• Las direcciones donde se almacenan los trozos se
guardan en tablas de páginas/segmentos.
– Traducción dinámica de direcciones
– Requiere importante soporte Hw:
• Unidad de gestión de memoria (MMU)
• Buffers de traducciones (TLB)
• Permite compartir páginas/segmentos entre
programas.
Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 37
Gestión de la memoria
Paginación
dir virtual

p d
CPU d MEM
UPV / EHU
dir física

MOISE
PTBR

base

...

TABLA DE PAGINAS

• La tabla de páginas puede ocupar mucho espacio.


Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 38
Gestión de la memoria
Segmentación
TRAP

dir virtual no

s d < si
+
CPU MEM
UPV / EHU dir física

MOISE
STBR

lim base

...

TABLA DE SEGMENTOS

• Produce fragmentación externa.


Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 39
Gestión de la memoria
Sistemas combinados
dir virtual TRAP

s p d no d
CPU si MEM
dir física
UPV / EHU <

MOISE
STBR

s
base
lim base ...
...
TABLA DE PAGINAS
TABLA DE SEGMENTOS

• Varios niveles de indirección.


• El último, siempre de paginación.
Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 40
Gestión de la memoria
Memoria virtual
• Se implementa sobre un sistema paginado.
• Permite la ejecución de programas no enteros.
• La referencia a una página no cargada en memoria
provoca un trap de fallo de página y la búsqueda de
UPV / EHU la página en disco.
MOISE • Aún más soporte Hw:
– Bit de validez
– Trap de fallo de página
– Espacio en disco (swap)
– Soporte para el reemplazo de páginas
• Amplio soporte del sistema operativo:
– Política de reemplazo de páginas
– Políticas de asignación de espacio entre programas
• Introduce impredecibilidad en los tiempos de
respuesta.
Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 41
Gestión de la memoria
Solapamientos y enlace dinámico
• ¿Qué hacer si un programa no cabe en la RAM y no
tengo soporte de MV?
– Se estructura el programa y se divide en trozos o
solapamientos (overlays)
UPV / EHU
• Cada solapamiento, una función
MOISE – Se añade una rutina de enlace dinámico que gestiona
la carga de las funciones en tiempo de ejecución.
– Las llamadas a funciones son ahora llamadas a la rutina
de enlace con la función y sus parámetros como
argumentos.
– Inicialmente se carga en memoria el programa
principal y la rutina de enlace.
• Modernamente los sistemas operativos añaden este
mecanismo (con otros propósitos): Dynamic Link
Libraries o Run-Time Libraries.
Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 42
Gestión de la entrada/salida

• Los dispositivos de entrada/salida son muy


heterogéneos:
– Velocidad
UPV / EHU
– Representación de los datos
MOISE – Protocolos
– Operaciones
– Unidad de transferencia (bloques, caracteres…)
– Tipos de errores
– Modo de tratar la E/S: Encuesta, Interrupciones,
DMA.
• Interfaz de los dispositivos unificada
mediante Controladores
Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 43
Entrada/salida
Interfaz
• Los Controladores de los dispositivos (Kdisp) ofrecen
una interfaz entre los dispositivos y el nivel de
lenguaje máquina.
• Elementos de la interfaz:
UPV / EHU
– Espacio de direcciones de E/S, que puede ser
MOISE • Memory-mapped
• Independiente del de memoria
– Operaciones de E/S mediante instrucciones máquina
• Memory-mapped: LOAD/STORE
• Espacios independientes: IN/OUT
• Las direcciones de E/S se asocian a los dispositivos
(Registros de E/S) y tienen papeles específicos:
– Registros de estado
– Registros de datos
– Registros de control

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 44
Entrada/salida
Modos
• Encuesta
– Espera activa sobre Registro de Estado
– Acceso a Registro de Datos
• Interrupciones
UPV / EHU – El dispositivo cuenta con una línea de interrupción
– Cuando se activa la interrupción, se ejecuta la Rutina de
MOISE Servicio que gestiona la E/S:
• Comprobación sobre Registro de Estado
• Acceso a Registro de Datos
• Acceso Directo a Memoria (DMA)
– Los dispositivos de bloques no involucran a la CPU en el
acceso a cada byte
– Se programa la operación de DMA
– Se ordena su inicio sobre un Registro de Control del KDMA
– El fin de la operación se anuncia mediante una interrupción
• La Rutina de Servicio a la Interrupción de DMA comprueba sobre
un Registro de Estado.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 45
Gestión de la entrada/salida
Manejadores de dispositivos (drivers)

UPV / EHU
• Driver: código que monopoliza el acceso al
MOISE dispositivo.
• El resto del sistema operativo es independiente del
dispositivo.
• Un modelo de entrada/salida: cliente-servidor
• Las rutinas de E/S son clientes del driver.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 46
Gestión de la entrada/salida
Manejadores de dispositivos (drivers)

• Interfaz entre las Rutinas de E/S y el driver:


– Descriptor del Dispositivo, configurado por el driver:
UPV / EHU • Estado del dispositivo
• Modo de operación
MOISE • Tablas de conversión
• Apuntador a la cola de peticiones
• Evento asociado al driver
– IORB (Input/Output Request Block) para especificar una
petición al driver:
• Identificador del proceso cliente
• Parámetros de la petición
• Evento para sincronización con el final de la operación
• Diagnóstico de la operación (a rellenar por el driver)

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 47
Gestión de la entrada/salida
DESCRIPTOR
DISP 1
IORB
cola IORBs

parámetros
infor. del de la petición
dispositivo
diagnóstico

UPV / EHU TABLA DE


CANALES DESCRIPTOR
DISP 2
MOISE IORB IORB
Proceso i
cola IORBs

parámetros parámetros
infor. del de la petición de la petición
dispositivo
diagnóstico diagnóstico

DESCRIPTOR
DISP 3
TABLA DE
CANALES cola IORBs

Proceso j infor. del


dispositivo

Ejemplo de estado de la E/S


Konputagailuen Arkitektura eta Teknologia Saila
Departamento de Arquitectura y Tecnología de Computadores 48
Gestión de la entrada/salida
Buffering
• Para desacoplar las velocidades de funcionamiento de los
dispositivos y la CPU, el SO proporciona buffers del
sistema para almacenamiento temporal de la E/S.
• Varios esquemas.
UPV / EHU Aplicación Aplicación Aplicación Aplicación

MOISE

Dispositivo Dispositivo Dispositivo Dispositivo

(a) E/S sin (b) E/S con un (c) E/S con doble (d) E/S con bufer
buffer buffer buffer circular

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 49
Gestión de la entrada/salida
El sistema de ficheros

• El desarrollo de las memorias tipo flash


UPV / EHU
posibilita que incluso los dispositivos más
pequeños proporcionen un sistema de
MOISE
ficheros.
• Las abstracciones del modelo de E/S
proporcionan independencia entre el
sistema de ficheros y el dispositivo soporte.
– Ejemplo: FAT16 sobre floppy/HD/flash

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 50
Gestión de la entrada/salida
El sistema de ficheros
• Características del sistema de ficheros:
– Permanencia
– Organización estructurada
UPV / EHU • En árbol
• Nombre de un fichero: relativo-absoluto
MOISE
• Algunos ficheros son directorios
– Atributos de un fichero
• Tiempos de creación, Acceso…
• Derechos de acceso
• Tamaño
• etc
– El contenido se organiza en registros lógicos
– Acceso concurrente a ficheros
• Punteros independientes

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 51
Gestión de tiempos y
temporización

UPV / EHU
• El tiempo es un recurso peculiar.
• La gestión del tiempo es un componente
MOISE
básico en cualquier sistema empotrado o de
tiempo real.
• Vamos a estudiar:
– Tipos de relojes
– Rutinas de servicio de la interrupción del reloj
– Gestión de temporizadores

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 52
Gestión de tiempos y temporización
Relojes
• Reloj de tiempo real (RTC)
– Siempre en funcionamiento. Requiere
alimentación propia.
UPV / EHU
• Reloj Hardware
– Se inicializa con el RTC en la inicialización.
MOISE
– Produce las interrupciones de reloj.
– Suele ser programable (PIT, p. ej., Intel 8253).
– Puede tener otras funciones (p. ej., refresco de la
DRAM).
• Reloj del sistema
– Es un reloj software implementado por la ISR del
PIT.
– Cuenta interrupciones y las expresa en unidades
de tiempo.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 53
El tiempo en Linux

•Comando para consultar el reloj del sistema:


– date
•Ajuste del reloj:
UPV / EHU – adjtimex (sólo puede ejecutarla root)
•Cronómetro de alta resolución:
MOISE
– gettimeofday()

#include <sys/time.h>

struct timeval t0, t1;

gettimeofday(&t0, NULL);

gettimeofday(&t1, NULL);
printf("Duracion: %d,%d segundos\n",
t1.tv_sec-t0.tv_sec, t1.tv_usec-t0.tv_usec);

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 54
Gestión de tiempos y temporización
Rutina de servicio de la interrupción del reloj

• Funciones:
UPV / EHU – Soporte del reloj software (contador de unidades
de tiempo, p. ej., segundos)
MOISE
• Para el tiempo del sistema
• Para implementar temporizadores
– Gestión del tiempo compartido (expulsión por fin
de quantum).
– Contabilidad del uso de recursos temporales (p.
ej., tiempo de CPU).
• Genera eventos periódicos

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 55
Gestión de tiempos y temporización
Rutina de servicio de la interrupción del reloj
Ejemplo
ISR_del_reloj ()
{
...
ticks_por_segundo−−;
intervalo_CPU++;

if (ticks_por_segundo== 0) {
UPV / EHU actualiza_tiempo_del_sistema();
señalar_evento(EVENTO_SEGUNDO);
ticks_por_segundo= UN_SEGUNDO;
MOISE }

if (intervalo_CPU == quantum) {
incrementa_gasto_CPU_del_proceso(intervalo_CPU);
intervalo_CPU= 0;
goto cambio_de_contexto;
}
...
eoi();
reti();

cambio_de_contexto:
expulsar_proceso();
dispatcher (scheduler());
}

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 56
Gestión de tiempos y temporización
Gestión de temporizadores

• El sistema proporciona un servicio de temporización:


– Un proceso se duerme durante n unidades de tiempo.
– El sistema gestiona cuándo despertar a cada proceso
UPV / EHU dormido.
MOISE • Hay que definir la resolución del temporizador:
– A mayor resolución más carga para el sistema.
• Modelo:
– Los procesos ponen su petición de temporización
(usando un IORB).
– Un gestor de tiempos (manejador), activado cada
unidad de tiempo por la ISR del reloj, despacha las
peticiones a medida que se cumplen, despertando al
proceso correspondiente.

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 57
Gestión de tiempos y temporización
Implementación

Peticiones
UPV / EHU temporización
13 EVENTO_P
MOISE Gestor
de
tiempos
EVENTO_P

P
EVENTO_SEGUNDO

ISR

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 58
Gestión de tiempos y temporización
Implementación

Sólo hay que Sólo hay que


consultar la decrementar la
UPV / EHU primera primera

MOISE
13 12 12
23 13 Relativo 1
Ordenar a la
23 23 anterior 10
12 23 0

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 59
Gestión de tiempos y temporización
Implementación

Gestor_tiempos ()
{
UPV / EHU ...
while (TRUE) {
MOISE esperar_evento(EVENTO_SEGUNDO);
while (primero(peticiones_tiempo).plazo == 0)
señalar_evento(primero(peticiones_tiempo).evento;
eliminar(primero(peticiones_tiempo));
}
primero(peticiones_tiempo).plazo−−;
}
}

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 60
Ejemplo:
uso de temporizadores en Unix
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void fnula() {return;}

unsigned esperar_tiempo (unsigned seg) {


UPV / EHU unsigned s;

MOISE s= alarm(seg);
pause();
return(s);
}

int main (int argc, const char * argv[]) {


int i;
unsigned t;

signal(SIGALRM, fnula);

for (i=1; i<5; i++) {


printf("espera (%d segundos)\n", i);
t= esperar_tiempo(i);
printf("despertado (%d)\n", t);
}
}

Konputagailuen Arkitektura eta Teknologia Saila


Departamento de Arquitectura y Tecnología de Computadores 61

También podría gustarte