dispositivos por bloques en minix

11
DISPOSITIVOS POR BLOQUES EN MINIX Minix maneja varios dispositivos por bloques distintos el Disco en RAM, el Disco Duro y el Disco flexible. Minix siempre tiene por lo menos dos dispositivos por bloques compilados en el sistema, pueden incluirse por compilación una tarea de CD-ROM y un controlador SCSI si se requiere apoyo para tales dispositivos. Cada uno de estos dispositivos se ejecuta como proceso independiente, todos se compilan como parte del código ejecutable del kernel permitiendo el compartimiento de una cantidad considerable del código. Cada controlador de dispositivo por bloque tiene que hacer algo de inicialización, el controlador del Disco RAM tiene que reservar memoria, el controlador del Disco Duro determinara los parámetros del Hardware del disco. Todos los controladores de Disco se invocan individualmente para la inicialización especifica del Hardware después el controlador invoca la función que contiene el ciclo principal común. Dentro del ciclo principal se recibe un mensaje, se invoca una función que realice la operación requerida por cada mensaje y se genera el mensaje de respuesta, solo hay una copia del código del ciclo principal en el binario de minix. Esta técnica consiste en hacer que cada uno de los controladores individuales pase al ciclo principal un parámetro que consta de un puntador a una tabla la cual consiste indirectamente a estas funciones. En la Memoria solo hay una copia del código ejecutable para el ciclo principal de los controladores de dispositivos por bloques pero se ejecuta como ciclo principal de tres o mas procesos distintos, cada proceso esta en un punto distinto del código y cada uno opera con su propio conjunto de datos y tienen su propia pila. Operaciones 1. Open(abrir) 2. Close(cerrar) 3. Read(leer)

Upload: jose-lenin-martinez-murillo

Post on 17-Feb-2015

80 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Dispositivos Por Bloques en Minix

DISPOSITIVOS POR BLOQUES EN MINIX

Minix maneja varios dispositivos por bloques distintos el Disco en RAM, el Disco Duro y el Disco flexible. Minix siempre tiene por lo menos dos dispositivos por bloques compilados en el sistema, pueden incluirse por compilación una tarea de CD-ROM y un controlador SCSI si se requiere apoyo para tales dispositivos. Cada uno de estos dispositivos se ejecuta como proceso independiente, todos se compilan como parte del código ejecutable del kernel permitiendo el compartimiento de una cantidad considerable del código.

Cada controlador de dispositivo por bloque tiene que hacer algo de inicialización, el controlador del Disco RAM tiene que reservar memoria, el controlador del Disco Duro determinara los parámetros del Hardware del disco. Todos los controladores de Disco se invocan individualmente para la inicialización especifica del Hardware después el controlador invoca la función que contiene el ciclo principal común.

Dentro del ciclo principal se recibe un mensaje, se invoca una función que realice la operación requerida por cada mensaje y se genera el mensaje de respuesta, solo hay una copia del código del ciclo principal en el binario de minix. Esta técnica consiste en hacer que cada uno de los controladores individuales pase al ciclo principal un parámetro que consta de un puntador a una tabla la cual consiste indirectamente a estas funciones.

En la Memoria solo hay una copia del código ejecutable para el ciclo principal de los controladores de dispositivos por bloques pero se ejecuta como ciclo principal de tres o mas procesos distintos, cada proceso esta en un punto distinto del código y cada uno opera con su propio conjunto de datos y tienen su propia pila.

Operaciones

1. Open(abrir)2. Close(cerrar)3. Read(leer)4. Write(escribir)5. IOCTL(control de E/S)6. SCATTERED_IO(E/S dispersa)

Read no causa un retorno al invocador antes que se haya completado la transferncia de datos, pero un sistema operative podria colocar en un buffer los datos transferidos durante un Write para transferirlos a su destino en un momento posterior y regresar inmediatamente al invocador .

Open verifica que el dispositivo este accesible o devuelva un mensaje de error si no lo esta.

Close garantiza que todos los datos en buffer que fueron escritos por el invocador se transfieran por completo a su destino final en el dispositivo.

Page 2: Dispositivos Por Bloques en Minix

IOCTL examina y modifica los parámetros operativos de dispositivos de E/S, ejemplo: consulta o modificación de la forma en que un dispositivo esta divido en particiones.

SCATTERED_IO permite al sistema de archivos solicitar la lectura o escritura de múltiples bloques cuando es preciso escribir datos, no puede ser opcional escribir o no un bloque dado, el sistema operativo puede poner e buffer varias peticiones de escritura suponiendo que la escritura de múltiples bloques pueda efectuarse de manera mas eficiente que si atienden cada petición en el momento en que llega, en una petición de SCATTERED_IO para leer o escribir la lista de bloques solicitados están ordenados y esto hace la operación mas eficiente que si atiende las operaciones al azar y como solo se hace una sola llamada al controlador para transferir múltiples bloques se reduce el número de mensajes enviados dentro de MINIX.

Software Controlador del Dispositivo de Bloques.Las definiciones que todos los controladores necesitan están Driver, el ciclo principal y las funciones compartidas de todas las tareas de controlador por bloque están en Driver C. después de efectuar toda la inicialización especifica del Hardware, cada controlador invoca Driver_Task pasando una estructura Driver como argumento de la llamada después de obtener dirección del buffer que se usara para operaciones de DMA se entra en el ciclo principal.

El sistema de archivos es el único proceso que enviara mensajes a una tarea de controlador, esto lo verifica el Switch de las líneas 9165 a 9175, en el Switch del ciclo principal los primeros tres tipos de mensajes DEV_OPEN, DEy_GLOSE y DEV_IOCTL tienen como resultado llamadas indirectas empleando direcciones que se pasaron en la estructura Driver. Los mensajes DEV_READ, DEV_WRITE y SCATTERED_IO producen llamadas indirectas. Todas las llamadas pasan la estructura Driver como argumento desde el interior del Switch.

Las operaciones de una petición deben ser todas lecturas o todas de escritura y estar ordenadas en orden de bloque dentro del dispositivo , se debe de trabajar mas en la lectura o escritura sencilla realizada con do_rdwt ya que el arreglo de petición debe copiarse en el espacio de Kernel, pero una vez que se ha hecho esto se efectúan tres llamadas indirectas a las rutinas dependientes del dispositivo dr prepare, dr Schedule y dr finish, la diferencia es que la llamada dr Schedule se ejecuta en un ciclo una vez para cada petición o hasta que ocurre un error, una vez finalizado el ciclo dr finish y luego se vuelve a copiar el arreglo de petición en el lugar donde se obtuvo.

El campo IO_nbytes de cada elemento del arreglo se habrá modificado de modo que refleje el numero bytes transferidos aunque el total no regresa directamente en el mensaje de respuesta que Driver_Task construye , el invocador puede extraer el total de este arreglo.

Page 3: Dispositivos Por Bloques en Minix

Biblioteca de Controladores

Loa archivos drvlib.h y drvlib.c contienen códigos dependientes del sistema que maneja las particiones de disco en computadoras compatibles con IBM PC. Las particiones permiten dividir un solo dispositivo de almacenamiento en subdispositivos, las particiones se usan comúnmente en los discos duros pero MINIX también proporciona apoyo para la división en particiones en los discos flexibles.

Entre las razones para dividir un disco en particiones tenemos: -la capacidad de disco, -los sistemas operativos pueden tener límites en cuanto al tamaño de dispositivo que pueden manejar,-colocar una porción de los archivos de un sistema en un dispositivo lógico independiente.

La función partición en drvlib.c se invoca cuando se abre por primera vez un dispositivo por bloques, sus argumentos incluyen una estructura driver para que pueda invocar funciones específicas del dispositivo, un numero de dispositivos secundario inicial y un parámetro que indica si el estilo de partición es disco flexible, partición primaria o subparticion.

Discos en RAMDiscos en Ram puede proporcionar acceso a cualquier parte de la memoria, la función de este controlador es reservar una parte de la memoria para ser usada como disco ordinario. En un sistema MINIX que fue diseñado en disco flexible, el disco en ram tiene una ventaja ,si colocamos el dispositivo raíz en el disco en ram , el disco flexible puede montarse y desmontarse a voluntad manejando a si medios removibles.

Hardware y Software de Disco en RAM

Un dispositivo por bloque es un medio de almacenamiento con dos comandos escribir y leer un bloque, estos bloques se guardan en memoria giratorias como disco flexible o disco duros. Un disco en Ram es mas sencillo ya que usa una porción preasignada de la memoria principal para almacenar los bloques, el disco en Ram ofrece acceso instantáneo lo que lo hace adecuado para almacenar programas o datos a los que se accede con frecuencia.

Este disco se divide en n bloques dependiendo de cuanto memoria se le haya asignado cada bloque tiene al mismo tamaño que los bloques empleados en los discos reales. Cuando el controlador recibe un mensaje indicándole que lea o escriba un disco, este calcula el lugar dentro de la memoria del disco en Ram en el que esta el bloque solicitado y lo lee o escribe la transferencia se efectua invocando un procedimiento en lenguaje ensamblador que copia de el programa del usuario con la máxima rapidez del que el sistema es capaz.

Page 4: Dispositivos Por Bloques en Minix

Memoria Principal(RAM)

Programa de usuario

:

Las lecturas y escrituras del bloque Bloque 1 del disco en Ramo Ram usan esta memoria

Sistema Operativo

Generalidades del controlador de Disco en Ram en MINIX

El controlador de Disco en Ram es cuatro controladores en uno : 0:¡dey/ram, 1:/dev/mem, 2:/dev/kmem, 3:/dev/null.

El primero de estos archivos especiales ¡dey/ram ni su tamaño ni su origen están incorporados en el cotrolador estas características los determina el sistema de archivos cuando se arranca MINIX, por omisión se crea un disco en Ram con el mismo tamaño que el dispositivo imagen del sistema de archivo de raíz a fin de poder copiar en el dicho sistema de archivos, una vez ya determinado el tamaño se localiza un bloque de memoria suficientemente grande y se retira de la reserva de memoria aun antes de que el administrador de memoria inicie su trabajo. Esto permite aumentar y reducir el tamaño del disco en Ram sin tener que recopilar el sistema operativo.

El segundo /dev/mem se utiliza para leer y escribir memoria física y memoria de kernel. Cuando se abre y lee /dev/mem se obtiene el contenido de las posiciones de memoria físicas comenzando por la dirección de memoria absoluta cero(los vectores de interrupción en modo real) al abrirse también en el se modifica los vectores de interrupción.

El tercero /dev/kmem: la dirección absoluta de esta posición varia dependiendo del tamaño del código del kernel en MINIX, esta posición se usa para depuración y programas muy especiales.

El cuarto /dev/null este archivo acepta datos y los desecha.

Page 5: Dispositivos Por Bloques en Minix

Implementación del Controlador del Disco en Ram en MINIX

En una operación de lectura o escritura el ciclo principal efectúa tres llamados una para preparar un dispositivo, otro para planificar las operaciones de entrada y salida y una para terminar la operación. En el caso de los dispositivos de memoria la primera de estas llamadas se hace a m_prepare, esta función comprueba que se haya solicitado un dispositivo secundario valido y luego devuelve la dirección de la estructura que contiene la dirección base y el tamaño de área solicitada y el tamaño del área de ram solicitada, la segunda llamada de a m_schedule que es la función que realiza todo el trabajo.

Los dispositivos de memoria no necesitan un tercer paso para terminar una operación de lectura o escritura y la ranura correspondiente de m_dtab es una llamada a nop_finish.

Tarea de Sistema en MINIX

Una consecuencia de hacer que el sistema de archivos y el administrador de memoria sean procesos servidores al kernel es que tienen información que el Kernel necesita, su estructura impide escribirla simplemente en una tabla del Kernel. Cuando se hace una llamada que es manejada por el administrador de memoria y se crea un proceso nuevo el Kernel debe enterarse de ellos para poder planificarla, el administrador de memoria puede comunicárselo a la tarea del Kernel por medio del mecanismo de mensajes estándar y que tambien tenga acceso a todas las tablas del Kernel.

Las tareas del sistema aceptan 19 tipos de mensaje el programa principal de la tarea del sistema sys-task esta estructurado igual que las otras tareas recibe un mensaje ,invoca el procedimiento de servicio apropiado y luego envía una repuesta.

El administrador de memoria utiliza el mensaje SYS_FORK para decirle al Kernel que a nacido un nuevo proceso , el mensaje contiene los números de ranura dentro de las tablas de procesos que corresponden al padre y al hijo.

El procedimiento do_Fork primero verifica que el administrador de memoria esta alimentando basura al Kernel osea que determina que las entradas para el padre y para el hijo en la tabla de procesos son validas, luego do_Fork copia la entrada de tabla del proceso padre en la ranura del hijo. El hijo queda liberado de cualquier señal pendiente para el padre y no hereda la situación de rastreo para el padre asi toda la información de contabilidad del hijo se pone en cero, es después de un Fork el administrador de memoria asigna memoria al hijo.

Page 6: Dispositivos Por Bloques en Minix

Tipo de mensaje De Significado

SYSFORK MM Un proceso bifurco

SYSNEWMAP MM MM instala mapa de memoria para un nuevo proceso

SYSGETMAP MM MM requiere el mapa de memoria de un proceso

SYSEXEC MM Establece el apuntador a la pila después de llamar a EXEC

SYSXIT MM Un proceso salió

SYSGETSP MM MM requiere al apuntador a la pila de un proceso

SYSTIME FS FS requiere los tiempos de ejecución de un proceso

SYSABORT Ambos Pánico: MINIX no puede continuar

SYSSENDSIG MM Envía una señal a un proceso

SYSSIGRETURN MM Aseo después de completarse una señal

SYSKILL FS Enviar una señal a un proceso después de la llamada KILL

SYSENDSIG MM Aseo después de una señal del Kernel

SYSCOPY Ambos Copia datos entre procesos

SYSVCOPY Ambos Copia múltiples bloques de datos entre proceso

SYSGBOOT FS Obtiene parámetros de arranque

SYSMEM MM MM requiere el siguiente trozo de memoria fisica

SYSUMAP FS Convierte direcciones virtuales en fisicas

SYSTRACE MM Realiza una operación de la llanada PTRACE

Page 7: Dispositivos Por Bloques en Minix

El mensaje SYS_NEWNAP permite al administrador de memoria dar al Kernél el mapa de memoria de cualquier proceso. SYS_GETMAP se usa solo cuando el sistema de archivos arranca inicialmente, este mensaje solicita una transferencia de la información de mapas de procesos en la dirección opuesta del Kernel al administrador de memoria.

Cuando un proceso realiza una llamada al sistema EXEC el administrador de memoria establece una nueva pila para el que contiene el argumento y el entorno y pasa al apuntador de pila resultante al Kernel usando SYS_EXEC.

Los procesos pueden salir en MINIX ya sea ejecutando una llamada al sistema EXIT y envía un mensaje al administrador de memoria, el administrador de memoria le informa al Kernel usando el sistema SYS_XIT.

SYS_GETSP en este el administrador de memoria lo usa para averiguar el valor de apuntador de pila actual de algún proceso. Este valor se necesita para las llamadas al sistema BRK y SBRK, con objeto de ver si el segmento de datos y el segmento de pila han chocado.

SYS_TIMES este se necesita para implementar la llamada al sistema Times que devuelve los tiempos de contabilización al invocador.

SYS_ABORT entra en pánico no puede continuar puede ocurrir que el administrador de memoria o el sistema de archivos descubra un error que haga imposible continuar operando si el sistema arranca inicialmente al sistema de archivos se percata que el súper bloque en el dispositivo de raíz se ha corrompido irremediablemente entra en pánico y envía un mensaje SYS_ABORT al Kernel.

Cuando se debe de enviar una señal a un proceso, se envía el mensaje SYS_SENDSIG a la tarea del sistema y el trabajo es efectuado por do_SENSIG que consiste solo en colocar la información requerida en la pila de proceso destinatario de la señal y ajustar al contador de programa y al apuntador de la pila de dicho proceso de modo que el código de manejo de señales se ejecute la siguiente vez que el planificador permita que el proceso se ejecute.

El programador que escribe el manejador de señal al estilo POSIX incluye una instrucción. RETURN pero la manipulación de la pila por parte de la llamada SENDSIG hace que la instrucción RETURN cause una llamada al sistema SIGRETURN.

El administrador de memoria entonces envía un mensaje SYS_SIGRETURN a la tarea del sistema, este mensaje es manejado por do_SIGRETURN que copia la estructura de SIGCONTEXT de vuelta en el espacio de Kernel y luego restaura los registros del proceso destinatario de la señal.

Las señales que se originan en el sistema de archivos también son manejados primeros por el Kernel. El sistema de archivos usa SYS_KILL para solicitar la generación de una señal de este tipo este mensaje es manejado por do_KILL que realiza la verificación usual de la validez del origen del mensaje y luego invoca CAUSE-SIG para pasar la señal al proceso, las señales que se originan en el Kernel también se pasan al proceso mediante una llamada de esta función que inicia las señales enviando un mensaje KSIG al administrador de memoria.

Page 8: Dispositivos Por Bloques en Minix

Cuando el administrador termina con estas señales tipos KSIG envía un mensaje SYS_ENDSIG de vuelta a la tarea del Sistema. Este mensaje es manejado por do_ENDSIG que decrementa la cuenta de señales pendientes y si llega o cero apaga el bit SIG_PENDING para el proceso destinatario de la señal.

El mensaje SYS_COPY se necesita para que el sistema de archivos y el administrador de memoria puedan copiar la información a los procesos de usuarios.

Una forma de reducir la insuficiencia del mecanismo de transferencia de mensajes es empacar múltiples peticiones en un solo mensaje, el mensaje SYS_VCOPY se encarga de eso, el contenido de este mensaje es un apuntador a un vector que especifica múltiples bloques que deberán copiarse entre posiciones de memoria. La función do_VCOPY ejecuta un ciclo extrayendo las direcciones de origen, de destino y las longitudes de los bloques e invocando phis_copy repetidamente hasta finalizar todas las operaciones de copiado.

La tarea del sistema recibe dos mensajes durante el inicio de sistema, el sistema de archivos envía un mensaje SYS_GBOOT para solicitar parámetros de arranque, la función do_GBOOT lleva acabo esta operación que es un copiado de una parte de la memoria a otra. También durante el inicio el administrador de memoria envía a la tarea del sistema una serie de mensajes SYS_MEM para solicitar la base de los trozos de memorias disponibles.

El mensaje SYS_UMAP es utilizado por procesos fuera del Kernel para solicitar el cálculo de la dirección de la memoria física para una dirección virtual dada.

SYS_TRACE apoya la llamada al sistema PTRACE la cual se utiliza para depuración, con la ayuda de un sistema operativo un depurador puede inspeccionar y modificar la memoria utilizada por un proceso sometido a prueba.