viernes, 22 de abril de 2011

UNIDAD 1: TRADUCTORES DE BAJO NIVEL

1.1.- ENSAMBLADORES

El término ensamblador (del inglés assembler) se refiere a un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina, ejecutable directamente por la máquina para la que se ha generado. El propósito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de programas, ya que escribir directamente en código binario, que es el único código entendible por la computadora, es en la práctica imposible. La evolución de los lenguajes de programación a partir del lenguaje ensamblador originó también la evolución de este programa ensamblador hacia lo que se conoce como programa compilador.


FUNCIONAMIENTO
El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los códigos nemotécnicos que aparecen por su código de operación correspondiente en sistema binario para la plataforma que se eligió como destino en las opciones específicas del ensamblador es una basura.cc

1.2.- PASADAS DEL TEXTO FUENTE

El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los códigos nemotécnicos que aparecen por su código de operación correspondiente en sistema binario para la plataforma que se eligió como destino en las opciones específicas del ensamblador es una basura.

1.3.- TRATAMIENTO DE OPERANDOS Y MODOS DE DIRECCIONAMIENTO DE LA MAQUINA OBJETO


§  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. Además, reconoce una serie de directivas (o meta instrucciones) que indican ciertos parámetros de funcionamiento del ensamblador.

§  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. Hacen todo lo que puede hacer un ensamblador, y además proporcionan una serie de directivas para definir e invocar macroinstrucciones (o simplemente, macros). 

§  Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, muchos de ellos teniendo compatibilidad hacia atrás pudiendo trabajar con programas con estructuras de 16 bits. Además de realizar la misma tarea que los anteriores, permitiendo también el uso de macros, permiten utilizar estructuras de programación más complejas propias de los lenguajes de alto nivel.



1.4.- ENSAMBLADORES RESIDENTES Y CRUZADOS
Ensambladores Cruzados (Cross-Assembler).
Se denominan así los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrán las computadoras donde va a ejecutarse el programa objeto producido.
El empleo de este tipo de traductores permite aprovechar el soporte de medios físicos (discos, impresoras, pantallas, etc.), y de programación que ofrecen las máquinas potentes para desarrollar programas que luego los van a ejecutar sistemas muy especializados en determinados tipos de tareas.
Ensambladores Residentes.
Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecución, al programa objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro, como se hacía en cross-assembler, y sin necesidad de programas simuladores.
Sin embargo, puede presentar problemas de espacio de memoria, ya que el traductor ocupa espacio que no puede ser utilizado por el programador. Asimismo, también ocupará memoria el programa fuente y el programa objeto. Esto obliga a tener un espacio de memoria relativamente amplio. Es el indicado para desarrollos de pequeños sistemas de control y sencillos automatismo empleando microprocesadores (1).
La ventaja de estos ensambladores es que permiten ejecutar inmediatamente el programa; la desventaja es que deben mantenerse en la memoria principal tanto el ensamblador como el programa fuente y el programa objeto.


1.5.- ENSAMBLE CONDICIONAL

Se emplean para que el ensamblador evalúe unas condiciones y, según ellas, ensamble o no ciertas zonas de código. Es frecuente, por ejemplo, de cara a generar código para varios ordenadores: pueden existir ciertos símbolos definidos que indiquen en un momento dado si hay que ensamblar ciertas zonas del listado o no de manera condicional, según la máquina. En los fragmentos en ensamblador del código que generan los compiladores también aparecen con frecuencia (para actuar de manera diferente, por ejemplo, según el modelo de memoria). Es interesante también la posibilidad de definir un símbolo que indique que el programa está en fase de pruebas y ensamblar código adicional en ese caso con objeto de depurarlo. Sintaxis:

IFxxx [símbolo/exp./arg.] ; xxx es la condición

...ELSE ; el ELSE es opcional
...ENDIF
IF expresion (expresión distinta de cero)

IFE expresión (expresión igual a cero)

IF1 (pasada 1 del ensamblador)

IF2 (pasada 2 del ensamblador)

IFDEF símbolo (símbolo definido o declarado como externo)

IFNDEF símbolo (símbolo ni definido ni declarado como externo)

IFB <argumento> (argumento en blanco en macros -incluir '<' y '>'-)

IFNB <argumento> (lo contrario, también es obligado poner '<' y '>')

IFIDN <arg1>, <arg2> (arg1 idéntico a arg2, requiere '<' y '>')

IFDIF <arg1>, <arg2> (arg1 distinto de arg2, requiere '<' y '>')(1)



1.6.-  MICROPROCESADORES

El microprocesador es el cerebro del ordenador. Se encarga de realizar todas las operaciones de cálculo y de controlar lo que pasa en el ordenador recibiendo información y dando órdenes para que los demás elementos trabajen. Es el jefe del equipo y, a diferencia de otros jefes, es el que más trabaja.
En los equipos actuales se habla fundamentalmente de los procesadores Pentium D o Core 2 Duo de Intel y Athlon 64 y Athlon 64 X2 de AMD. Además, están muy extendidos procesadores no tan novedosos, como los Pentium 4 de Intel y los chips Athlon XP de AMD.
El procesador es un circuito integrado constituido por millones de componentes electrónicos integrados. Constituye la unidad central de procesamiento (CPU) de un PC catalogado como microcomputador.
Desde el punto de vista funcional es, básicamente, el encargado de realizar toda operación aritmético-lógica, de control y de comunicación con el resto de los componentes integrados que conforman un PC, siguiendo el modelo base de Von Neumann. También es el principal encargado de ejecutar los programas, sean de usuario o de sistema; sólo ejecuta instrucciones programadas a muy bajo nivel, realizando operaciones elementales, básicamente, las aritméticas y lógicas, tales como sumar, restar, multiplicar, dividir, las lógicas binarias y accesos a memoria.




1.7.-  BIBLIOTECA DE MACROS

Una macro es un grupo de instrucciones repetitivas en un programa que se codifican solo una vez y pueden utilizarse cuantas veces sea necesario.

Una de las facilidades que ofrece el uso de las macros es la creación de bibliotecas, las cuales son grupos de macros que pueden ser incluidas en un programa desde un archivo diferente.

La creación de estas bibliotecas es muy sencilla, unicamente tenemos que escribir un archivo con todas las macros que se necesitarán y guardarlo como archivo de texto.

Para llamar a estas macros solo es necesario utilizar la instrucción Include NombreDelArchivo, en la parte de nuestro programa donde escribiriamos normalmente las macros, esto es, al principio de nuestro programa(1).

(1 Dir. Members.es.tripod.de/patricio/ensam/ensam1.htm) Macros y Pocedimento

(2.Org. De Computadoras Un Enfoque Estructurado, Tanenbaum, P.200)



1.8.-  EXPANSION CONDICIONAL

UNIDAD 2. TRADUCTORES DE ALTO NIVEL

2.1.-  INTERPRETES


Intérprete o interpretador es un programa informático capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema, los intérpretes sólo realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.
Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ej. una PC y un PlayStation). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables específicos a cada sistema.





2.2.- INTERPRETACION DIRECTA O MEDIANTE PSEUDO CODIGO

Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina).
Para mejorar el desempeño, algunas implementaciones de programación de lenguajes de programación pueden interpretar o compilar el código fuente original en una más compacta forma intermedia y después traducir eso al código de máquina (ej. Perl, Python, MATLAB, y Ruby). Algunos aceptan los archivos fuente guardados en esta representación intermedia (ej. Python, UCSD Pascal y Java).

2.3.- COMPILADORES

Los compiladores son programas o herramientas encargadas de compilar. Un compilador toma un texto (código fuente) escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (código objeto).

Básicamente, existen dos grandes formas de ejecutar programas: programas compilados (previamente pasados por un compilador) y programas interpretados (necesitan pasar por un intérprete para ejecutarse en tiempo real).

Características de un compilador

Generalmente un compilador se divide en dos partes:

* Front End: parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionará.

* Back End: parte en donde se genera el código máquina exclusivo para una plataforma a partir de lo analizado en el front end.

Por lo general el resultado del back end no puede ser ejecutado directamente, se necesita pasar por un proceso de enlazado (linker).

Existen varios tipos de compiladores: Compiladores cruzados, Compiladores optimizadores, Compiladores de una sola pasada, Compiladores de varias pasadas, Compiladores JIT (Just In Time).







2.4.- TÓPICOS DE  COMPILACIÓN
Estructura de un Compilador.
Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y síntesis de un programa en lenguaje maquina que, cuando se ejecute, realizara correctamente las actividades descritas en el programa fuente. Para el estudio de un compilador, es necesario dividir su trabajo en fases. Cada fase representa una transformación al código fuente para obtener el código objeto. La siguiente figura representa los componentes en que se divide un compilador. Las tres primeras fases realizan la tarea de análisis, y las demás la síntesis. En cada una de las fases se utiliza un administrador de la tabla de símbolos y un manejador de errores.
Análisis Léxico.
En la fase de análisis léxico se leen los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos. Cada componente léxico es una secuencia lógicamente coherente de caracteres relativa a un identificador, una palabra reservada, un operador o un carácter de puntuación. A la secuencia de caracteres que representa un componente léxico se le llama lexema (o con su nombre en inglés token). En el caso de los identificadores creados por el programador no solo se genera un componente léxico, sino que se genera otro lexema en la tabla de símbolos.
Análisis Sintáctico.
En esta fase, los componentes léxicos se agrupan en frases gramaticales que el compilador utiliza para sintetizar la salida. Análisis Semántico.
La fase de análisis semántico se intenta detectar instrucciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada.
Análisis Semántico: Este análisis es más difícil de formalizar, determina el tipo de los resultados intermedios, comprobar que los argumentos que tienen un operador pertenecen al conjunto de operadores posible, y si son compatibles entre sí.
Generación de código Intermedio.
Algunos compiladores generan una representación intermedia explícita del programa fuente, una vez que se han realizado las fases de análisis. Se puede considerar esta operación intermedia como un subprograma para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes: debe ser fácil de producir y fácil de traducir al programa objeto.
Optimización de Código.
En esta fase se trata de mejorar el código intermedio, de modo que resulte un código de máquina más rápido de ejecutar.
Generación de Código.
Esta constituye la fase final de un compilador. En ella se genera el código objeto que por lo general consiste en código en lenguaje máquina (código relocalizable) o código en lenguaje ensamblador.
‘’‘Administrador de la tabla de símbolos. ‘’‘ Una tabla de símbolos es una estructura de datos que contiene un registro por cada identificador. El registro incluye los campos para los atributos del identificador. El administrador de la tabla de símbolos se encarga de manejar los accesos a la tabla de símbolos, en cada una de las etapas de compilación de un programa.
Manejador de errores.
En cada fase del proceso de compilación es posibles encontrar errores. Es conveniente que el tratamiento de los errores se haga de manera centralizada a través de un manejador de errores. De esta forma podrán controlarse más eficientemente los errores encontrados en cada una de las fases de la compilación de un programa.




2.5. AMBIENTES INTEGRADOS.

Es un entorno compuesto por un conjunto de herramientas de programación.
Puede dedicarse en exclusiva a un sólo lenguaje de programación o bien, poder utilizarse para varios.
Un ambiente de ingeniería de software es un conjunto de herramientas de hardware y software las cuales actúan en combinación de una manera integrada para proporcionar soporte a todos los procesos de software desde la especificación inicial pasando por las pruebas y hasta la liberación del sistema.
Componentes
§  Un editor de texto.
§  Un compilador.
§  Un intérprete.
§  Un depurador.
§  Posibilidad de ofrecer un sistema de control de versiones.
§  Factibilidad para ayuda en la construcción de interfaces gráficas de usuario.

Herramientas del ambiente

·         Herramientas integradas

Herramientas que manejan todos los datos usando los servicios del área de trabajo e implementando sus estructuras de datos en un sistema de manejo de objetos

·         Herramientas semi-aisladas

Herramientas menos integradas. Manejan sus propios datos pero los archivos en los cuales están almacenados son manejados usando servicios del área de trabajo.

·         Herramientas foráneas
Herramientas las cuales corren en la misma plataforma que el SEE pero solamente usan servicios de plataforma.

En si el ambiente integrado proporciona soporte para una amplia gama de actividades de procesos, proporcionar los 5 niveles de integración herramientas y tablas de comparación la cual ha sido discutida,son generalmente para trabajo plataforma central-remota Servicios de plataforma los cuales son proporcionados incluyen archivos, manejo de procesos, red, comunicación, ventanas y servicios de impresión.


sábado, 16 de abril de 2011

UNIDAD 3. UTILERIAS Y MANEJADORES (ORIENTADOS AL USUARIO)

3.1 SISTEMAS DE RESPALDO Y RECUPERACIÓN.

DEFINICIÓN:

RESPALDO

El respaldo de información es un proceso muy importante que debe de tener cada empresa este debe de realizarse en sus computadoras, sea un equipo portátil o un equipo de escritorio. El contar con respaldos permite al usuario en algún momento dado recuperar información que haya sido dañada por virus, fallas en el equipo o por accidentes.

El respaldo se realiza cada mes para que la información se encuentre lo más actualizado posible, estos serán almacenados dependiendo de las necesidades de la empresa,  ya que pueden realizarse en diferentes dispositivos de almacenaje como los siguientes:
·         CD-RW
·         DVD-RW
·         HD HARD DISC



RECUPERACIÓN

La recuperación de datos hace referencia a las técnicas empleadas para recuperar archivos que han sido perdidos o eliminados de algún medio de almacenamiento.

Hay dos formas básicas de perder información de un medio: pérdida física de datos o pérdida lógica de datos.

La pérdida física de datos, que es la más complicada, implica un problema real sobre la superficie donde están almacenados los datos. Por ejemplo, un rayón en un CD. En general, la información que se altera físicamente es más difícil (sino imposible) de recuperar.

La pérdida lógica de datos es la eliminación de archivos utilizando la opción de "borrar archivo" de cualquier sistema operativo (también puede pasar por un virus).

En los discos duros y otros medios de almacenamiento, los archivos no son borrados realmente del disco, sino que son marcados como eliminados. El sistema operativo interpreta que estos lugares del disco marcado como eliminados son en realidad espacio libre y, por lo tanto, podrá escribir sobre ellos. Muchas veces la información así marcada no es sobre escrita rápidamente, y por esta razón se puede recuperar.



3.2. TRATAMIENTO DE VIRUS.

Definición.



Virus.

Un virus informático es un malware que tiene por objeto alterar el normal funcionamiento de la computadora, sin el permiso o el conocimiento del usuario. Los virus, habitualmente, reemplazan archivos ejecutables por otros infectados con el código de este. Los virus pueden destruir, de manera intencionada, los datos almacenados en un ordenador, aunque también existen otros más inofensivos, que solo se caracterizan por ser molestos.

Los virus informáticos tienen, básicamente, la función de propagarse a través de un software, no se replican a sí mismos porque no tienen esa facultad como el gusano informático, son muy nocivos y algunos contienen además una carga dañina (payload) con distintos objetivos, desde una simple broma hasta realizar daños importantes en los sistemas, o bloquear las redes informáticas generando tráfico inútil.

El funcionamiento de un virus informático es conceptualmente simple. Se ejecuta un programa que está infectado, en la mayoría de las ocasiones, por desconocimiento del usuario.


Antivirus.

Los antivirus son una herramienta simple cuyo objetivo es detectar y eliminar virus informáticos. Nacieron durante la década de 1980.
Con el transcurso del tiempo, la aparición de sistemas operativos más avanzados e Internet, ha hecho que los antivirus hayan evolucionado hacia programas más avanzados que no sólo buscan detectar virus informáticos, sino bloquearlos, desinfectarlos y prevenir una infección de los mismos, y actualmente ya son capaces de reconocer otros tipos de malware, como spywarerootkits, etc.

Tipos de virus



Todos los virus tienen en común una característica, y es que crean efectos perniciosos. A continuación te presentamos la clasificación de los virus informáticos, basada en el daño que causan y efectos que provocan.

Caballo de Troya:
Es un programa dañino que se oculta en otro programa legítimo, y que produce sus efectos perniciosos al ejecutarse este último.

Gusano o Worm:
Es un programa cuya única finalidad es la de ir consumiendo la memoria del sistema, se copia así mismo sucesivamente, hasta que desborda la RAM, siendo ésta su única acción maligna.

Virus de macros:
Un macro es una secuencia de órdenes de teclado y mouse asignadas a una sola tecla, símbolo o comando. Son muy útiles cuando este grupo de instrucciones se necesitan repetidamente. Los virus de macros afectan a archivos y plantillas que los contienen, haciéndose pasar por una macro y actuaran hasta que el archivo se abra o utilice.

Virus de sobre escritura:
Sobrescriben en el interior de los archivos atacados, haciendo que se pierda el contenido de los mismos.

Virus de Programa:
Comúnmente infectan archivos con extensiones .EXE, .COM, .OVL, .DRV, .BIN, .DLL, y .SYS., los dos primeros son atacados más frecuentemente por que se utilizan mas.

Virus de Boot:
Son virus que infectan sectores de inicio y booteo (Boot Record) de los diskettes y el sector de arranque maestro (Master Boot Record) de los discos duros; también pueden infectar las tablas de particiones de los discos.

Virus Residentes:
Se colocan automáticamente en la memoria de la computadora y desde ella esperan la ejecución de algún programa o la utilización de algún archivo.

Virus de enlace o directorio:
Modifican las direcciones que permiten, a nivel interno, acceder a cada uno de los archivos existentes, y como consecuencia no es posible localizarlos y trabajar con ellos.

Virus mutantes o polimórficos:
Son virus que mutan, es decir cambian ciertas partes de su código fuente haciendo uso de procesos de encriptación y de la misma tecnología que utilizan los antivirus.
Virus falso o Hoax:
Los denominados virus falsos en realidad no son virus, sino cadenas de mensajes distribuidas a través del correo electrónico y las redes.

Virus Múltiples:
Son virus que infectan archivos ejecutables y sectores de booteo simultáneamente, combinando en ellos la acción de los virus de programa y de los virus de sector de arranque.