39
Programación de Sistemas Unidad 1 Introducción

Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Embed Size (px)

Citation preview

Page 1: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Programación de Sistemas

Unidad 1

Introducción

Page 2: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Contenido

Campo de estudio de la programación de sistemas

Clasificación de los lenguajes de programación

Procesadores de lenguaje Hardware

Page 3: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Campo de estudio de la programación de sistemas “Programación de sistemas”

¿Qué es un programa?• Conjunto de instrucciones que ejecuta una

computadora para realizar una actividad o tarea. ¿Qué es un sistema?

• Conjunto de elementos autónomos que trabajan en armonía para alcanzar un objetivo en común.

• Hay sistemas de tipo físico, abstracto, abierto, cerrado, etc.

• Tienen ciertas características, están bien delimitados, interactúan con su medio, pueden ser componentes de otro sistema.

La meta es mantener funcionando de manera apropiada todos los elementos del sistema e integrarlos de manera que el usuario pueda tener acceso a ellos desde la periferia a través del software de sistema y realizar tareas.

Page 4: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Campo de estudio de la programación de sistemas … (2)

La programación de sistemas abarca el estudio y diseño de software base de la computadora.

El software de sistemas o software base es un conjunto de programas que han sido escritos para servir a otros programas. El sistema operativo es visto como el primer nivel de

soporte para todos los programas. Algunos programas de sistemas son: el sistema

operativo, compiladores, ensambladores, macroensambladores, intérpretes, enlazadores, cargadores, SMBD, etc.

Los programas de sistemas se caracterizan por tener una fuerte interacción con el hardware, estructuras de información complejas, fuerte gestión de procesos, entre otras.

Page 5: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Campo de estudio de la programación de sistemas … (3)

Algunas de las áreas afines a la programación de sistemas son: Los lenguajes de programación Arquitectura de computadoras y programación a bajo

nivel . La algoritmia La ingeniería de software

La mayoría del software de base funciona como un traductor entre el usuario y el sistema.

Generalmente la comunicación usuario-sistema se logra mediante algún tipo de lenguaje.

Page 6: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación Un lenguaje de programación se puede definir como:

Notación formal para describir algoritmos o funciones que serán ejecutadas por una computadora.

Lenguaje para comunicar instrucciones a la computadora.

Convención para escribir descripciones que pueden ser evaluadas.

Los lenguajes de programación se pueden clasificar desde distintos puntos de vista: Según su grado de independencia Según el paradigma de programación

Page 7: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (2)

Según su grado de independencia con la máquina Lenguaje máquina Lenguaje ensamblador Lenguajes de alto nivel (orientados a los

usuarios) Lenguajes orientados a problemas concretos

Page 8: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (3)

Lenguaje máquina Contiene solo unos y ceros Generalmente solo se tienen

dos tipos de secuencias:• Instrucciones. Una parte para

el código de operación y otra para la dirección.

• Datos. Un bit para el signo el resto para el valor.

Codop0 3 4 15

Dirección

S0 1

(a) Formato de instrucción

15Magnitud

(b) Formato de enteros

Contador de programa (PC) = dirección de instrucciónRegistro de instrucción (IR) = Instrucción en ejecuciónAcumulador (AC) = Almacenamiento temporal

(c) Registros internos del CPU

0001 = Cargar AC desde memoria0010 = Almacenar AC en memoria0101 = Sumar a AC un dato de memoria

(d) Lista parcial de códigos de operación (Codop)

1 9 4 0

5 9 4 1

2 9 4 1

0 0 0 3

0 0 0 2

300

301

302

940

941

Memoria

3 0 0

1 9 4 0

PC

AC

IR

Registros

1 9 4 0

5 9 4 1

2 9 4 1

0 0 0 3

0 0 0 2

300

301

302

940

941

Memoria

3 0 0

1 9 4 0

Registros

1 9 4 0

5 9 4 1

2 9 4 1

0 0 0 3

0 0 0 2

300

301

302

940

941

Memoria

3 0 1

5 9 4 1

PC

AC

IR

Registros

1 9 4 0

5 9 4 1

2 9 4 1

0 0 0 3

0 0 0 2

300

301

302

940

941

Memoria

3 0 1

5 9 4 1

Registros

1 9 4 0

5 9 4 1

2 9 4 1

0 0 0 3

0 0 0 2

300

301

302

940

941

Memoria

3 0 2

2 9 4 1

PC

AC

IR

Registros

1 9 4 0

5 9 4 1

2 9 4 1

0 0 0 3

0 0 0 5

300

301

302

940

941

Memoria

3 0 2

1 9 4 1

PC

AC

IR

Registros

1 2

3 4

5 6

0 0 0 3

0 0 0 3 0 0 0 5

0 0 0 5 0 0 0 5

PC

AC

IR

PC

AC

IR

Page 9: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (4)

Lenguaje ensamblador Se apegan a una arquitectura en específico. Es esencialmente una versión simbólica de un lenguaje

máquina. Se trata de una relación biunivoca de mnemotécnicos y

código máquina. Trabaja con los registros de la computadora de forma

directa Es el primer paso hacia los lenguajes de alto nivel, y en

general hacia los compiladores.

1 9 4 0

5 9 4 1

2 9 4 1

0 0 0 3

0 0 0 2

300

301

302

940

941

Memoria

3 0 0

1 9 4 0

PC

AC

IR

Registros

Código Ensamblador

LOAD AC, AADD AC, BSTORE B

Código Máquina

Page 10: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (5)

Lenguaje de alto nivel Facilitan la programación (comunicación) al tener un mayor

parecido al lenguaje utilizado por los humanos. Los lenguajes de alto nivel surgen como una alternativa

viable y necesaria para desarrollar casi todo tipo de software.

Sin embargo, no dejan de ser lenguajes rígidos y sistemáticos

Lenguajes orientados a problemas completos Se utilizan para la resolución de problemas en un campo

específico. Ej: SQL para el manejo de BD, Postcript para la descripción de

páginas, etc.

1 9 4 0

5 9 4 1

2 9 4 1

0 0 0 3

0 0 0 2

300

301

302

940

941

Memoria

3 0 0

1 9 4 0

PC

AC

IR

Registros

Código Ensamblador

LOAD AC, AADD AC, BSTORE B

Código Máquina

Lenguaje de alto nivel

B+=A;

Page 11: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (6)

Clasificación según los paradigmas de programación Imperativo Estructurado Orientado a objetos Orientado a eventos Funcional Lógico

Cada uno de los paradigmas representa un enfoque particular o filosofía para la construcción del software. En función del problema a resolver unos resultan más apropiados que otros.

Page 12: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (7)

Paradigma imperativo Describe la programación en términos del estado del programa y

sentencias que cambian dicho estado. Prácticamente todo el hardware de las computadoras esta

diseñado para utilizar código máquina escrito en una forma imperativa.

El estilo de un programa bajo este paradigma está definido por los contenidos de la memoria (registros o variables) y las sentencias que alteran el estado (contenido) de las variables.

Lenguajes de este tipo• Lenguaje máquina• Lenguaje ensamblador• Lenguaje C

• Primer lenguaje en superar los obstáculos presentados por el código máquina para la creación de programas complejos.

• Es el lenguaje más popular para crear software de sistemas dada la eficiencia del código que produce.

• Se considera como un lenguaje de medio nivel ya que posee características de los lenguajes de bajo nivel y también de alto nivel.

Page 13: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (8)

Paradigma estructurado También conocido como programación sin ‘GOTO’. Es una metodología para programar de forma clara utilizando

únicamente tres estructuras:• Secuencial• Iterativa• Selectiva

La programación estructurada tiene varias ventajas, entre ellas están:

• Estructura de programas más claras, legibles y fáciles de entender.• Reducción del costo y esfuerzo en pruebas y mantenimiento.

Uno de los inconvenientes de la programación bajo este paradigma es que se obtiene un único bloque de programa. Sin embargo esto se resuelve si se aplica:

• Programación modular• Programación por capas (presentación, negocio, datos).

El Pascal es un lenguaje bajo el paradigma estructurado. En cuanto a C, también permite realizar programación estructurada y modular o por capas.

Page 14: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (9)

Paradigma Orientado a objetos (POO u OOP) Define los programas en término de clases de objetos. Un objeto es una entidad que combina:

• Estado (datos).• Comportamiento (métodos).• Identidad (propiedad del objeto que lo diferencia del resto).

Bajo este paradigma un programa se escribe en términos de un conjunto de objetos que colaboran entre sí. Lo cual facilita la escritura, pruebas, mantenimiento y reutilización.

Las características más importantes de la POO son:• Abstracción

• Los objetos son “entes abstractos” que pueden realizar alguna tarea, informar y cambiar su estado, comunicarse con otros objetos sin revelar como lo hacen.

• Encapsulamiento• También llamado “ocultameinto de la información”. Los objetos se aíslan del

exterior exponiendo una interfaz para interactuar con ellos.• Polimorfismo

• Comportamientos diferentes, asociados a objetos diferentes, pueden compartir el mismo nombre.

• Herencia• Las clases se relacionan entre sí de forma jerárquica. Los objetos heredan las

propiedades y comportamiento de las clases a las que pertenecen. Lo que permite y facilita el polimorfismo, además de la especialización de los objetos.

Page 15: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (10)

Programación orientada a eventos Bajo este paradigma la estructura y

ejecución de los programas esta determinada por los sucesos que ocurren en el sistema o que los propios programas provoquen.

Los usuarios del programa son los que determinan el flujo del programa en cualquier momento de tiempo.

El programa dirigido por eventos ha de comenzar con algún tipo de inicialización y después quedará bloqueado en espera de que se produzca un evento. Cuando alguno de los eventos esperados se produzca, entonces habrá de ejecutar el “manejador de evento” correspondiente.

Inicialización

Manejadorde Eventos

Evento (ratón)

Evento (teclado)

Evento (Menú)

Evento (botón)

Finalizar

Page 16: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (11)

Paradigma funcional Este paradigma se basa en la utilización de funciones

matemáticas a nivel abstracto. No considera necesario bajar al nivel del lenguaje máquina para

describir el proceso llevado por el programa. La ejecución de una expresión es el concepto principal que se

necesita para la secuenciación de programas. El almacenamiento en montículos y las estructuras de listas se

convierten el proceso natural para la gestión del almacenamiento en lugar del mecanismos tradicional de registros de activación.

LISP es uno de los lenguajes más populares dentro de este paradigma.

• Sus objetos básicos son átomos y listas de átomos.• La llamada y recursividad constituyen los mecanismos básicos de

ejecución.• Se utiliza principalmente en: procesamiento de lenguajes

naturales, prueba de teoremas y sistemas inteligentes.

Page 17: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (12)

Paradigma lógico La mayoría de los lenguajes bajo este paradigma se

basan en la teoría de la lógica de primer orden con algunos comportamientos de orden superior.

Principales campos de aplicación:• Sistemas expertos• Demostración automática de teoremas• Reconocimiento del lenguaje natural

El lenguaje de programación lógica más conocido es el Prolog.

• Se trata de proporcionar las especificaciones de una solución y permitir que la computadora produzca la secuencia de ejecución para la solución, en vez de proporcionar un algoritmo para la solución de un problema.

• Básicamente un programa en Prolog se compone de una serie de hechos, relaciones concretas entre objetos de datos (hechos) y un conjunto de reglas, es decir, un patrón de relaciones entre los objetos de la base de datos.

Page 18: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (13)

Ventajas de los lenguajes de alto nivel Son más fáciles de aprender que los de bajo nivel. Los programadores se liberan de las ocupaciones

rutinarias de los lenguajes de bajo nivel. La mayoría de los lenguajes de alto nivel ofrecen al

programador una gran variedad de estructuras de control. Ej: if, for, while, etc.

La depuración del código fuente es más fácil. Tienen la capacidad de crear estructuras de datos

estáticas o dinámicas, inclusive objetos. Permiten el diseño modular de los programas. Son relativamente independientes de la máquina, lo

cual permite la portabilidad.

Page 19: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Clasificación de los lenguajes de programación … (14)

Desventajas de los lenguajes de alto nivel La comodidad del programador se paga en:

• Archivos ejecutables más grandes• Mayor tiempo de compilación• Mayor tiempo de ejecución• Mayor consumo de memoria

Page 20: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje

Un procesador de lenguaje es toda aplicación en la cual uno de los datos fundamentales de entrada es un lenguaje.

Ejemplos: Traductores Compiladores Intérpretes Preprocesadores Intérpretes de comandos Ensambladores y macroensambladores Desensambladores Conversores fuente-fuente Enlazadores Cargadores Decompiladores Depuradores Compresores Formateadotes Compiladores cruzados Bootstraping

Page 21: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje …(1)

Traductores Un traductor se define como un programa que traduce o

convierte desde un texto o programa escrito en un lenguaje fuente hasta un texto o programa equivalente en un lenguaje destino produciendo, si es el caso, mensajes de error.

Los traductores engloban tanto a los compiladores (el lenguaje que producen suele ser código máquina) como a los intérpretes (más que producir el lenguaje destino, éste es ejecutado).

El esquema básico de un compilador o intérprete es el siguiente:

Programa de EntradaEscrito en Lenguaje Fuente

Traductor Programa de SalidaEscrito en Lenguaje Destino

Mensajes de Error

Page 22: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje …(2)

Tipos de traductores: Compiladores

• Tiene como entrada sentencias correspondientes a un lenguaje formal y como salida, comúnmente, un archivo ejecutable.

Intérpretes• Es como un compilador solo

que la salida es la ejecución.• Su principal ventaja es que

permite una fácil depuración, y su principal inconveniente es la lentitud de su ejecución, además el intérprete debe residir en memoria.

• Algunas desventajas se superan con lenguajes pseudointerpretados.

Código en C

Precompilador

Compilador

Código objeto

Enlazador

Código máquina

Hardware

Archivosde Cabecera

Archivosde Librería

Tie

mp

o d

e c

om

pila

ción

(Tra

ducc

ión)

Código en Java

CompiladorJava

Bytecode Java

Bibliotecaso

Paquetes

Tie

mp

o d

e e

jecu

ción

Red

Cargador de clases

Verificador deBytecode

Intérprete Generadorde

Código

JVM Runtime

Hardware

Máq

uin

a v

irtual Ja

va

Procesamiento de unprograma en lenguaje C

Procesamiento de unprograma en lenguaje Java

Page 23: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje …(3)

Más tipos de traductores: Preprocesadores

• Permiten modificar el programa fuente antes de llevar a cabo el proceso real de compilación.

• Hacen uso de macroinstrucciones y directivas de compilación.

• Su acción pasa inadvertida por los programadores y en suele considerarse una fase preeliminar del compilador.

Intérpretes de comandos• Traduce sentencias simples a

invocaciones a programas de una biblioteca.

• Especialmente son utilizados en Sistemas Operativos.

• Los programas invocados pueden residir en el núcleo del Sistema Operativo, o en archivos almacenados en memoria secundaria.

ProgPal.c

#include “cab.h”int main(){ xxxx xxx return 0;}

cab.h

yyyy yyyy yyy

Preprocesador

ProgPalMod.c

yyyyyyyyyyy

int main(){ xxxx xxx return 0;}

Preprocesamiento de la directiva#include en el lenguaje C

Page 24: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje …(4)

Más tipos de traductores … Ensambladores y macroensambladores

• Se consideran los pioneros de los compiladores.• El programador utiliza mnemotécnicos que se traducen a código

máquina (sin pasar por código objeto).• Los ensambladores que permiten definir macroinstrucciones son

llamados macroensambladores (este fue el primer paso para la construcción de los lenguajes de alto nivel).

Desensambladores • Traducen código máquina a ensamblador• Resulta relativamente fácil dada la correspondencia directa entre

los mnemotécnicos y el código máquina• Ejemplo: el j-- para ensamblar y desensamblar bytecode.

Conversores fuente-fuente• Permiten traducir desde un lenguaje de alto nivel a otro lenguaje

de alto nivel.• El programa fuente traducido no siempre es eficiente, por ejemplo

cuando el lenguaje destino carece de características importantes que en el lenguaje origen si tiene (Java->C).

Page 25: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje …(5)

Autocompilador Es un compilador escrito en el mismo lenguaje que compila (o similar). El lenguaje fuente y el lenguaje de implementación pueden ser el

mismo. El compilador es capaz de compilar el programa fuente del propio

compilador. Los compiladores de C típicamente se escriben en C.

Metacompilador Es un programa que acepta como entrada la descripción de un

lenguaje y produce el compilador de dicho lenguaje. Por lo regular hay dos tipos de metacompiladores, los que trabajan

con expresiones regulares y aquellos que lo hacen con gramáticas libres de contexto.

Ejemplos clásicos son Lex (generador de analizadores léxicos) y Yacc (generador de analizadores sintácticos).

Descompilador Realiza una tarea de traducción inversa, es decir, va del código

máquina al lenguaje de alto nivel. Es relativamente sencillo cuando se trata de ir a código ensamblador o

macro ensamblador, pero no cuando se quiere llegar a un lenguaje de alto nivel.

Page 26: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje …(6)

Compilación, enlace y carga Son las tres fases básicas para

que el hardware ejecute un programa escrito en un lenguaje de alto nivel.

Por lo general un compilador no produce directamente código ejecutable sino código objeto, lo que permite compilación separada.

En la fase de enlace se resuelven referencias cruzadas (utilización de objetos externos). A partir de varios archivos objetos se genera un único archivo objeto que es el ejecutable final.

El cargador coloca el archivo ejecutable en memoria para su ejecución. La colocación depende de la administración propia del sistema operativo.

Entrada:Código de alto nivel

Compilador

SalidaCódigo objeto (.obj)

Entrada y salida de un compilador real

.obj

.obj

.obj Enlazador(Linker)

.exe

Tarea del enlazador

Seg. Código

Seg. Datos

Seg. Pila

Otros Seg

Cargador

Seg. Código

Otros Seg.

Seg. Datos

Seg. Pila

Tarea efectuada por el cargador

.exe

Mem

oria

prin

cipal

Page 27: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje …(7)

Pasadas de compilación Es el número de veces que un compilador debe leer el programa

fuente para generar el código. Es necesario más de una pasada cuando no se puede generar el

código con una sola lectura, un ejemplo de ello es el llamado a funciones.

La lectura a memoria secundaria consume tiempo, por lo que entre menos pasadas mejor.

Compilación incremental Se encarga de compilar solo aquella parte que ha sido modificada del

programa fuente. Puede funcionar a varios niveles, por ejemplo si se detecta que falta

un ; en una línea:• A nivel caracter se recompila el ; y se inserta en el archivo objeto la parte

de la sentencia que faltaba.• A nivel sentencia se recompila la línea completa y se añade al archivo

objeto.• A nivel bloque solo se compila el bloque y se añade al archivo objeto.• A nivel de archivo fuente solo se compila el archivo fuente y se enlaza con

el resto de los objetos para generar el ejecutable. Esta opción es la más común cuando se utiliza el make.

Page 28: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje …(8)

Depuradores Son herramientas que permiten encontrar y corregir los errores de los

programas (bugs <parásitos>). Suelen estar ligadas a los compiladores como soporte adicional para el

programador. Las características habituales son:

• Permiten observar la traza de los programas fuente visualizando el valor de cualquier variable.

• Comprobación de código objeto generado.• Visualizan los valores de las distintas posiciones de memoria, registros, etc.

Utilizan parte de la información utilizada en tiempo de compilación que en la ejecución no se tiene disponible.

Compresores Son una herramienta habitual en el campo de la informática. Un caso particular son los compresores de archivos ejecutables.

Formateadores Pueden ser de muchos tipos y para diferentes fines, desde los dedicados a

formatear texto, ecuaciones o programas. Resaltan la sintaxis o estructura. También entran en este grupo los conversores de formatos.

Page 29: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Procesadores de lenguaje …(9)

Compiladores cruzados Surgen como solución al problema de

desarrollar un primer compilador para una nueva arquitectura.

Dado que el desarrollo de compiladores es una tarea compleja, resulta más fácil construirlos sobre una máquina que ya disponga de herramientas de software.

Se denomina compilador cruzado a un compilador que se ejecuta en una máquina pero el código objeto es para otra máquina.

Bootstrapping Se basa en utilizar las facilidades que

ofrece un lenguaje para compilarse a si mismo.

Se trata de construir el lenguaje a partir de un subconjunto de dicho lenguaje.

Está técnica plantea el problema de cómo se compiló el primer compilador.

Page 30: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware

Los procesadores de lenguaje más utilizados por los profesionales de la computación son los compiladores, dado que son las herramientas que usan en el desarrollo de aplicaciones.

Cuando se desarrollan compiladores uno de los pilares básicos es la arquitectura de la computadora y su repertorio de instrucciones que constituirá el lenguaje objeto.

Una nueva arquitectura plantea dos cuestiones a resolver La construcción de nuevos compiladores La compatibilidad hacia a tras (ejecutar código anterior en nuevas

arquitecturas) Algunas de las técnicas para migrar aplicaciones entre distintas

arquitecturas son:

Page 31: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware …(2)

Intérpretes software o emuladores software. Lee una a una las instrucciones binarias de la

arquitectura antigua que están en un fichero ejecutable, y las interpreta.

Los intérpretes no son muy rápidos, pero se pueden construir y adaptar a distintas arquitecturas sin excesivos costes de desarrollo.

Se puede aumentar el rendimiento de los intérpretes creando una caché que permita almacenar formas intermedias de instrucciones que ya se interpretaron previamente.

Ejemplos:• Emuladores de DOS para distintos sistemas operativos • Intérpretes de la máquina abstracta JVM (Java Virtual

Machine) para distintas plataformas y que permiten ejecutar los códigos binarios denominados bytecode

Page 32: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware …(3)

Emuladores hardware. Un emulador hardware trabaja de forma similar a un

intérprete de software, pero está implementado en hardware de forma que decodifica las instrucciones de la arquitectura antigua y las traduce a la nueva arquitectura.

Un emulador hardware es mucho más rápido que un intérprete software, sin embargo sólo se puede diseñar para una máquina específica.

Ejemplo:• Los microprocesadores Java que emulan la máquina abstracta

JVM (Java Virtual Machine), también denominados por Sun arquitecturas PicoJava.

Page 33: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware …(4)

Traductores entre códigos binarios o ensambladores. Son conjuntos de instrucciones de la nueva arquitectura

que reproducen el comportamiento de un programa en la arquitectura antigua.

Habitualmente, la información de la máquina antigua se almacena en registros de la nueva máquina.

Los programas traducidos a nivel binario o ensamblador son más rápidos que los intérpretes software o emuladores hardware, pero más lentos que los programas construidos con compiladores nativos, que aprovechan al máximo la arquitectura de la nueva máquina.

Ejemplos de tradcutores binarios• Los desarrollados por DEC para traducir instrucciones de las

arquitecturas VAX y MIPS a la nueva arquitectura ALPHA.

Page 34: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware …(5)

Compiladores nativos. Los programas fuente antiguos se pueden

volver a recompilar con compiladores desarrollados para la nueva arquitectura, aprovechando al máximo sus características.

Esta es la opción que produce la mejor calidad de código objeto en la nueva arquitectura, y por consiguiente la mayor velocidad con respecto a las opciones comentadas anteriormente.

Page 35: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware …(6)

La computadora como una máquina multinivel

Page 36: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware …(7)

Elementos principales de una computadora y del CPU

Elementos principalesde una computadora

Computadora

Memoria E/S

Sistemade Buses

CPU

Registros ALU

InterconexiónInterna del

CPU

CU

Unidad de Procesamiento

Central

Elementos PrincipalesDel CPU

Page 37: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware …(8)

Módulo de E/S

Registros

PC

IR

MAR

AC

CPU Memoria…

Instrucción

Instrucción

Instrucción

Instrucción

Dato

Dato

Bus

Bus

Bu

s

PC: Contador de programaIR: Registro de InstrucciónMAR: Registro de dirección de memoriaAC: Acumulador

Puntos clave de la arquitectura de von Neumann Los datos y las instrucciones

se almacenan en una sola memoria de lectura-escritura.

Los contenidos de esta memoria se direccionan indicando su posición, sin considerar el tipo de dato contenido en la misma.

La ejecución se produce siguiendo una secuencia de instrucción tras instrucción (a no ser que dicha secuencia se modifique explícitamente).

Page 38: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware …(9)

Por cada instrucción de un programa que se esta ejecutando el sistema recorre una serie de etapas que se divide en dos ciclos: Ciclo de captación.

• El objetivo es obtener el código de la siguiente instrucción a ejecutar. Los pasos son

• Captar la instrucción de memoria principal.• Decodificar el código de la instrucción.• Incrementar el contador de programa (PC++).

Ciclo de ejecución.• Interpretada la instrucción se envían las señales de control necesarias para

ejecutarla. Los pasos son:• Se obtienen los datos implicados en la instrucción si es necesario.• Se ejecuta la instrucción (se realizan las operaciones directamente con los

datos).

FININICIOCaptación dela instrucción

Ejecución dela instrucción

Ciclo de Instrucción Básico

Ciclo deEjecución

Ciclo deCaptación

Page 39: Programación de Sistemas Unidad 1 Introducción. Contenido Campo de estudio de la programación de sistemas Clasificación de los lenguajes de programación

Hardware …(10)

Diagrama de estados del ciclo de instrucción

Cálculo dela dirección dela instrucción

Captación de la

instrucción

Decodificaciónde la

instrucción

Cálculo dela dirección del operando

Captación del

operando

Operacióncon losdatos

Cálculo dela dirección del

operando

Almacenamientodel

operando

Variosoperandos

Variosresultados

Cadena o vector de datosInstrucción completadaCaptar la siguiente instrucción

EJECUCIÓNCAPTACIÓN

PC++

IR=*(PC) MAR=[IR]