Apuntes

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 7

3.1.

2 Ciclos
También conocida como optimización de rutas o problemas de ciclo hamiltoniano,
se refiere a la búsqueda de la ruta más corta o eficiente que pase por un conjunto
dado de nodos (o ciudades) exactamente una vez y vuelva al nodo de origen.
3.1.3 Globales
Se refiere a la búsqueda de la mejor solución posible en todo el espacio de
búsqueda, considerando todas las posibles soluciones y explorando múltiples
regiones del espacio de búsqueda para encontrar el óptimo global. A diferencia de
la optimización local, que se enfoca en encontrar un óptimo dentro de una región
específica del espacio de búsqueda, la optimización global busca la solución
óptima en todo el espacio de búsqueda, incluso cuando hay múltiples óptimos
locales.
3.1.4 De mirilla.
Se refiere al ajuste y optimización de parámetros para obtener la mejor calidad de
imagen o visión en aplicaciones que involucran cámaras, telescopios u otros
dispositivos ópticos.
3.2 Costos
generalmente se refiere a los recursos, ya sea en términos de recursos
computacionales, esfuerzo humano o recursos financieros, que se requieren para
realizar una tarea o actividad relacionada con el desarrollo, mantenimiento o
ejecución de software.
3.2.1 Costos de ejecución.
Abarcan una variedad de recursos computacionales, incluyendo tiempo de CPU,
memoria, ancho de banda de red, recursos de E/S y consumo de energía, que son
necesarios para ejecutar un programa de software de manera eficiente y efectiva.
Optimizar estos costos es fundamental para garantizar un buen rendimiento y una
experiencia de usuario satisfactoria.
3.2.2 Criterios para mejorar el código.
Sigue los principios de diseño limpio y código limpio: Utiliza nombres descriptivos
para variables, funciones y clases. Mantén las funciones pequeñas y enfocadas en
una sola tarea. Evita la duplicación de código y utiliza comentarios cuando sea
necesario para explicar el propósito o el funcionamiento del código.
Elimina código redundante: Revisa tu código en busca de repeticiones
innecesarias. Esto incluye líneas de código que realizan la misma tarea, bloques
de código que se repiten en diferentes partes del programa y variables que no se
utilizan.
Utiliza estructuras de datos eficientes: Elije las estructuras de datos más
adecuadas para tu problema y utiliza métodos y funciones integradas para
manipular y procesar datos de manera eficiente. Por ejemplo, utiliza listas por
comprensión en lugar de bucles for para operaciones simples en listas.
Evita la anidación excesiva de bucles y condicionales: Demasiada anidación
puede hacer que el código sea difícil de entender y mantener. Intenta refactorizar
el código para eliminar la anidación excesiva utilizando funciones auxiliares o
técnicas de programación funcional.
Aplica técnicas de programación funcional y expresiones lambda: Utiliza funciones
lambda y funciones de orden superior como map(), filter() y reduce() para realizar
operaciones en listas de manera concisa y elegante.
Haz un uso adecuado de la comprensión de listas, conjuntos y diccionarios: Utiliza
la comprensión de listas, conjuntos y diccionarios de Python para crear y
manipular colecciones de datos de manera concisa y legible

3.2.3 Herramientas para el análisis del flujo de datos


Apache NiFi: Es una plataforma de automatización de flujo de datos que permite el
procesamiento y enrutamiento de datos en tiempo real. Proporciona una interfaz
gráfica intuitiva para diseñar y gestionar flujos de datos complejos.
Apache Kafka: Es una plataforma de transmisión de datos distribuida que se utiliza
para la transmisión en tiempo real de grandes volúmenes de datos entre
aplicaciones. Permite la construcción de arquitecturas de microservicios y el
procesamiento de eventos en tiempo real.
UNIDAD IV
GENERACION DE CODIGO OBJETO

Compilación:
Antes de entrar en a generación de código objeto, es importante entender el
proceso de compilación en su totalidad. La compilación es el proceso mediante el
cual un programa escrito en un lenguaje de alto nivel (como C++, Java, etc) se
traduce en un programa ejecutable entendible por la computadora.

Generación de código objeto:


La generación de código objeto es una etapa clave en el proceso de compilación.
En esta fase, el compilador traduce el código fuente del programa en un código de
maquina específico para la arquitectura de la computadora objetivo. Este código
de maquina es conocido como código objeto.

Características del código objeto:


Formato binario:
El código objeto está en un formato binario específico para la plataforma de
destino. Este formato varía según el sistema operativo y la arquitectura de la CPU
para la que se compila el programa.

Instrucciones de máquina:
El código objeto contiene instrucciones de máquina específicas para la
arquitectura de la CPU para la que se compila el programa. Estas instrucciones
son ejecutadas directamente por el procesador.

Independiente del lenguaje de programación:


El código objeto es independiente del lenguaje de programación en el que se
escribió el código fuente. Puede ser generado a partir de código fuente escrito en
lenguajes como C, C++, Java, etc.
Optimización de código:
Antes de generar el código objeto final, el compilador también puede aplicar
optimizaciones al código fuente para mejorar su eficiencia en términos de tiempo
de ejecución, uso de memoria, etc. Estas optimizaciones pueden incluir la
eliminación de código redundante, la reorganización de instrucciones, la reducción
de accesos a memoria, entre otros.

Enlazado:
Después de la generación de código objeto, el siguiente paso es el enlazado. En
esta etapa, se combinan todos los archivos de código objeto necesarios y se
resuelven las referencias a símbolos externos para formar un programa ejecutable
completo.
4.1 Registros
¿Qué son los registros?
Los registros son pequeñas unidades de almacenamiento de datos que forman
parte del procesador de computadora. Son células almacenamiento de datos de
una de alta velocidad que se utilizan para almacenar información temporalmente
durante la ejecución de programas.

Los registros desempeñan diversas funciones en el procesador, incluyendo:


Almacenar operando y resultados de operaciones aritméticas y lógicas.
Mantener direcciones de memoria para acceder a datos
almacenados en la memoria principal. • Almacenar punteros de instrucción que
indican la próxima instrucción a ejecutar.
Mantener información de estado del procesador, como indicadores de condición,
modos de operación, etc.
Facilitar la transferencia de datos entre diferentes unidades funcionales dentro del
procesador.

Hay varios tipos de registros en una arquitectura de procesador, que incluyen:


• Registros de propósito general: Se utilizan para almacenar datos y direcciones
temporales durante la ejecución de programas. Son accesibles para las
instrucciones del programa.
• Contadores de programa (PC): Almacenan la dirección de la próxima instrucción
a ejecutar.
• Registros de dirección de memoria (MAR): Almacenan direcciones de
memoria para acceder a datos en la memoria principal. • Registros de datos
(MDR): Almacenan datos que se transfieren entre el procesador y la memoria
principal

Importancia de los registros:


Los registros son vitales para el rendimiento y la eficiencia del procesador, ya que
proporcionan almacenamiento de datos rápido y acceso rápido a la información
necesaria para ejecutar instrucciones de manera eficiente.
4.2 lenguaje ensamblador
El lenguaje ensamblador es un lenguaje de programación de bajo nivel que
proporciona una representación simbólica de las instrucciones de máquina,
permitiendo un control granular sobre el hardware de la computadora. Aunque es
complejo y no es tan portátil como los lenguajes de alto nivel, sigue siendo
utilizado en ciertos contextos donde se requiere un rendimiento óptimo y un control
preciso sobre el hardware.

El lenguaje ensamblador es un lenguaje de programación de bajo nivel que


proporciona una representación simbólica de las instrucciones de máquina,
permitiendo un control granular sobre el hardware de la computadora. Aunque es
complejo y no es tan portátil como los lenguajes de alto nivel, sigue siendo
utilizado en ciertos contextos donde se requiere un rendimiento óptimo y un control
preciso sobre el hardware.

4.3 lenguaje maquina

El lenguaje máquina es el conjunto de instrucciones directamente ejecutables por


una CPU, representadas en forma de código binario. Es específico de la
arquitectura de la CPU y se utiliza para controlar el funcionamiento del hardware y
ejecutar programas en el nivel más bajo de abstracción de una computadora.

4.4 Administración de memoria


La administración de memoria es el proceso de gestionar la memoria del sistema
de manera eficiente y transparente para los programas en ejecución. Implica
asignar y liberar memoria a los programas, garantizar la protección y seguridad de
los datos, y optimizar el uso de la memoria para maximizar el rendimiento del
sistema.
Memoria física vs. memoria virtual; En los sistemas computacionales, la
memoria se divide en memoria física (RAM) y memoria virtual. La memoria física
es el espacio real de almacenamiento disponible en el hardware del sistema,
mientras que la memoria virtual es un espacio de direcciones lógicas que se
gestiona mediante técnicas de paginación y segmentación, permitiendo que los
programas accedan a más memoria de la disponible físicamente.

Asignación de memoria: La asignación de memoria implica


reservar bloques de memoria para los programas en ejecución. Hay diferentes
técnicas de asignación de memoria, como la asignación estática, donde se asigna
memoria en el momento de la compilación; la asignación dinámica, donde la
memoria se asigna y libera durante la ejecución del programa; y la asignación de
memoria virtual, donde se utiliza un espacio de direcciones virtual que se asigna a
la memoria física según sea necesario.

Gestión de memoria en sistemas operativos: Los sistemas operativos son


responsables de administrar la memoria del sistema y proporcionar un entorno de
ejecución seguro y eficiente para los programas. Esto incluye la gestión de la
memoria física y la gestión de la memoria virtual.

Protección y seguridad de la memoria: La protección y seguridad de la memoria


son aspectos importantes de la administración de memoria para garantizar que los
programas no accedan a áreas de memoria no autorizadas y que se eviten
conflictos entre procesos.

También podría gustarte