A cada grupo se le da un paper de USENIX por ejemplo, el cual tienen que leer (traducir?), entender, exponer y si dá, mostrar alguno de los resultados.
Me parece bueno respecto al “tema de investigacion” porque
Cons:
(nico) Resumen de una charla con MartínD
Parece más que viable, ver reporte de Algoritmos2. Discutir el horario.
En algún momento van a usar el apunte de strings.
(julio) Los labs del año pasado fueron Baash, sincronización de threads, Kernel, el nuevo, y los de investigación. ¿Se mantendría esa estructura?
(nico) Copio la estructura acá abajo:
Creación, espera, muerte de procesos. Redirecciones. Parseo. Estructura de datos no trivial. División en módulos. Programación defensiva.
Detección, explicación y solución de problemas de concurrencia en hilos. Dos problemas: una “función” int→void* implementado con un arreglo, una “función” char*→char* implementada con un rbtree.
Un clásico. Sincro in-kernel. Exploración de todo el software stack a través de programas userspace y printk allá abajo.
A partir de trazas reales de malloc,realloc,free, implementar políticas para un alocador de bloques de tamaño fijo en un pool de memoria (firstfit, bestfit, etc.)
(julio) El año pasado se implementó el lab ¿4?, en el cual se trabajaba sobre el manejo de recursos, según recuerdo. Me parece que deberíamos replantearlo, porque me pareció que no fue fácil de comprender.
(pelado) Si van a repetir el práctico, estaría bueno pedirles que agreguen las políticas usando dlopen (como plugins…)
(rafa) Uy, bendita memoria mia que es un fiasco, me engañaron en la repartición, jej.
Recuerdo que habiamos tenido problemas porque no había cantidad ni calidad de trazas reales, creo que había 1 sola que la usábamos de a pedasos para simular otras trazas o que nunca la usábamos por completo. Estaría bueno hacer trazas “oficiales”(entregadas por SO) de algo que le propuso Beatriz ;) a algunos grupos que es hacer algunas a manopla, cortitas con resultados faciles de calcular a lapiz y papel. O hace un programillo simple que genere algunas trazas simples. Todo esto como para que los chicos puedan comprobar que están haciendo las cosas bien cuando están a mitad de camino.
Me acuerdo también que se hubo mucha incertidumbre porque las estadísticas que generaba el driver parecían “raras” y no había FORMA en el mundo de verificarlas en una traza gigante y stressing(para el software) como la que había.
También tuve problemas con mis grupos para exigirles que hicieran la política custom. Todo el mundo me venía con worst fit… o sea, no gastaban NI UN SEGUNDO en pensar si podían hacer algo mejor.
* Las trazas tienen una pinta que no se adapta bien a un memory manager que tienen páginas de tamaño fijo, ya que hay quichicientos pedidos de bloques pequeños. Eso lleva a que no haya tanta difierencia a la hora de medir fragmentación interna, externa.
Mmm, tal vez por esto las mediciones parecían raras.
* Se les dio tanto tanto código de soporte que lo que ellos tenían que codificar fue muy poco, ?una centena de líneas?
Si, la verdad que era muy pobre lo que tenían que escribir. Pero se compensaba por un lado porque tenían pinta de no entender NADA de lo que tenían que hacer… no sé… tampoco era tan difícil, no?
Si se quisiera darles más trabajo se les podría pedir que implementen ellos el bitmap, la tabla hash o el programa que parsea el trace, creo que cualquiera de los tres es fácil de hacer.
* Faltó darles la tarea de que ellos mismos extrajeran las trazas de varios programas para testear contra sus políticas y ver que los “patrones de uso” son salvajemente distintos.
Estaría bueno, aunque creo recordar que era medio bardo conseguirlas… Charly se habia puesto con eso, no?
>(nico) Lab4, memory allocation se puede arreglar haciendo que implementen un [[http://en.wikipedia.org/wiki/Buddy_memory_allocation|Buddy Allocator]]. Lo que faltaría ver es si hay diferentes “políticas” de placement para luego medir fragmentación. Parece que algo hay [[http://lwn.net/Articles/126592/|aca]]. >Otra posibilidad es manejar bloques fijos pero realmente chicos (una palabra?) como dice en este glosario acerca del [[http://www.memorymanagement.org/glossary/b.html#bitmapped.fit|bitmapped fit]]. ?Será terrible el overhead? >Probablemente hay que leer esto: Paul R. Wilson, Mark S. Johnstone, Michael Neely, David Boles. 1995. Dynamic Storage Allocation: A Survey and Critical Review. University of Texas at Austin. Abstract. [[http://www.cs.utexas.edu/users/oops/papers.html#allocsrv|Online]].
(nico) Pichu se plantea upgradear todos los kernels (Debian?) a 2.6.x antes de empezar el cuatrimestre.
Horario Teórico: mie, vie 16 a 18 Lab: mie, vie 18 a 20
Daniel plantea armar un esqueleto de KSamp bien hecho (coding style, TADs, asserts, manejo de errores de llamados a bibliotecas), pero con algunas cosas mal hechas en todos estos aspectos, más el agregado de alguna funcionalidad que falta.
> (nico) usar sysfs?
Entrega la semana que sigue, no tiene un gran peso en la nota final, y sirve de warm-up para lo que sigue. Intentamos aprovechar el tiempo de un Lab1 de 4 semanas donde la 1ra no se hace nada.
Cosas a solucionar:
Idem como en la recursión: “pibe/a, supone que para n está resuelto, como resolves para n+1”.
Matías y alguien más trabajará en este nuevo Lab.
Bianco y Hames a cargo de subirlo a 2.6 (documentación, ejemplo de hello world, ejemplo de /dev/cero, scripts de carga descarga).
Nico a cargo de toquetear esto para que produzca resultados significativos.
Natalia apuntó a que las investigaciones del estilo “NTFS” apestan, Luis dijo que las investigaciones bibliográficas apestan. Entonces: generar nuevos proyectos que tengan cosas para probar.
Por ejemplo:
Poner acá abajo las propuestas con buen nivel de detalle asi hacemos copy&paste.
Este trabajo consiste en tratar de encontrar respuestas a este tipo de preguntas midiendo la performance de aplicaciones de uso común en PCs de escritorio o servidores corriendo Linux 2.6.22/23, FreeBSD 6.1-RELEASE/7.0-CURRENT, OpenBSD 4.1/4.2, Windows XP/Vista/2003 Server/2008 Server.
Los sistemas de archivos tienen diseños distintos según el uso que se les quiere dar. ¿Cómo afectan estas decisiones a la performance del sistema de archivos? Comparar la performance de filesystems para discos rígidos (ext3/4, reiserfs3/4, NTFS, XFS, JFS, ZFS), medios ópticos (ISO9660, UDF), memoria flash (LogFS, JFFS2, YAFFS) en distintos medios.
Los usuarios de DOS y Windows (en especial aquellos que no usan NTFS sobre NT, XP o Vista)saben por conocimiento popular que periodicamente hay que correr “defrag” para que la computadora ande “más rápido”. El proyecto consiste en validar y cuantificar estas nociones. Las tareas para hacer son:
Un sistema operativo de escritorio moderno (en este trabajo, GNU/Linux) puede demorar más de un minuto desde que empieza a arrancar hasta que el usuario puede interactuar con las aplicaciones (por ej: la pantalla de login). En este intervalo de tiempo, hay múltiples esperas de disco (se leen cientos/miles de archivos), como también esperas de CPU (se inician muchos procesos, se configura hardware) o de red. Una forma de acelerar este proceso es, al principio del arranque, lanzar un proceso en paralelo que lea del disco los bloques que son necesarios por el proceso de arranque. Esto tiene un costo bajo en CPU, y reduce mucho las esperas de disco de los procesos iniciandose (se paraleliza la lectura a disco con otras tareas no atadas a disco del arranque). El trabajo incluye:
* Construir un mecanismo para registrar en un arranque normal la lista de bloques requeridos * Armar un programa que lea esta lista, e instalarlo al inicio del arranque de un sistema Linux * Medir cuanta mejora produce.
Boot loading:
http://it.wikipedia.org/wiki/Boot_loader
http://www.osdev.org/wiki/Bootloader
http://www.viralpatel.net/taj/tutorial/hello_world_bootloader.php
http://msdn2.microsoft.com/en-us/library/ms901837.aspx
http://linuxdevices.com/articles/AT5085702347.html
Build your own operating system:
Investigar el proceso de desarrollo de un sistema operativo.
Basar el estudio en MikeOS:
http://mikeos.sourceforge.net/
http://mikeos.sourceforge.net/handbook.html
http://mikeos.sourceforge.net/handbook.html#firstos
http://nasm.sourceforge.net/
http://fabrice.bellard.free.fr/qemu/
Basar el estudio en GeekOS
http://geekos.sourceforge.net/
http://gcc.gnu.org/
http://bochs.sourceforge.net/
Implementar un sistema de archivos en espacio de usuario, que ahorre espacio mediante el uso de block hashes para identificar cada bloque y asi poder almacenar una sola vez cada bloque sin importar la cantidad de veces aparece en el sistema de archvos.
Implementar un sistema de archivos en espacio de usuario, que encripte lo bloques para que solo pueda ser leído con exito por lo usuarios que posean la clave.
(Mario, completar la descripción)
slabtop
para mirar el estado de la memoria del kernel y diagnosticar problemas.