PDF de programación - Periféricos Interfaces y Buses - II. Programación de E/S Aspectos básicos de la programación de E/S

Imágen de pdf Periféricos Interfaces y Buses - II. Programación de E/S Aspectos básicos de la programación de E/S

Periféricos Interfaces y Buses - II. Programación de E/S Aspectos básicos de la programación de E/Sgráfica de visualizaciones

Publicado el 14 de Enero del 2017
744 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
  • Links de descarga
http://lwp-l.com/pdf1054

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
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad