Dispositivos Por Bloques en Minix

March 27, 2018 | Author: Jose Lenin Martinez Murillo | Category: Kernel (Operating System), Computer Memory, Random Access Memory, Process (Computing), Computer File


Comments



Description

DISPOSITIVOS POR BLOQUES EN MINIX Minix maneja varios dispositivos por bloques distintos el Disco en RAM, el Disco Duroy 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. 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. una vez finalizado el ciclo dr finish y luego se vuelve a copiar el arreglo de petición en el lugar donde se obtuvo. Software Controlador del Dispositivo de Bloques. Todas las llamadas pasan la estructura Driver como argumento desde el interior del Switch. . el invocador puede extraer el total de este arreglo. Los mensajes DEV_READ. dr Schedule y dr finish. SCATTERED_IO permite al sistema de archivos solicitar la lectura o escritura de múltiples bloques cuando es preciso escribir datos. 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. ejemplo: consulta o modificación de la forma en que un dispositivo esta divido en particiones. 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. en el Switch del ciclo principal los primeros tres tipos de mensajes DEV_OPEN. 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. Las operaciones de una petición deben ser todas lecturas o todas de escritura y estar ordenadas en orden de bloque dentro del dispositivo . 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 . esto lo verifica el Switch de las líneas 9165 a 9175. 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. Las definiciones que todos los controladores necesitan están Driver. después de efectuar toda la inicialización especifica del Hardware. 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. DEV_WRITE y SCATTERED_IO producen llamadas indirectas.IOCTL examina y modifica los parámetros operativos de dispositivos de E/S. DEy_GLOSE y DEV_IOCTL tienen como resultado llamadas indirectas empleando direcciones que se pasaron en la estructura Driver. El sistema de archivos es el único proceso que enviara mensajes a una tarea de controlador. el ciclo principal y las funciones compartidas de todas las tareas de controlador por bloque están en Driver C. pero una vez que se ha hecho esto se efectúan tres llamadas indirectas a las rutinas dependientes del dispositivo dr prepare. Cuando el controlador recibe un mensaje indicándole que lea o escriba un disco. . Un disco en Ram es mas sencillo ya que usa una porción preasignada de la memoria principal para almacenar los bloques. -los sistemas operativos pueden tener límites en cuanto al tamaño de dispositivo que pueden manejar.h y drvlib. la función de este controlador es reservar una parte de la memoria para ser usada como disco ordinario.c contienen códigos dependientes del sistema que maneja las particiones de disco en computadoras compatibles con IBM PC. partición primaria o subparticion. Entre las razones para dividir un disco en particiones tenemos: -la capacidad de disco. Las particiones permiten dividir un solo dispositivo de almacenamiento en subdispositivos. un numero de dispositivos secundario inicial y un parámetro que indica si el estilo de partición es disco flexible. En un sistema MINIX que fue diseñado en disco flexible. el disco flexible puede montarse y desmontarse a voluntad manejando a si medios removibles. 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. Discos en RAM Discos en Ram puede proporcionar acceso a cualquier parte de la memoria. sus argumentos incluyen una estructura driver para que pueda invocar funciones específicas del dispositivo. el disco en ram tiene una ventaja . 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. 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.Biblioteca de Controladores Loa archivos drvlib.-colocar una porción de los archivos de un sistema en un dispositivo lógico independiente.c se invoca cuando se abre por primera vez un dispositivo por 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. estos bloques se guardan en memoria giratorias como disco flexible o disco duros. Hardware y Software de Disco en RAM Un dispositivo por bloque es un medio de almacenamiento con dos comandos escribir y leer un bloque. La función partición en drvlib.si colocamos el dispositivo raíz en el disco en ram . 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. 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. 2:/dev/kmem. esta posición se usa para depuración y programas muy especiales. El tercero /dev/kmem: la dirección absoluta de esta posición varia dependiendo del tamaño del código del kernel en MINIX. El cuarto /dev/null este archivo acepta datos y los desecha. El segundo /dev/mem se utiliza para leer y escribir memoria física y memoria de kernel. 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. . Esto permite aumentar y reducir el tamaño del disco en Ram sin tener que recopilar el sistema operativo. 1:/dev/mem. 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. 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. 3:/dev/null. 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. luego do_Fork copia la entrada de tabla del proceso padre en la ranura del hijo. 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. 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 . En el caso de los dispositivos de memoria la primera de estas llamadas se hace a m_prepare. 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. su estructura impide escribirla simplemente en una tabla del Kernel. . la segunda llamada de a m_schedule que es la función que realiza todo el trabajo. El administrador de memoria utiliza el mensaje SYS_FORK para decirle al Kernel que a nacido un nuevo proceso .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. el mensaje contiene los números de ranura dentro de las tablas de procesos que corresponden al padre y al hijo. 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. 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.invoca el procedimiento de servicio apropiado y luego envía una repuesta. otro para planificar las operaciones de entrada y salida y una para terminar la operación. 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. 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. 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 después de llamar a EXEC Un proceso salió MM requiere al apuntador a la pila de un proceso FS requiere los tiempos de ejecución de un proceso Pánico: MINIX no puede continuar Envía una señal a un proceso Aseo después de completarse una señal Enviar una señal a un proceso después de la llamada KILL Aseo después de una señal del Kernel Copia datos entre procesos Copia múltiples bloques de datos entre proceso Obtiene parámetros de arranque MM requiere el siguiente trozo de memoria fisica Convierte direcciones virtuales en fisicas Realiza una operación de la llanada PTRACE . 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. SYS_TIMES este se necesita para implementar la llamada al sistema Times que devuelve los tiempos de contabilización al invocador. 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. SYS_GETSP en este el administrador de memoria lo usa para averiguar el valor de apuntador de pila actual de algún proceso. 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. el administrador de memoria le informa al Kernel usando el sistema SYS_XIT.El mensaje SYS_NEWNAP permite al administrador de memoria dar al Kernél el mapa de memoria de cualquier proceso. Cuando se debe de enviar una señal a un proceso. con objeto de ver si el segmento de datos y el segmento de pila han chocado. Este valor se necesita para las llamadas al sistema BRK y SBRK. . 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. 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. Los procesos pueden salir en MINIX ya sea ejecutando una llamada al sistema EXIT y envía un mensaje al administrador de memoria. El programador que escribe el manejador de señal al estilo POSIX incluye una instrucción. 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. 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. 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. el mensaje SYS_VCOPY se encarga de eso. 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. 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 tarea del sistema recibe dos mensajes durante el inicio de sistema. 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. 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. SYS_TRACE apoya la llamada al sistema PTRACE la cual se utiliza para depuración. 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 sistema de archivos envía un mensaje SYS_GBOOT para solicitar parámetros de arranque. Una forma de reducir la insuficiencia del mecanismo de transferencia de mensajes es empacar múltiples peticiones en un solo mensaje.Cuando el administrador termina con estas señales tipos KSIG envía un mensaje SYS_ENDSIG de vuelta a la tarea del Sistema. con la ayuda de un sistema operativo un depurador puede inspeccionar y modificar la memoria utilizada por un proceso sometido a prueba. la función do_GBOOT lleva acabo esta operación que es un copiado de una parte de la memoria a otra. 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.
Copyright © 2024 DOKUMEN.SITE Inc.