Publicado el 14 de Enero del 2017
895 visualizaciones desde el 14 de Enero del 2017
226,9 KB
23 paginas
Creado hace 15a (28/04/2009)
Periféricos Interfaces y Buses
UNIVERSIDAD
DE CANTABRIA
I. Arquitectura de E/S
II. Programación de E/S
Aspectos básicos de la programación de E/S. Arquitectura y
programación de la E/S en el sistema operativo. Manejadores de
dispositivos (drivers) y su programación (interrupciones).
III. Interfaces de E/S de datos
IV. Dispositivos de E/S de datos
V. Buses
VI. Controladores e interfaces de dispositivos de almacenamiento
VII. Sistemas de almacenamiento
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
8
© J. Javier Gutiérrez, Michael González
28/abr/09
1
II. Programación de E/S
UNIVERSIDAD
DE CANTABRIA
Bloque III
• Drivers en MaRTE OS
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
2
Nociones básicas de Marte OS
UNIVERSIDAD
DE CANTABRIA
Se pueden hacer aplicaciones en Ada y C
En la instalación se elige un directorio export donde se va a
colocar el ejecutable del target para que sea cargado, por ejemplo
por etherboot:
• en el servidor en /etc/dhcpd.conf se encuentran la MAC e IP del
host y del target, el nombre del fichero y su path
Suponemos que el directorio de instalación es /marte
• aquí se encuentran los fuentes y algunas utilidades de
compilación
En /marte/utils se encuentra el fichero globals.pl en el que hay
parámetros de configuración creados al instalar MaRTE
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
3
Nociones básicas de Marte OS (cont.)
UNIVERSIDAD
DE CANTABRIA
En /marte/utils se encuentran algunas utilidades de
compilación:
• mkdrivers: compila sólo los drivers
• mkmarte: compila el Kernel de MaRTE salvo el runtime
• mkrtsmarteuc: compila el runtime de MaRTE para la plataforma
seleccionada
• mgcc: compila el programa de aplicación C y crea el ejecutable
• mgnatmake: compila el programa de aplicación en Ada y crea el
ejecutable
Los ejecutables se tienen que llevar al directorio export en el que
el target espera encontrar el fichero para cargarlo
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
4
Drivers en MaRTE OS
Tipos de drivers
• sólo existen los drivers de caracteres
UNIVERSIDAD
DE CANTABRIA
Identificación de ficheros de dispositivo
• números mayores y números menores asignados en una tabla
de dispositivos (cualquier variación en esta tabla exige la
recompilación del kernel)
Instalación de los drivers
• instalación estática a través de la correspondiente modificación
de la tabla de dispositivos
Los drivers se pueden escribir tanto en Ada como en C
- si se escriben en C necesitan un envoltorio Ada
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
5
Drivers en MaRTE OS (cont.)
UNIVERSIDAD
DE CANTABRIA
Pueden usar todas las funciones POSIX
• threads, mutexes, variables condicionales, temporizadores,
semáforos, ...
• excepto en las rutinas de servicio de interrupción, donde no se
pueden usar operaciones bloqueantes
- esto incluye escribir en otros drivers (p.e., no usar la entrada/salida
- alternativamente existe una operación printc para escribir en
estándar)
consola directamente
Cada driver debe ir localizado en un subdirectorio de
• marte/x86_arch/drivers/
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
6
Identificación de drivers
UNIVERSIDAD
DE CANTABRIA
La identificación de los drivers se hace con los números mayores
y menores con un significado similar al que hemos visto para
Linux
La implementación se realiza mediante tres tablas:
• Tabla de descriptores de fichero: permite el acceso al
dispositivo desde las aplicaciones
• Tabla de ficheros de dispositivo: contiene la información de
dispositivo instalado (asocia el número mayor y menor)
• Tabla de drivers: cada driver es identificado por el número
mayor y contiene toda la funcionalidad del driver
Las dos últimas permiten la instalación de driver y dispositivos
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
7
Tabla de descriptores de ficheros
UNIVERSIDAD
DE CANTABRIA
Esta tabla es gestionada automáticamente por el sistema
Table 1: The_FD_Table
File descriptor
File_Open_Status
File_Access_Mode
Device_File_Assigned
Device_File_Number
Specific_Data
Integer
?
Read_Write
?
?
4
?
?
0
?
0
3
Configuration_parameters.
Open_Files_Mx-1
Se crea una entrada
en cada open
Fd_Used
Boolean
False
True
False
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
8
Tabla de ficheros de dispositivos
UNIVERSIDAD
DE CANTABRIA
Esta tabla es configurada por el usuario
Device_File_
Number
1
4
Configuration_parameters.
Device_Files_Mx
Table 2: The_Device_Files_Table
File_Name
Path
?
test_driver1
?
Major_
Number
Major
Minor_
Number
Minor
Device_Used
Boolean
1
5
1
1
1
1
False
True
False
Linux: cada entrada es
equivalente a un mknod
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
9
Tabla de drivers
Esta tabla es configurada por el usuario
UNIVERSIDAD
DE CANTABRIA
Table 3: The_Driver_Table
Create
Create_
Procedure_Ac
Remove
Remove_
Procedure_Ac
Open
Open_
Procedure_Ac
Close
Close_
Procedure_Ac
Read
Read_
Procedure_Ac
Write
Write_
Procedure_Ac
Ioctl
Ioctl_
Procedure_Ac
null
test_
create
null
test_
remove
null
null
test_
open
null
null
test_
close
null
null
test_
read
null
null
test_
write
null
null
test_
ioctl
null
Major
1
5
Configuration_
Parameters.
Devices_Mx
• Linux: es equivalente al uso de register_chrdev_region,
null
cdev_alloc y cdev_add
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
10
Puntos de entrada de los drivers
UNIVERSIDAD
DE CANTABRIA
Puntos de entrada de los drivers
• create/remove
funciones de instalación/desinstalación del driver, externas al
sistema de archivos
- Linux: suplen las operaciones de instalación y desintalación de
módulos
• open/close y read/write
funciones de entrada/salida básicas de POSIX gestionadas
internamente por el sistema de archivos
• ioctl
función que permite transmitir una orden al dispositivo
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
11
API de los puntos de entrada (C)
UNIVERSIDAD
DE CANTABRIA
int my_driver_create (void);
int my_driver_remove (void);
int my_driver_open (int file_descriptor, int file_access_mode);
int my_driver_close (int file_descriptor);
ssize_t my_driver_read (int file_descriptor, void *buffer,
size_t bytes);
ssize_t my_driver_write (int file_descriptor, void *buffer,
size_t bytes);
int my_driver_ioctl (int file_descriptor, int request,
void *argp);
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
12
Creación de un driver C
UNIVERSIDAD
DE CANTABRIA
Incluso para drivers C hay que escribir una especificación Ada
• puede usarse como plantilla el fichero
drivers/demo_driver_c/demo_driver_c_import.ads
Además, hay que crear un GNUmakefile
• mkdrivers ejecutará make en el directorio del driver
• después mkdrivers copiará en lib/libdrivers.o los objetos de
los directorios de los drivers
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
13
Ficheros implicados en la instalación
de un driver
UNIVERSIDAD
DE CANTABRIA
/marte/x86_arch/arch_dependent_files/marte-kernel-
devices_table.ads
- registra todas las funciones de los drivers
- es un fichero único para todos los drivers
/marte/x86_arch/arch_dependent_files/marte-
configuration_parameters.ads
- parámetros de configuración del kernel
- se pueden configurar entre otras cosas algunos parámetros
correspondientes a los drivers, como los rangos de números
mayores y menores
/marte/x86_arch/drivers/my_driver/*
-
ficheros con el código de mi driver en el subdirectorio my_driver
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
14
Instalación de un driver
UNIVERSIDAD
DE CANTABRIA
El fichero marte-kernel-devices_table.ads tiene dos tablas:
• The_Driver_Table: drivers incluidos en el sistema
- esta tabla asocia números mayores a los drivers y contiene los
puntos de entrada
• The_Device_Files_Table: registra los dispositivos y asocia el
driver que los controla
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
15
Instalación de un driver (cont.)
UNIVERSIDAD
DE CANTABRIA
Para incluir un nuevo driver:
• Añadir una entrada a The_Driver_Table, eligiendo un número
mayor no usado
• Añadir uno o varios ficheros de dispositivos (uno por número
menor) a The_Device_Files_Table
- el nombre es un string cualquiera (se puede usar el prefijo /dev por
analogía con Linux)
- elegir como número mayor el asociado al driver
- el número menor es cualquiera; se usará para identificar unidades
de manera definida por el driver
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© J. Javier Gutiérrez, Michael González
28/abr/09
16
Ejemplo de fichero de
marte-kernel-devices_table.ads
UNIVERSIDAD
DE CANTABRIA
-- Typical standard devices(std input,output,error)
with Keyboard_Functions; -- standard input
with Text_And_Serial_Console_Import; -- std output,error
-- User's drivers "withs" (add with{your_driver}')
with Demo_Driver_C_Import;
-- MaRTE OS "withs" (Do not edit)
with Marte.Kernel.File_System_Data_Types;
use Marte.Kernel.File_System_Data_Types;
package Marte.Kernel.De
Comentarios de: Periféricos Interfaces y Buses - II. Programación de E/S Aspectos básicos de la programación de E/S (0)
No hay comentarios