<?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="http://www.loc.gov/MARC21/slim">
    <record>
        <controlfield tag="001">6393</controlfield>
        <controlfield tag="005">20150325135851.0</controlfield>
        <datafield tag="037" ind1=" " ind2=" ">
            <subfield code="a">TAZ-PFC-2011-553</subfield>
        </datafield>
        <datafield tag="041" ind1=" " ind2=" ">
            <subfield code="a">spa</subfield>
        </datafield>
        <datafield tag="100" ind1="1" ind2=" ">
            <subfield code="a">López Ara, Marta</subfield>
        </datafield>
        <datafield tag="245" ind1="0" ind2="0">
            <subfield code="a">Desarrollo de fases de compilación para descubrir el tiempo de ejecución de peor caso</subfield>
        </datafield>
        <datafield tag="260" ind1=" " ind2=" ">
            <subfield code="a">Zaragoza</subfield>
            <subfield code="b">Universidad de Zaragoza</subfield>
            <subfield code="c">2011</subfield>
        </datafield>
        <datafield tag="506" ind1=" " ind2=" ">
            <subfield code="a">by-nc-sa</subfield>
            <subfield code="b">Creative Commons</subfield>
            <subfield code="c">3.0</subfield>
            <subfield code="u">http://creativecommons.org/licenses/by-nc-sa/3.0/</subfield>
        </datafield>
        <datafield tag="520" ind1=" " ind2=" ">
            <subfield code="a">Los dispositivos con requisitos de tiempo real son cada vez más utilizados, por ejemplo en automóviles (e.g. ABS), aeronáutica, electrodomésticos, etc. Para poder planificar los requisitos temporales de cualquier tarea, el primer paso es conocer (una cota superior de) su tiempo de ejecución en el peor caso (worst case execution time o WCET). Este cálculo depende de factores hardware y software, como por ejemplo de las memorias cache y del compilador utilizado, y debe conocerse previamente a su ejecución. Además, requiere información que maneja internamente el compilador pero no queda explícita en el ejecutable final, con lo que recuperarla es muy complejo. Cuanto más ajustada sea la cota superior obtenida, mejor se aprovecharán los recursos del sistema, aumentando así la planificabilidad del mismo. Por todo lo anterior, se ha realizado este proyecto de fin de carrera, cuyo objetivo principal ha sido la implementación de una serie de pasos (fases en la terminología usual de compiladores) que obtengan la información necesaria directamente en el proceso de compilación: reúsos de bloques de memoria y número máximo de iteraciones en bucles. Para ello se ha utilizado la infraestructura de compilación Low Level Virtual Machine (LLVM). Se han creado dos bibliotecas para ayudar al cálculo de la cota superior de los procesos. Estas bibliotecas van a sacar a relucir los accesos a memoria que existen, pudiendo así saber el reúso de variables y constantes, tanto temporal como espacial, y el número de veces que se ejecuta cada bucle de instrucciones como máximo. En particular: La biblioteca libmarcarLoadsStores localiza en el código intermedio de LLVM los accesos a memoria que existen (loads y stores) añadiéndoles los metadatas de depuración para su posterior reconocimiento con sus correspondientes instrucciones en el fichero que contiene el código ensamblador ARM. La biblioteca libbuclesReusos analiza en profundidad el código LLVM Intermediate Repesentation (IR) en busca de iteraciones y subiteraciones, indicando en el fichero ARM el máximo número de veces que se puede ejecutar un bloque básico de instrucciones, siempre que se sepa este dato en tiempo de compilación. Además, recoge los datos de los accesos a memoria, para poder identificar el reúso espacial y temporal, la variable o constante a la cual se refiere, y el desplazamiento que existe.</subfield>
        </datafield>
        <datafield tag="521" ind1=" " ind2=" ">
            <subfield code="a">Ingeniero en Informática</subfield>
        </datafield>
        <datafield tag="540" ind1=" " ind2=" ">
            <subfield code="a">Derechos regulados por licencia Creative Commons</subfield>
        </datafield>
        <datafield tag="653" ind1="1" ind2=" ">
            <subfield code="a">llvm</subfield>
        </datafield>
        <datafield tag="653" ind1="1" ind2=" ">
            <subfield code="a">llvm ir</subfield>
        </datafield>
        <datafield tag="653" ind1="1" ind2=" ">
            <subfield code="a">arm</subfield>
        </datafield>
        <datafield tag="653" ind1="1" ind2=" ">
            <subfield code="a">wcet</subfield>
        </datafield>
        <datafield tag="653" ind1="1" ind2=" ">
            <subfield code="a">optimización</subfield>
        </datafield>
        <datafield tag="700" ind1=" " ind2=" ">
            <subfield code="a">Segarra Flor, Juan</subfield>
            <subfield code="e">dir.</subfield>
        </datafield>
        <datafield tag="710" ind1="2" ind2=" ">
            <subfield code="a">Universidad de Zaragoza</subfield>
            <subfield code="b">Informática e Ingeniería de Sistemas</subfield>
            <subfield code="c">Arquitectura y Tecnología de Computadores</subfield>
        </datafield>
        <datafield tag="856" ind1="0" ind2=" ">
            <subfield code="f">497517@celes.unizar.es</subfield>
        </datafield>
        <datafield tag="856" ind1="4" ind2=" ">
            <subfield code="s">260518</subfield>
            <subfield code="u">http://zaguan.unizar.es/record/6393/files/TAZ-PFC-2011-553.pdf</subfield>
            <subfield code="y">Memoria (spa)</subfield>
        </datafield>
        <datafield tag="856" ind1="4" ind2=" ">
            <subfield code="s">368318</subfield>
            <subfield code="u">http://zaguan.unizar.es/record/6393/files/TAZ-PFC-2011-553_ANE.pdf</subfield>
            <subfield code="y">Anexos (spa)</subfield>
        </datafield>
        <datafield tag="909" ind1="C" ind2="O">
            <subfield code="o">oai:zaguan.unizar.es:6393</subfield>
            <subfield code="p">driver</subfield>
            <subfield code="p">proyectos-fin-carrera</subfield>
        </datafield>
        <datafield tag="950" ind1=" " ind2=" ">
            <subfield code="a"></subfield>
        </datafield>
        <datafield tag="980" ind1=" " ind2=" ">
            <subfield code="a">TAZ</subfield>
            <subfield code="b">PFC</subfield>
            <subfield code="c">CPS</subfield>
        </datafield>
    </record>

    
</collection>