sábado, 2 de mayo de 2020

4.4 Administración de memoria

Consiste en determinar la posición de memoria en la que los diferentes símbolos del programa almacenan la información



Depende de la estrategia utilizada para la gestión de memoria, el mecanismo puede variar.



La administración de la memoria es un proceso hoy en día muy importante, de tal modo que su mal o buen uso tiene una acción directa sobre el desempeño de memoria.
En general un ensamblador tiene un administrador de memoria más limitado que un compilador.

En la mayoría de los lenguajes de programación el uso de punteros no estaba vigilado por lo que se tienen muchos problemas con el uso de memoria. Los lenguajes más recientes controlan el uso de punteros y tienen un programa  denominado recolector de basura que se encarga de limpiar la memoria no utilizada mejorando el desempeño.


Elaborado por
Jonathan Arturo Ramos Hernández 

Aho, A. V., Hopcroft, J. E., & Ullman, J. D. (1988). Estructuras de datos y algoritmos (Vol. 1). Addison-Wesley Iberoamericana.
4.3 Lenguaje máquina

El lenguaje máquina sólo es entendible por las computadoras. Se basa en una lógica binaria de 0 y 1, generalmente implementada por mecanismos eléctricos.
En general el lenguaje máquina es difícil de entender para los humanos por este motivo hacemos uso de lenguajes más parecidos a los lenguajes naturales.

Características
  • El lenguaje máquina realiza un conjunto de operaciones predeterminadas llamadas microoperaciones.
  • Las microoperaciones sólo realizan operaciones del tipo aritmética (+,-,*, /), lógicas (AND, OR, NOT) y de control (secuencial, decisión, repetitiva).
  • El lenguaje máquina es dependiente del tipo de arquitectura. Así un programa máquina para una arquitectura Intel x86 no se ejecutará en una arquitectura Power PC de IBM (al menos de manera nativa).
  • Algunos microprocesadores implementan más funcionalidades llamado CISC, pero son más lentos que los RISC ya que estos tienen registros más grandes.
Direccionamiento

Es la forma en cómo se accede a la memoria. Recordar que un programa no puede ejecutarse sino se encuentra en memoria principal. La forma de acceder a la memoria depende del microprocesador, pero en general existen dos tipos de direccionamiento: directo e indirecto.

El direccionamiento directo también recibe el nombre de direccionamiento absoluto y el acceso a las direcciones se hace de manera directa. El direccionamiento indirecto también recibe el nombre de direccionamiento relativo y se basa a partir de una dirección genérica, generalmente el inicio del programa.
Arquitectura de Computadoras - ppt descargar
Para acceder a una dirección relativa se suma a la dirección base el número de espacios de memorias necesarias.

El direccionamiento relativo hace a los programas relocalizables e independientes. Si la dirección base es el inicio de la memoria fija el direccionamiento pasa a ser un variante de direccionamiento absoluto.

Elaborado por
Dayanara Lizeth Cruz Mendez

Rumbaugh, J., Booch, G., & Jacobson, I. (2000). El lenguaje unificado de modelado: manual de referencia. Addison Wesley,.
4.2 Lenguaje ensamblador

El ensamblador (del inglés assembler) es un traductor de un código de bajo nivel a un código, ejecutable directamente por la máquina para la que se ha generado.
Fue la primera abstracción de un lenguaje de programación, posteriormente aparecieron los compiladores.

Características

El programa lee un archivo escrito en lenguaje ensamblador y sustituye cada uno de los códigos mnemotécnicos por su equivalente código máquina.
Los programas se hacen fácilmente portables de máquina a máquina y el cálculo de bifurcaciones se hace de manera fácil.
Ensambladores

Ensambladores básicos: Son de muy bajo nivel, y su tarea consiste básicamente en ofrecer nombres simbólicos a las distintas instrucciones, parámetros y cosas tales como los modos de direccionamiento.

Ensambladores modulares, o macro ensambladores: Descendientes de los ensambladores básicos, fueron muy populares en las décadas de los 50 y los 60, antes de la generalización de los lenguajes de alto nivel. Un macroinstrucción es el equivalente a una función en un lenguaje de alto nivel.

Almacenamiento

Una de las principales ventajas del uso del ensamblador, es que se encarga de administrar de manera transparente para el usuario la creación de memoria, las bifurcaciones y el paso de parámetros. Además nos permite acceder directamente a los recursos de la máquina para un mejor desempeño.

Elaborado por
Jose Armando Perez Cruz

Zamora, F. R., & Varela, J. C. Generación de Código Intermedio.
4.1 Registro

Los registros son la memoria principal de la computadora. Existen diversos registros de propósito general y otros de uso exclusivo.
Qué es la memoria principal de una computadora? | Techlandia
Algunos registros de propósito general son utilizados para cierto tipo de funciones. Existen registros acumuladores, puntero de instrucción, de pila, etc.


Distribución

La distribución es el proceso en el que el programa generado puede ejecutarse en otras máquinas.
Con respecto al ensamblador, la mayoría del direccionamiento se hace relativo para que el programa sea relocalizable por un programa llamado cargador.

En el caso de programas compilados se necesitan de las librerías, si son estáticas se incluyen en el ejecutable por lo que el programa se hace gráfico, si son dinámicas no pero el programa es más pequeño.

Debido a la complejidad del software actual se necesitan de asistentes para poder instalar y ejecutar un programa.

Operar sobre registros es más rápido y eficiente que operar sobre memoria. Por ello, la adjudicación eficiente de registros tiene un gran impacto en la performance.

El uso de registros puede dividirse en dos subproblemas:

– Durante la reserva de registros (allocation), se seleccionan el conjunto de variables que vivirá en registros en un punto del programa.

– Durante la (posterior) asignación de registros (assignation), se elige el registro específico para cada variable.

Elaborado por
Carlos Daniel Martínez Díaz
Saul Santiago Hernández

Rincón Nigro, M., Aguilar Castro, J., & Hidrobo Torres, F. (2011). Generación automática de código a partir de máquinas de estado finito. Computación y Sistemas14(4), 405-421.

Unidad IV: Generación de código objeto.


El generador de código objeto transforma el código Intermedio optimizado en código objeto de bajo nivel. Toma código intermedio y genera Código objeto para la máquina considerada Es la parte más próxima a la arquitectura de la Máquina. Habitualmente, se escriben "a mano" desarrollo a medida´ para cada máquina Específica.


miércoles, 25 de marzo de 2020

3.2.3 Herramientas para Análisis del Flujo de Datos

Existen algunas herramientas que permiten el análisis de los flujos de datos, entre ellas tenemos los depuradores y desambladores, diagramas de flujo y diccionario de datos.
La optimización al igual que la programación es un arte y no se ha podido sistematizar del todo.



Depurador.

Es una aplicación que permite correr otros programas, permitiendo al usuario ejercer cierto control sobre los mismos a medida que los estos se ejecutan, y examinar el estado del sistema (variables, registros, banderas, etc.) en el momento en que se presente algún problema.
El depurador permite detener el programa en:
  • Un punto determinado mediante un punto de ruptura.
  • Un punto determinado bajo ciertas condiciones mediante un punto de ruptura condicional.
  • Un momento determinado cuando se cumplan ciertas condiciones.
  • Un momento determinado a petición del usuario.
Durante esa interrupción, el usuario puede:
·         Examinar y modificar la memoria y las variables del programa.
·         Examinar el contenido de los registros del procesador.
·         Cambiar el punto de ejecución, de manera que el programa continúe su ejecución en un punto diferente al punto en el que fue detenido.
·         Ejecutar instrucción a instrucción.
·         Ejecutar partes determinadas del código, como el interior de una función, o el resto de código antes de salir de una función.
Desamblador o desensamblador.

Es un programa de computadora que traduce el lenguaje de máquina a lenguaje ensamblador, la operación inversa de la que hace el ensamblador.

Un desensamblador se diferencia de un decompilador, en que está dirigido a un lenguaje de alto nivel en vez de al lenguaje ensamblador.

Usos
Son ampliamente utilizados para crackear programas y para realizar ingeniería inversa. También son utilizados por desarrolladores de software, investigadores o estudiantes.

Ejemplos
♫ Interactive Disassembler es el más comúnmente utilizado.
♫ ILDASM es una herramienta contenida en el SDK del .NET Framework.
♫ OllyDbg es un desensamblador integrado para Lenguaje Ensamblador y COBOL.
♫ Texe es un desensamblador que corre a 32 bits y además un analizador de archivos PE (Portable Executable )de Windows libre.

Diagrama de flujo de datos.

Es una herramienta de modelización que permite describir, de un sistema, la transformación de entradas en salidas. El DFD también es conocido con el nombre de Modelo de Procesos de Negocios.

Ejemplo

Diccionario de datos.
El diccionario de datos es un listado organizado de todos los elementos de datos que son pertinentes para el sistema, con definiciones precisas y rigurosas que le permite al usuario y al proyectista del sistema tener una misma comprensión de las entradas, de las salidas, y también de cálculos intermedios.
Ejemplo

Saul Santiago Hernandez

Cortés, E. L. (2005). Utilidadesparaeldesarrolloy pruebadeprogramas. Compiladores. Intérpretes. Depuradores. Informática: Volumen II: Temario de oposiciones al cuerpo de profesores de enseñanza secundaria2, 245.
Lovello, J. M. C. (1998). Conceptos básicos de procesadores de lenguaje. Servitec.

3.2.2 Criterios para mejorar el código

Resultado de imagen para mejorar codigo
La mejor manera de optimizar el código es hacer ver a los programadores que optimicen su código desde el inicio, el problema radica en que el costo podría ser muy grande ya que tendría que codificar más y/o hacer su código mas legible.
Los criterios de optimización siempre están definidos por el compilador.
Muchos de estos criterios pueden modificarse con directivas del compilador desde el código o de manera externa.

Este proceso lo realizan algunas herramientas del sistema como los ofuscadores para código móvil y código para dispositivos móviles.

Existen 3 criterios para mejorar el código
  • Asignación de registros
un registro es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador, que permite guardar transitoriamente y acceder valores muy usados, generalmente en operaciones matemáticas 
Cuáles son las ventajas de la digitalización documental? - Artero

  • Operaciones innecesarias
Las operaciones innecesarias surgen a menudo por un desempeño inadecuado de la operación anterior. Debe utilizarse una segunda operación para "corregir" o dejar aceptable el trabajo de la primera
Análisis de operaciones.Fase 1.enfoque de la finalidad de la operación
  • Operaciones costosas 
En algunos casos la realización de algunas operaciones suelen tener un costo de ejecución elevado, y en ocasiones estas operaciones pueden cambiarse por otros métodos de producción que podrían ser mas complejos si es la primera vez que se realiza pero a lo largo estos métodos terminan por ser beneficiosos trayendo consigo ganancias al a hora de ejecutar las operaciones



Jose Armando Perez Cruz

López, C., Crespo, Y., Manso, E., & Marticorena, R. (2009). Evaluación de código mediante múltiples intervalos de métricas. Revista de Procesos y MEtricas6(1), 19-30.
e