UNIVERSIDAD REY JUAN CARLOS Curso Académico 2005 / 2006 SERVIDOR DE FICHEROS 9P EN JAVA Autor: Jaime Garzón Pérez Tutor: Fco. J. Ballesteros Servidor de ficheros 9P en Java -1- Introducción Objetivos del proyecto PLAN 9 Cliente 9P LINUX MacOS Servidor 9P Servidor 9P Windows Servidor 9P Servidor de ficheros 9P en Java -2- Introducción Sistemas de ficheros en red Ø Acceder a ficheros remotos como si fuesen locales. Servidor Cliente Protocolo de ficheros en red Servidor de ficheros 9P en Java -3- Introducción Plan 9 Ø Sistema operativo de libre distribución, propiedades: · Todo es tratado como un fichero. · Recursos locales o remotos se tratan igual (Protocolo 9P). · Múltiples espacios de nombres. Servidor de ficheros 9P en Java -4- Introducción Protocolo 9P (1) Ø Es un protocolo de sistemas de ficheros en red. · Estructura Cliente-Servidor. · Comunicaciones dentro de una Sesión 9P. Cliente 9P Petición 9P (T-mensajes) Respuesta 9P (R-mensajes) Servidor 9P Servidor de ficheros 9P en Java -5- Introducción Protocolo 9P (2) Ø Tipos de mensajes 9P: · · · · · · · Establecimiento de conexion: attach, auth, version Manejo ficheros: open, create, read, write, remove Moverse por la jerarquia: walk Desechar un FID: clunk Acceso a atributos: stat, wstat Abortar mensajes: flush Retornar errores: error Servidor de ficheros 9P en Java -6- Introducción Protocolo 9P (3) Ø Ejemplo de mensajes 9P, lectura de un fichero: ... cli cli cli cli cli cli cli cli cli cli ... -> <-> <-> <-> <-> <- srv: srv: srv: srv: srv: srv: srv: srv: srv: srv: Twalk tag 11 fid 261 newfid 260 nwname 1 file Rwalk tag 11 nwqid 1 (0 0 1217401143) Topen tag 11 fid 260 mode 0 Ropen tag 11 qid (0 0 1217401143) iounit 0 Tread tag 11 fid 260 offset 0 count 8192 Rread tag 11 count 17 Tread tag 11 fid 260 offset 17 count 8192 Rread tag 11 count 0 Tclunk tag 11 fid 260 Rclunk tag 11 Servidor de ficheros 9P en Java -7- Diseño Diseño del Proyecto Ø Diseño modular Interfaz de acceso a recursos Recursos Recursos I/O I/O driver Procesado de Mensajes 9P Sesión 9P Interfaz tipo fichero Sesión 9P Mensajes 9P Mensajes 9P Recepción de nuevas conexiones driver RED Servidor de ficheros 9P en Java -8- Diseño Sesión 9P Ø Dentro de las Sesiones 9P, veremos: Sesión 9P (conexión) Interfaz de acceso a Recursos Petición / Respuesta R-Mensaje RPC T-Mensaje Lectura y escritura de mensajes. RED Mensajes 9P Servidor de ficheros 9P en Java -9- Implementación Implementación Sistema de ficheros Paquete PFS Tratamiento de mensajes. Paquete P9P fidtable server9P 4 8 pfid pfile pfid 6 pfid 5 rmsg9P 9 thread rpc9P tmsg9P 7 3 2 nuevas Conex. 10 1 Servidor de ficheros 9P en Java - 10 - Implementación Paquete P9P Ø Clases que forman el servidor 9P: · server9P Ø Clases relacionadas con el protocolo 9P: · msg9P, rpc9P msg9P tmsg9P tauth9P rpc9P rmsg9P rpc9Pauth rauth9P twalk9P rwalk9P rpc9Pwalk Servidor de ficheros 9P en Java - 11 - Implementación Paquete PFS Ø Usa un interfaz semejante al de un fichero. pfile · pfile representa un fichero. pfileramfs pfiledisk · pfid representa un descriptor de fichero. · fidtable es una tabla de descriptores con una estructura de pfiles. fidtable pfile pfid pfid pfid pfid pfile pfile Servidor de ficheros 9P en Java - 12 - Implementación Ejemplo 1: “Extracción y ejecución” msg9P.SetTypeMsg() Crea una instancia de msg9P rpc9P.getrpc() retorna la rpc 1 3 rcp9P 4 process() tmsg9P rmsg9P read() 2 54 F0 06 A64D FF 16 C4 .. .. .. .. 65 3F 3F C1 54 4D 00 16 A0 .. .. .. .. 00 write() Mensajes 9P como cadena de Bytes Servidor de ficheros 9P en Java - 13 - Implementación Ejemplo 2: “Inicio de un Servidor 9P” Ø El siguiente código muestra cómo se inicia una instancia de server9P. ... pfile pfileobj; pfileobj= new pfiledisk(path); ... server9P srv; srv=new server9PSE(16,64,port,show_msg,pfileobj); srv.ejecutar(); ... Servidor de ficheros 9P en Java - 14 - Pruebas Pruebas Ø Prueba de lectura de un fichero. term% srv tcp!192.168.1.5!5000 con9p term% mount –c /srv/con9p /tmp term% cat /tmp/dir1/file2 archivo 2 Servidor de ficheros 9P en Java - 15 - Conclusiones Conclusiones (I) Ø ¿Hemos cumplido los objetivos? · · · · Funcionamiento del servidor 9P Portabilidad. Modularidad. Eficiencia. Servidor de ficheros 9P en Java - 16 - Conclusiones Conclusiones (2) ¿Qué fue necesario hacer? · · · · Estructuras, métodos y RPCs de los mensajes de 9P. Implementación de un sistema de ficheros en memoria. Implementar interfaz de acceso a ficheros. Implementar programas de pruebas en varias plataformas. Servidor de ficheros 9P en Java - 17 - Conclusiones Conclusiones (3) Ø Conocimientos adquiridos en el desarrollo: · · · · Funcionamiento básico de PLAN 9. Programación en JAVA y orientación a objetos. Protocolos de sistemas de ficheros en red. Especificación del protocolo 9P y de sus mensajes. Servidor de ficheros 9P en Java - 18 -