23
Programación de Sistemas Unidad 1 Introducción

Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Embed Size (px)

Citation preview

Page 1: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Programación de Sistemas

Unidad 1 Introducción

Page 2: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Contenido

Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas

Traductores Concepto de traductor Tipos de traductores Conceptos básicos relacionados con la

traducción Estructura del traductor

Page 3: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y lenguajes de programación

La programación de sistemas abarca el software de base como: ensambladores, sistemas operativos, compiladores, sistemas manejadores de base de datos, etc.

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 4: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y lenguajes de programación (2)

Los lenguajes que los programadores han utilizado para comunicarse (programar) sistemas históricamente han sido: Lenguaje máquina Lenguaje ensamblador Lenguaje de alto nivel

Page 5: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y 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 6: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y lenguajes de programación (4)

Lenguaje de bajo nivel Se apegan a una arquitectura en específico. Básicamente se refiere al ensamblador

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 7: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y 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

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áquinaLenguaje de alto nivel

B+=A;

Page 8: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y lenguajes de programación (6)

Los lenguajes de alto nivel se corresponden con diferentes 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 9: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y 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 10: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y 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.

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 11: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y 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 12: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y 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 13: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y 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 14: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Paradigmas y 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 15: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Traductores

Concepto 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, este 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 16: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Traductores (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 17: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Traductores (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 18: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Traductores (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).

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).

Compilador cruzado Genera código máquina que será ejecutado en otra máquina

distinta. Se utiliza en el desarrollo de nuevos sistemas, para disponer

de sistemas operativos y compiladores antes de disponer del sistema físicamente.

Page 19: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Traductores (5)

Conceptos básicos relacionados con la traducción Compilación, enlace y carga Pasadas de compilación Compilación incremental Autocompilador Metacompilador Descompilador

Page 20: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Traductores (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 21: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Traductores (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 22: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Traductores (8)

Autocompilador Es un compilador escrito en el mismo lenguaje que

compila (o similar). 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 23: Programación de Sistemas Unidad 1 Introducción. Contenido Paradigmas y lenguajes de programación Lenguajes de programación Paradigmas Traductores Concepto

Traductores (9)

Estructura de un traductor Divide su labor en dos etapas:

Análisis de la entrada y generación de estructuras intermedias.

Síntesis de las estructuras intermedias para generar la salida. Los objetivos de la etapa de análisis son:

Controlar la corrección de los errores del lenguaje fuente . Generar las estructuras necesarias para comenzar la etapa de

síntesis. La etapa de síntesis construye el objeto deseado

partiendo primero de un código intermedio, pasando por una optimización hasta llegar al ejecutable.

Fuente Análisis Destino

Mensajes de Error

Síntesis

Mensajes de Error