You are on page 1of 8

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 compilacin 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 cdigo ejecutable del kernel permitiendo el compartimiento de una cantidad considerable del cdigo. Cada controlador de dispositivo por bloque tiene que hacer algo de inicializacin, el controlador del Disco RAM tiene que reservar memoria, el controlador del Disco Duro determinara los parmetros del Hardware del disco. Todos los controladores de Disco se invocan individualmente para la inicializacin especifica del Hardware despus el controlador invoca la funcin que contiene el ciclo principal comn. Dentro del ciclo principal se recibe un mensaje, se invoca una funcin que realice la operacin requerida por cada mensaje y se genera el mensaje de respuesta, solo hay una copia del cdigo del ciclo principal en el binario de minix. Esta tcnica consiste en hacer que cada uno de los controladores individuales pase al ciclo principal un parmetro que consta de un puntador a una tabla la cual consiste indirectamente a estas funciones. En la Memoria solo hay una copia del cdigo 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 cdigo y cada uno opera con su propio conjunto de datos y tienen su propia pila. Operaciones 1. 2. 3. 4. 5. 6. Open(abrir) Close(cerrar) Read(leer) Write(escribir) IOCTL(control de E/S) 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.

IOCTL examina y modifica los parmetros operativos de dispositivos de E/S, ejemplo: consulta o modificacin de la forma en que un dispositivo esta divido en particiones. SCATTERED_IO permite al sistema de archivos solicitar la lectura o escritura de mltiples 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 mltiples bloques pueda efectuarse de manera mas eficiente que si atienden cada peticin en el momento en que llega, en una peticin de SCATTERED_IO para leer o escribir la lista de bloques solicitados estn ordenados y esto hace la operacin mas eficiente que si atiende las operaciones al azar y como solo se hace una sola llamada al controlador para transferir mltiples bloques se reduce el nmero de mensajes enviados dentro de MINIX. Software Controlador del Dispositivo de Bloques. Las definiciones que todos los controladores necesitan estn Driver, el ciclo principal y las funciones compartidas de todas las tareas de controlador por bloque estn en Driver C. despus de efectuar toda la inicializacin especifica del Hardware, cada controlador invoca Driver_Task pasando una estructura Driver como argumento de la llamada despus de obtener direccin 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 lneas 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 peticin 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 peticin debe copiarse en el espacio de Kernel, pero una vez que se ha hecho esto se efectan 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 peticin o hasta que ocurre un error, una vez finalizado el ciclo dr finish y luego se vuelve a copiar el arreglo de peticin 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.

Biblioteca de Controladores Loa archivos drvlib.h y drvlib.c contienen cdigos 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 comnmente en los discos duros pero MINIX tambin proporciona apoyo para la divisin 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 lmites en cuanto al tamao de dispositivo que pueden manejar,-colocar una porcin de los archivos de un sistema en un dispositivo lgico independiente. La funcin particin 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 especficas del dispositivo, un numero de dispositivos secundario inicial y un parmetro que indica si el estilo de particin es disco flexible, particin primaria o subparticion. Discos en RAM Discos en Ram puede proporcionar acceso a cualquier parte de la memoria, la funcin de este controlador es reservar una parte de la memoria para ser usada como disco ordinario. En un sistema MINIX que fue diseado en disco flexible, el disco en ram tiene una ventaja ,si colocamos el dispositivo raz 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 porcin preasignada de la memoria principal para almacenar los bloques, el disco en Ram ofrece acceso instantneo 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 tamao que los bloques empleados en los discos reales. Cuando el controlador recibe un mensaje indicndole 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 mxima rapidez del que el sistema es capaz.

Memoria Principal(RAM)

Programa de usuario

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

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 tamao ni su origen estn incorporados en el cotrolador estas caractersticas los determina el sistema de archivos cuando se arranca MINIX, por omisin se crea un disco en Ram con el mismo tamao que el dispositivo imagen del sistema de archivo de raz a fin de poder copiar en el dicho sistema de archivos, una vez ya determinado el tamao 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 tamao del disco en Ram sin tener que recopilar el sistema operativo. El segundo /dev/mem se utiliza para leer y escribir memoria fsica y memoria de kernel. Cuando se abre y lee /dev/mem se obtiene el contenido de las posiciones de memoria fsicas comenzando por la direccin de memoria absoluta cero(los vectores de interrupcin en modo real) al abrirse tambin en el se modifica los vectores de interrupcin. El tercero /dev/kmem: la direccin absoluta de esta posicin varia dependiendo del tamao del cdigo del kernel en MINIX, esta posicin se usa para depuracin y programas muy especiales. El cuarto /dev/null este archivo acepta datos y los desecha.

Implementacin del Controlador del Disco en Ram en MINIX En una operacin de lectura o escritura el ciclo principal efecta tres llamados una para preparar un dispositivo, otro para planificar las operaciones de entrada y salida y una para terminar la operacin. En el caso de los dispositivos de memoria la primera de estas llamadas se hace a m_prepare, esta funcin comprueba que se haya solicitado un dispositivo secundario valido y luego devuelve la direccin de la estructura que contiene la direccin base y el tamao de rea solicitada y el tamao del rea de ram solicitada, la segunda llamada de a m_schedule que es la funcin que realiza todo el trabajo. Los dispositivos de memoria no necesitan un tercer paso para terminar una operacin 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 informacin 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 comunicrselo a la tarea del Kernel por medio del mecanismo de mensajes estndar 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 enva 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 nmeros 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 seal pendiente para el padre y no hereda la situacin de rastreo para el padre asi toda la informacin de contabilidad del hijo se pone en cero, es despus de un Fork el administrador de memoria asigna memoria al hijo.

Tipo de mensaje SYSFORK SYSNEWMAP SYSGETMAP SYSEXEC SYSXIT SYSGETSP SYSTIME SYSABORT SYSSENDSIG SYSSIGRETURN SYSKILL SYSENDSIG SYSCOPY SYSVCOPY SYSGBOOT SYSMEM SYSUMAP SYSTRACE

De MM MM MM MM MM MM FS Ambos MM MM FS MM Ambos Ambos FS MM FS MM Un proceso bifurco

Significado

MM instala mapa de memoria para un nuevo proceso MM requiere el mapa de memoria de un proceso Establece el apuntador a la pila despus de llamar a EXEC Un proceso sali MM requiere al apuntador a la pila de un proceso FS requiere los tiempos de ejecucin de un proceso Pnico: MINIX no puede continuar Enva una seal a un proceso Aseo despus de completarse una seal Enviar una seal a un proceso despus de la llamada KILL Aseo despus de una seal del Kernel Copia datos entre procesos Copia mltiples bloques de datos entre proceso Obtiene parmetros de arranque MM requiere el siguiente trozo de memoria fisica Convierte direcciones virtuales en fisicas Realiza una operacin de la llanada PTRACE

El mensaje SYS_NEWNAP permite al administrador de memoria dar al Kernl 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 informacin de mapas de procesos en la direccin 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 enva 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 algn 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 contabilizacin al invocador. SYS_ABORT entra en pnico 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 sper bloque en el dispositivo de raz se ha corrompido irremediablemente entra en pnico y enva un mensaje SYS_ABORT al Kernel. Cuando se debe de enviar una seal a un proceso, se enva el mensaje SYS_SENDSIG a la tarea del sistema y el trabajo es efectuado por do_SENSIG que consiste solo en colocar la informacin requerida en la pila de proceso destinatario de la seal y ajustar al contador de programa y al apuntador de la pila de dicho proceso de modo que el cdigo de manejo de seales se ejecute la siguiente vez que el planificador permita que el proceso se ejecute. El programador que escribe el manejador de seal al estilo POSIX incluye una instruccin. RETURN pero la manipulacin de la pila por parte de la llamada SENDSIG hace que la instruccin RETURN cause una llamada al sistema SIGRETURN. El administrador de memoria entonces enva 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 seal. Las seales que se originan en el sistema de archivos tambin son manejados primeros por el Kernel. El sistema de archivos usa SYS_KILL para solicitar la generacin de una seal de este tipo este mensaje es manejado por do_KILL que realiza la verificacin usual de la validez del origen del mensaje y luego invoca CAUSE-SIG para pasar la seal al proceso, las seales que se originan en el Kernel tambin se pasan al proceso mediante una llamada de esta funcin que inicia las seales enviando un mensaje KSIG al administrador de memoria.

Cuando el administrador termina con estas seales tipos KSIG enva un mensaje SYS_ENDSIG de vuelta a la tarea del Sistema. Este mensaje es manejado por do_ENDSIG que decrementa la cuenta de seales pendientes y si llega o cero apaga el bit SIG_PENDING para el proceso destinatario de la seal. El mensaje SYS_COPY se necesita para que el sistema de archivos y el administrador de memoria puedan copiar la informacin a los procesos de usuarios. Una forma de reducir la insuficiencia del mecanismo de transferencia de mensajes es empacar mltiples 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 mltiples bloques que debern copiarse entre posiciones de memoria. La funcin 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 enva un mensaje SYS_GBOOT para solicitar parmetros de arranque, la funcin do_GBOOT lleva acabo esta operacin que es un copiado de una parte de la memoria a otra. Tambin durante el inicio el administrador de memoria enva 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 clculo de la direccin de la memoria fsica para una direccin virtual dada. SYS_TRACE apoya la llamada al sistema PTRACE la cual se utiliza para depuracin, con la ayuda de un sistema operativo un depurador puede inspeccionar y modificar la memoria utilizada por un proceso sometido a prueba.