67594.Pdf (1510Mb)
Total Page:16
File Type:pdf, Size:1020Kb
Títol: Transactional FileSystem Volum: 1/1 Alumne: Juan Luis Pérez Rico Director/Ponente: Toni Cortés Rosselló Departament: Arquitectura de Computadors Data: 27 de setembre de 2010 DADES DEL PROJECTE Títol del projecte: Transactional FileSystem Nom de l’estudiant: Juan Luis Pérez Rico Titulació: Enginyeria Informàtica (Pla 2003) Crèdits: 37.5 Director/Ponent: Toni Cortés Rosselló Departament: Departament d’Arquitectura de Computadors MEMBRES DEL TRIBUNAL (nom i signatura) President: Yolanda Becerra Fontal Vocal: Raimon Elgueta Montó Secretari: Toni Cortés Rosselló QUALIFICACIÓ Qualificació numèrica: Qualificació descriptiva: Data: Índex 1 Introducció1 1.1 Motivació personal........................1 1.2 Objectius.............................3 1.3 Metodologia............................3 1.4 Organització de la memòria...................4 1.5 Agraïments............................6 2 Conceptes bàsics9 2.1 Sistemes Transaccionals.....................9 2.1.1 Sistemes de fitxers transaccionals............ 11 2.2 Entorn Windows......................... 12 2.2.1 Introducció........................ 12 2.2.2 Components clau..................... 14 2.3 Altres conceptes.......................... 19 2.3.1 Memory Mapped File Functions............. 19 2.3.2 Windows Streams..................... 20 2.3.3 NTFS Reparse Points................... 22 2.4 Installable File System Drivers.................. 23 vi ÍNDEX 2.4.1 File System Drivers.................... 24 2.4.2 File System Filter Drivers................ 26 2.4.3 File System Minifilter Drivers.............. 28 2.5 Desenvolupament de minifilters................. 33 2.5.1 Instal·lació, càrrega i descàrrega del minifilter..... 34 2.5.2 Processament d’operacions d’entrada/sortida...... 36 2.5.3 Modificació de paràmetres................ 38 2.5.4 Problemàtica: Complexitat de les interaccions..... 39 3 Aproximació i anàlisi del projecte 43 3.1 Aproximació inicial i antecedents................ 43 3.2 Marc de desenvolupament.................... 45 3.3 Factibilitat............................. 48 4 Desenvolupament del projecte 51 4.1 Model inicial........................... 52 4.2 Consideracions i reavaluació................... 58 4.3 Model final............................ 60 4.4 Ampliacions i optimitzacions................... 68 4.4.1 Contenidor de fitxers................... 68 4.4.2 Write mapping...................... 77 4.4.3 Garbage Collector..................... 80 5 Anàlisi temporal i econòmic 85 5.1 Anàlisi temporal......................... 85 5.2 Anàlisi econòmic......................... 89 ÍNDEX vii 6 Resultat i conclusions 91 6.1 Sumari............................... 92 6.2 Valoració d’objectius....................... 95 6.3 Treball futur............................ 96 6.4 Valoració personal........................ 98 A Entorn de desenvolupament 101 A.1 Windows Driver Kit....................... 101 A.2 Arquitectura............................ 104 A.3 Configuració............................ 106 A.3.1 Configuració inicial.................... 106 A.3.2 Configuració final..................... 110 B Eines de suport al desenvolupament 113 B.1 FileTest.............................. 114 B.2 FileSpy............................... 115 B.3 SGLIB............................... 118 Bibiliografia 123 Índex de figures 2.1 Esquema de transacció concurrent sobre un mateix fitxer.... 11 2.2 Arquitectura Windows simplificada............... 12 2.3 I/O Manager dins l’arquitectura del control de dispositius... 17 2.4 Model conceptual dels Streams.................. 21 2.5 Flux dels File Sytem Driver i dels Disk Driver.......... 25 2.6 Filter Driver en la jerarquia de controladors de Windows.... 27 2.7 Flux de petició d’entrada/sortida amb Minifilters....... 30 2.8 Flux de petició d’entrada/sortida amb Minifilter Frames... 31 2.9 Esquema del conjunt d’interaccions entre els diferents compo- nents del nucli de Windows sota la perspectiva del desenvolu- pament en el seu sistema de fitxers................ 41 4.1 Begin Transaction i End Transaction .............. 54 4.2 Esquema de reparsing...................... 61 4.3 Diagrama d’activitat precreate callback............. 64 4.4 Diagrama d’activitat precleanup callback............ 65 4.5 Esquema del contenidor..................... 70 x ÍNDEX DE FIGURES 4.6 Diagrama d’activitat de l’operació d’inserció al Contenidor, TxAddToContainer ........................ 75 4.7 Diagrama d’activitat de l’operació d’inserció al Contenidor, TxGetContainerElement ..................... 76 4.8 Diagrama de la llista d’escriptures................ 79 4.9 Diagrama d’activitat prewrite callback amb container..... 79 4.10 Diagrama d’activitat de la rutina del TxGarbageCollector ... 82 5.1 Diagrama de Gantt planificació................. 88 A.1 Configuració de la pipe de comunicació del Target en VMware. 108 B.1 Captura de la finestra de suport a la crida Createfile per part de FileTest............................. 115 B.2 Part I i II d’una captura de FileSpy............... 117 B.3 Part III d’una captura de FileSpy................. 118 Índex de taules 5.1 Càlcul cost total hores projecte.................. 90 5.2 Càlcul costos recursos materials.................. 90 5.3 Càlcul total de costos....................... 90 Codi explicatiu 2.1 Definició de la rutina DriverEntry ................ 35 2.2 Registre del minifiltre fent servir la funció FltRegisterFilter .. 35 2.3 Iniciació del minifiltre mitjançant la crida a la funció FltStart- Filtering .............................. 35 2.4 Descàrrega del minifiltre mitjançant la crida a una funció Fil- terUnloadCallback ......................... 36 2.5 Exemple de registre de rutines de preoperation i postoperation callcaback.............................. 37 2.6 Definició d’una rutina de preoperation callback.......... 37 2.7 Definició d’una rutina de postoperacion callback......... 38 2.8 Sintaxis per FLT_IO_PARAMETER_BLOCK......... 39 4.1 Registre de rutines de preoperation i postoperation callcaback.. 54 4.2 Pseudocodi per la primera implementació de TxPreCreate... 55 4.3 Pseudocodi per la primera implementació de TxPreCleanup.. 55 4.4 Pseudocodi per la primera implementació de TxPreWrite.... 56 4.5 Comprovació de buffers...................... 57 4.6 Definició de la rutina IoReplaceFileObjectName......... 62 4.7 Modificació d’entrada/sortida a REPARSE........... 63 xiv CODI EXPLICATIU 4.8 Definició de ZwOpenKey ..................... 66 4.9 Definició de InitializeObjectAttributes .............. 66 4.10 Definició de ZwQueryValueKey ................. 67 4.11 Exemple d’ús de ZwQueryValueKey ............... 67 4.12 Definició de ZwClose ....................... 68 4.13 Declaració del Contenidor .................... 70 4.14 Definició de RTL_GENERIC_TABLE ............. 72 4.15 Definició de RtlInitializeGenericTable .............. 72 4.16 Definició de CompareRoutine ................... 73 4.17 Definició de AllocateRoutine ................... 73 4.18 Definició de FreeRoutine ..................... 73 4.19 Implementació de CompareRoutine ............... 73 4.20 Implementació de TxAddToContainer .............. 75 4.21 Implementació de TxGetContainerElement............ 76 4.22 Marcar fitxer per esborrat..................... 80 4.23 Marcar fitxer per esborrat amb TxGarbageCollector....... 81 4.24 Implementació rutina TxGarbageCollector............ 82 B.1 Definició de WRITING_LIST................... 119 B.2 Definició de la comparator function................ 119 B.3 Definició de les macros per les funcions de SGLIB........ 120 B.4 Ús de la funció sglib_WRITING_LIST_add........... 121 B.5 Exemple de modificació del codi de SGLIB........... 122 B.6 Segon exemple de modificació del codi de SGLIB........ 122 Capítol 1 Introducció Aquest projecte final de carrera s’ha orientat en el desenvolupament en el sistemes de fitxers amb l’objectiu d’explorar les seves possibilitats en l’entorn de Microsoft, intentant obtenir les especificacions dels sistemes transaccionals en el seu comportament. Es vol analitzar les possibilitats pel desenvolupament del sistema de fit- xers de Windows a baix nivell, els seus requeriments, les seves limitacions i l’entorn necessari. 1.1 Motivació personal Aquest PFC neix de l’interès personal per realitzar un projecte en col·laboració amb el grup de recerca d’Storage Systems del BSC per tal de realitzar el pro- jecte final de carrera en un marc de recerca i investigació. 2 Introducció En els últims quadrimestres de la carrera vaig començar a tenir la inquie- tud de viure una experiència en el camp de la recerca, aleshores vaig tenir la sort de conèixer en Toni Cortés que em va obrir les portes a poder realitzar una col·laboració futura, ja que en aquells moments m’era impossible realit- zar el projecte a plena dedicació tal i com desitjava. Després de la finalització de les assignatures necessàries per completar l’Enginyeria Informàtica vaig esperar el moment adient dins el marc laboral per poder viure l’experiència de la realització d’un projecte d’investigació a plena dedicació. Aquest PFC és la realització d’aquest desig, que degut a la impossibilitat de poder-se realitzar en plenitud en un àmbit de compatibilització amb la feina, em vaig esperar el temps necessari per trobar l’escenari adequat per la seva consecució. Així doncs, una vegada els condicionants personals es van complir, vaig anar a veure en Toni Cortés per tal de trobar un projecte prou engrescador. Després d’avaluar algunes alternatives, vàrem decidir veure quines possi- bilitats de modificació del comportament del sistema de fitxers de Windows existien i com es podien portar a terme. Dins d’aquest escenari en Toni em va proposar