El n´ucleo central del sistema de ficheros MAPFS lo constituye el subsistema de ficheros, tambi´en denominado MAPFS FS. Este subsistema se encarga de implementar la interfaz del sistema de fi- cheros, proporcionando paralelismo y caracter´ısticas adicionales que incrementan el rendimiento y la funcionalidad del mismo.
La funcionalidad que proporciona el sistema de ficheros MAPFS queda reflejada en la interfaz del mismo.
La mayor´ıa de los sistemas de ficheros paralelos existentes utilizan una interfaz al estilo UNIX y se limitan a ofrecer operaciones de apertura, cierre, lectura, escritura y posicionamiento de ficheros, no mostrando a los usuarios la estructura paralela de los ficheros, ni permitiendo ofrecer optimizaciones del acceso y uso de los mismos, del cual se podr´ıan beneficiar si no se ocultara dicha caracter´ıstica.
Estas interfaces tan simples no son apropiadas en sistemas paralelos, cuyas aplicaciones realizan una gran cantidad de accesos concurrentes a ficheros y tienen patrones de acceso m´as complejos.
Por otro lado, dada la caracter´ıstica de tolerancia a fallos con la cual se desea dotar a MAPFS, tambi´en ser´a necesario ofrecer operaciones relativas a dicha caracter´ıstica.
Extendiendo la interfaz de los sistemas de ficheros tradicionales y distribuidos, MAPFS va a pro- porcionar cinco tipos de operaciones, que se enumeran a continuaci´on. Todas las operaciones recogidas en esta secci´on son descritas de forma detallada en el ap´endice A.
1. Operaciones b´asicas:Se trata de las operaciones t´ıpicas de un sistema de ficheros. En principio, MAPFS permite la utilizaci´on de un subconjunto de las primeras:
mapOpen(): operaci´on de apertura de fichero.
mapClose(): operaci´on de cierre de fichero.
mapCreat(): operaci´on de creaci´on de fichero.
mapReadContig(): operaci´on de lectura contigua de ficheros.
mapWriteContig(): operaci´on de escritura contigua de ficheros.
mapSeek(): operaci´on de modificaci´on de puntero.
mapFcntl(): operaci´on para establecer u obtener informaci´on sobre un fichero abierto.
2. Operaciones avanzadas: En este apartado se contemplan todas aquellas operaciones adicio- nales que presentan los sistemas de ficheros paralelos y que le permiten a˜nadir funcionalidad y mejora de rendimiento al mismo, excepto las operaciones de E/S colectiva, que se han distinguido en su propio apartado.
Las aplicaciones paralelas necesitan frecuentemente leer o escribir datos que est´en localizados de forma no contigua en los ficheros e incluso en memoria. Las operaciones mapReadStrided()y
mapWriteStrided() son versiones bloqueantes de las llamadasread()ywrite()que soportan
cualquier tipo de acceso no contiguo que pueda expresarse mediante los par´ametros que reciben. La interfaz del sistema de ficheros MAPFS proporciona versiones no bloqueantes de todas sus llamadas de lectura y escritura.
Los nombres de este tipo de operaciones se forman a˜nadiendo el sufijoIal nombre de la opera- ci´on original. Como ejemplo, la operaci´on mapIreadContig()es la versi´on no bloqueante de la operaci´onmapReadContig().
Para operaciones no bloqueantes, se establece un mecanismo decallback, de forma que se pueda especificar una operaci´on que se lleve a cabo cuando una operaci´on no bloqueante haya finalizado.
5.4. SUBSISTEMA DE FICHEROS DE MAPFS 81
La interfaz del sistema de ficheros MAPFS proporciona versiones con posibilidad de establecer
callbackspara todas las operaciones no bloqueantes de lectura y escritura.
Los nombres de este tipo de operaciones se forman a˜nadiendo el sufijo Cal al nombre de la operaci´on original. Como ejemplo, la operaci´on mapCalReadContig()es la versi´on bloqueante de la operaci´onmapReadContig().
3. Operaciones colectivas: Se trata de operaciones orientadas a proporcionar paralelismo al sistema. Para ello hacemos uso del concepto de E/S colectiva, muchas veces utilizado en la bibliograf´ıa de sistemas de ficheros paralelos.
Si procesos que realizan transferencias de grandes cantidades de datos, l´ogicamente relacionados, hacen uso de la interfaz que proporciona un sistema de ficheros tradicional, est´an obligados a hacerlo a trav´es de m´ultiples peticiones peque˜nas no contiguas, perdi´endose el sentido de una ´
unica transferencia grande. Por el contrario, si se hace uso de una interfaz colectiva, se permite a dichos procesos realizar una ´unica petici´on grande, lo que permite que el sistema de E/S pueda incrementar el rendimiento de dicha transferencia de datos.
Para permitir el uso de E/S colectiva, MAPFS proporciona versiones colectivas de todas las rutinas de lectura y escritura, tanto operaciones contiguas como no contiguas. Una rutina co- lectiva debe ser invocada por todos los procesos pertenecientes al grupo que abra el fichero. Sin embargo, una rutina colectiva no implica necesariamente una barrera de sincronizaci´on entre dichos procesos. Eso depender´a de la sem´antica de las operaciones.
Los nombres de este tipo de operaciones se forman a˜nadiendo el sufijo Coll al nombre de la operaci´on original. Como ejemplo, la operaci´onmapReadContigColl()es la versi´on colectiva de la operaci´onmapReadContig().
4. Operaciones miscel´aneas:Algunas operaciones adicionales para la gesti´on de ficheros son las siguientes:
mapDelete():Operaci´on para eliminar un fichero.
mapResize():Operaci´on para redimensionar un fichero.
mapRename():Operaci´on para modificar el nombre de un fichero.
mapInit():Operaci´on para abrir una sesi´on, inicializando par´ametros de configuraci´on y
estructuras de datos.
mapFinish():Operaci´on para cerrar una sesi´on, liberando estructuras de datos.
5. Operaciones de tolerancia a fallos y cache: Las caracter´ısticas de tolerancia a fallos y
caching deben proporcionarse de una forma transparente. Por tanto, los usuarios no pueden utilizar estas operaciones y no aparecen en la interfaz de usuario de MAPFS. Son operaciones internas, que lleva a cabo el sistema multiagente. Estas operaciones consisten en:
Operaciones relacionadas con la recuperaci´on de datos (disponibilidad de los datos). Sincronizaci´on entre la cache y el dispositivo de almacenamiento secundario.
Coherencia de cache.
No obstante, MAPFS ofrece operaciones a las aplicaciones de usuario para configurarhintsque permiten incrementar el rendimiento de las operaciones decachingyprefetching(v´ease la secci´on 8.5).
La interfaz del sistema de ficheros MAPFS se ha dise˜nado en base a la interfaz ADIO [RTL96]. ADIO consiste en una interfaz de bajo nivel est´andar para E/S paralela. Esta interfaz no est´a pensada para utilizarse directamente por programadores de aplicaciones, sino a nivel del sistema operativo, por desarrolladores de bibliotecas.
5.4.1. Modelo de fichero en MAPFS
El fichero es el objeto b´asico y fundamental de un sistema de ficheros. Por tanto, es necesario en todo sistema de ficheros dise˜nar la estructura de un fichero gen´erico, que debe contener la metainformaci´on necesaria para describir el mismo. A esta estructura se le va a denominarmap-node. La informaci´on que a priori va a ser necesaria incluye:
Nombre global del fichero: Este nombre debe proporcionar transparencia de localidad. El nombre global debe representar de forma un´ıvoca el fichero al que referencia. Esta informaci´on al igual que ocurre en UNIX no debe encontrarse en el map-node, sino que debe encontrarse en las entrada del directorio que contenga dicho fichero. La diferencia estriba en el caso del modelo de subficheros, el cual podr´ıa tener diferentes nombres l´ogicos en cada uno de los nodos en los que se distribuye.
Tama˜no del fichero: Representa el tama˜no en bytes del fichero.
Flag para diferenciar el tipo de modelo: Flagque diferencie el tipo de modelo que se va a utili- zar en la paralelizaci´on del acceso a los ficheros (modelo de subficheros o modelo de distribuci´on c´ıclica).
Posici´on: Apuntador a la posici´on del fichero en un dispositivo. Para determinar dicha posici´on, es necesario tener almacenado el dispositivo y posici´on relativa a ese dispositivo en el cual se encuentra el apuntador, en el caso de un modelo de distribuci´on c´ıclica y el nombre del subfichero y posici´on relativa a dicho subfichero en el caso de un modelo de subfichero.
Protecci´on: Control de acceso y permisos para la realizaci´on de las diferentes operaciones sobre el fichero.
Tiempos: Tiempos de creaci´on, de acceso y de modificaci´on, al estilo del sistema de ficheros de UNIX.
Identificaci´on de usuario: Identificaci´on del due˜no y del grupo al que pertece el due˜no del fichero.
Hints o pistas: Se pueden establecer pistas para incrementar el rendimiento de acceso y modificaci´on de los ficheros. Estas pistas pueden ser proporcionadas por la aplicaci´on o bien pueden ser construidas por el sistema multiagente asociado.
Estructura que apunta a los datos del fichero: Esta estructura depende del tipo de modelo an- terior y, por tanto, del valor que toma el flag. Si se trata de un modelo de distribuci´on c´ıclica, esta estructura consiste en una lista con la localizaci´on del fichero a trav´es de los m´ultiples dis- positivos (en concreto, una lista encadenada de posiciones a trav´es de los distintos dispositivos que forman el sistema). Si se trata de un modelo de subficheros, esta estructura consiste en una lista de los subficheros y tama˜no de las porciones correspondientes a dichos subficheros por los que est´a formado el fichero original.