Anda di halaman 1dari 9

Introduccin a la Programacin de Sistemas

1.1 Qu es y qu estudia la Programacin de Sistemas?


La Programacin de Sistemas se refiere a la creacin de programas cuya finalidad es servir a otros programas.

Entre los programas que se manejan en la Programacin de Sistemas se encuentran, entre otros, los sistemas operativos, los compiladores, los ensambladores, los cargadores, los macroprocesadores, los manejadores de bases de datos.

1.2 Herramientas desarrolladas Programacin de Sistemas.

con

la

teora

de

Muchas herramientas de software que manipulan programas fuente realizan algn tipo de anlisis, como ejemplo se pueden mencionar: a) Editores de estructuras. Un editor de estructuras toma como entrada una secuencia de rdenes para construir un programa fuente. El editor de estructuras no slo realiza las funciones de creacin y modificacin de textos de un editor de textos ordinario, sino que tambin analiza el texto del programa, imponiendo al programa fuente una estructura jerrquica apropiada. De esa manera, el editor de estructuras puede realizar tareas adicionales tiles para la preparacin de programas. Por ejemplo, puede comprobar si la entrada est formada correctamente, puede proporcionar palabras clave de manera automtica (por ejemplo, cuando el usuario escribe while, el editor proporciona el correspondiente do y le recuerda al usuario que entre las dos palabras debe ir un condicional) y puede saltar desde un begin o un parntesis izquierdo hasta su correspondiente end o parntesis derecho. Adems, la salida de tal editor suele ser similar a la salida de la fase de anlisis de un compilador. b) Impresoras estticas. Una impresora esttica analiza un programa y lo imprime de forma que la estructura del programa resulte claramente visible. Por ejemplo, los comentarios pueden aparecer con un tipo de letra especial, y las proposiciones pueden aparecer con una identacin proporcional a la

profundidad de su anidamiento en la organizacin jerrquica de las proposiciones. c) Verificadores estticos. Un verificador esttico lee un programa, lo analiza e intenta descubrir errores potenciales sin ejecutar el programa. La parte de anlisis a menudo es similar a la que se encuentra en los compiladores de optimizacin. As, un verificador esttico puede detectar si hay partes de un programa que nunca se podrn ejecutar o si cierta variable se usa antes de ser definida. Adems, puede detectar errores de lgica, como intentar utilizar una variable real como apuntador, empleando las tcnicas de verificacin de tipos. d) Intrpretes. En lugar de producir un programa objeto como resultado de una traduccin, un intrprete realiza las operaciones que implica el programa fuente. Para una proposicin de asignacin, por ejemplo, un intrprete podra construir un rbol y despus efectuar las operaciones de los nodos conforme recorre el rbol. Muchas veces los intrpretes se usan para ejecutar lenguajes de rdenes, pues cada operador que se ejecuta en un lenguaje de rdenes suele ser una invocacin de una rutina compleja, como un editor o un compilador. Del mismo modo algunos lenguajes de muy alto nivel, normalmente son interpretados, porque hay muchas cosas sobre los datos, como el tamao y la forma de las matrices, que no se pueden deducir en el momento de la compilacin. e) Compiladores. Tradicionalmente, se concibe un compilador como un programa que traduce un programa fuente, como FORTRAN, al lenguaje ensamblador o de mquina de algn computador. Sin embargo, hay lugares, al parecer, no relacionados donde la tecnologa de los compiladores se usa con regularidad. La parte de anlisis de cada uno de los siguientes ejemplos es parecida a la de un compilador convencional. a. Formadores de textos. Un formador de textos toma como entrada una cadena de caracteres, la mayor parte de la cual es texto para componer, pero alguna incluye rdenes para indicar prrafos, figuras o estructuras matemticas, como subndices o superndices. b. Compiladores de circuitos de silicio. Un compilador de circuitos de silicio tiene un lenguaje fuente similar o idntico a un lenguaje de programacin convencional. Sin embargo las variables del lenguaje no representan localidades de memoria, sino seales lgicas (0 o 1) o grupos de seales en un circuito de conmutacin. La salida es el diseo de un circuito en un lenguaje apropiado. c. Intrpretes de consultas. Un intrprete de consultas traduce un predicado que contiene operadores relacionales y bolanos a rdenes para buscar en una base de datos registros que satisfagan ese predicado.

1.3 Lenguajes
1.3.1 Lenguajes Naturales
Este tipo de lenguaje es el que nos permite el designar las cosas actuales y razonar acerca de ellas, fueron desarrollados y organizados a partir de la experiencia humana y puede ser utilizado para analizar situaciones altamente complejas y razonar muy sutilmente. La riqueza de sus componentes semnticos da a los lenguajes naturales su gran poder expresivo y su valor como una herramienta para razonamiento sutil. Por otro lado la sintaxis de un LN puede ser modelada fcilmente por un lenguaje formal, similar a los utilizados en las matemticas y la lgica. Otra propiedad de los lenguajes naturales es la poli semntica, es decir la posibilidad de que una palabra en una oracin tenga diversos significados. En un primer resumen, los lenguajes naturales se caracterizan por las siguientes propiedades: Desarrollados por enriquecimiento progresivo antes de cualquier intento de formacin de una teora. La importancia de su carcter expresivo debido grandemente a la riqueza del componente semntico(poli semntica). Dificultad o imposibilidad de una formalizacin completa.

1.3.2 Lenguajes Artificiales


El lenguaje nos permite hacer la abstraccin y conceptualizacin de ideas y por medio de este comunicarnos. En las distintas ramas de la ciencia nos encontramos con lenguajes artificiales o mejor conocidos como lenguajes formales que limitan su alcance a su materia de estudio. Concretamente y despus de esta breve introduccin, en la actualidad nos encontramos con distintos lenguajes para programar y tambin los campos de aplicacin son variados y completamente distintos. De acuerdo a la complejidad del problema a resolver ser necesario hacer una seleccin adecuada del lenguaje de programacin (incluso se puede generar el lenguaje de programacin propio) que permita resolver de manera eficiente el problema. Hasta hace pocos aos, el software de desarrollo se basaba fundamentalmente en Lenguajes Artificiales (Basic, C, Cobol, Pascal) para explicar a la computadora las acciones a realizar. Por el contrario, los Orientados a Objetos permiten que el programador ignore el lenguaje comprensible para la mquina poniendo a su disposicin una serie de objetos pre programados. De este modo la tarea se simplifica enormemente y se reduce a disponer,

dentro de la ventana de programa y en la secuencia adecuada, los programas y funciones de los que nos provee.

1.3.3 Proceso de la Comunicacin


La comunicacin es un fenmeno inherente a la relacin grupal de los seres vivos por medio del cual stos obtienen informacin acerca de su entorno y de otros entornos y son capaces de compartirla haciendo partcipes a otros de esa informacin. La comunicacin es de suma importancia para la supervivencia de especies gregarias, pues la informacin que sta extrae de su medio ambiente y su facultad de transmitir mensajes sern claves para sacar ventaja del modo de vida gregario. Etimolgicamente, la palabra comunicacin deriva del latn communicare, que puede traducirse como poner en comn, compartir algo. Se considera una categora polismica en tanto su utilizacin no es exclusiva de una ciencia social en particular, teniendo connotaciones propias de la ciencia social de que se trate. Proceso de transmisin de informacin de un emisor (A) a un receptor (B) a travs de un medio . En la transmisin y la recepcin de esa informacin se utiliza un cdigo especfico que debe ser codificado, por el emisor y decodificado por el receptor. Elementos del Proceso de la comunicacin Los elementos de la comunicacin humana son: fuente, emisor o codificador, cdigo (reglas del signo, smbolo), mensaje primario (bajo un cdigo), receptor o decodificador, canal, ruido (barreras o interferencias) y la retroalimentacin o realimentacin (feed-back, mensaje de retorno o mensaje secundario). Fuente: Es el lugar de donde emana la informacin, los datos, el contenido que se enviar, en conclusin: de donde nace el mensaje primario. Emisor o codificador: Es el punto (persona, organizacin) que elige y selecciona los signos adecuados para transmitir su mensaje; es decir, los codifica para poder llevarlo de manera entendible al receptor. En el emisor se inicia el proceso comunicativo. Receptor o decodificador: Es el punto (persona, organizacin) al que se destina el mensaje, realiza un proceso inverso al del emisor ya que en l est el descifrar e interpretar lo que el emisor quiere dar a conocer. Existen dos tipos de receptor, el pasivo que es el que slo recibe el mensaje, y el receptor activo o perceptor ya que es la persona que no slo recibe el mensaje sino que lo percibe y lo almacena. El mensaje es recibido tal como el emisor quiso decir, en este tipo de receptor se realiza lo que comnmente denominamos el feed-back o retroalimentacin. Cdigo: Es el conjunto de reglas propias de cada sistema de signos y smbolos que el emisor utilizar para trasmitir su mensaje, para combinarlos de manera arbitraria porque tiene que estar de una manera adecuada para que el receptor pueda captarlo. Un ejemplo

claro es el cdigo que utilizan los marinos para poder comunicarse; la gramtica de algn idioma; los algoritmos en la informtica, todo lo que nos rodea son cdigos. Mensaje: Es el contenido de la informacin (contenido enviado): el conjunto de ideas, sentimientos, acontecimientos expresados por el emisor y que desea trasmitir al receptor para que sean captados de la manera que desea el emisor. El mensaje es la informacin. Canal: Es el medio a travs del cual se transmite la informacin-comunicacin, estableciendo una conexin entre el emisor y el receptor. Mejor conocido como el soporte material o espacial por el que circula el mensaje. Ejemplos: el aire, en el caso de la voz; el hilo telefnico, en el caso de una conversacin telefnica. Referente: Realidad que es percibida gracias al mensaje. Comprende todo aquello que es descrito por el mensaje. Situacin: Es el tiempo y el lugar en que se realiza el acto comunicativo. Interferencia o barrera: Cualquier perturbacin que sufre la seal en el proceso comunicativo, se puede dar en cualquiera de sus elementos. Son las distorsiones del sonido en la conversacin, o la distorsin de la imagen de la televisin, la alteracin de la escritura en un viaje, la afona del hablante, la sordera del oyente, la ortografa defectuosa, la distraccin del receptor, el alumno que no atiende aunque est en silencio. Retroalimentacin o realimentacin (mensaje de retorno): Es la condicin necesaria para la interactividad del proceso comunicativo, siempre y cuando se reciba una respuesta (actitud, conducta) sea deseada o no. Logrando la interaccin entre el emisor y el receptor. Puede ser positiva (cuando fomenta la comunicacin) o negativa (cuando se busca cambiar el tema o terminar la comunicacin). Si no hay realimentacin, entonces solo hay informacin ms no comunicacin.

1.4 Traductor y su Estructura


Traductor: En un sentido orientado hacia la computacin, un traductor, de manera general, es un software que toma como entrada un programa escrito en un cdigo llamado fuente y genera como salida otro programa en un cdigo llamado objeto. Algunos ejemplos de traductores son los compiladores (toma como entrada cdigo en alto nivel y genera como salida cdigo en bajo nivel), los intrpretes (toma como entrada cdigo en alto nivel y genera como salida un cdigo intermedio), los preprocesadores (toma como entrada cdigo en alto nivel y genera como salida cdigo en alto nivel) y el ensamblador (toma como entrada cdigo en ensamblador y genera como salida cdigo en bajo nivel). Su estructura podra ser expresada de la siguiente manera: cdigo fuente traductor cdigo objeto

1.4.1 Ensambladores
Ensamblador El trmino ensamblador (del ingls assembler) se refiere a un tipo de programa informtico que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene cdigo mquina, ejecutable directamente por la mquina para la que se ha generado. El propsito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de programas, ya que escribir directamente en cdigo binario, que es el nico cdigo entendible por la computadora, es en la prctica imposible. La evolucin de los lenguajes de programacin a partir del lenguaje ensamblador origin tambin la evolucin 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 cdigos mnemotcnicos que aparecen por su cdigo de operacin correspondiente en sistema binario.
Tipos de ensambladores

Podemos distinguir entre tres tipos de ensambladores: Ensambladores bsicos. Son de muy bajo nivel, y su tarea consiste bsicamente en ofrecer nombres simblicos a las distintas instrucciones, parmetros y cosas tales como los modos de direccionamiento. Adems, reconoce una serie de directivas (o meta instrucciones) que indican ciertos parmetros de funcionamiento del ensamblador. Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores bsicos, fueron muy populares en las dcadas de los 50 y los 60, antes de la generalizacin de los lenguajes de alto nivel. Hacen todo lo que puede hacer un ensamblador, y adems 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 atrs pudiendo trabajar con programas con estructuras de 16 bits. Adems de realizar la misma tarea que los anteriores, permitiendo tambin el uso de macros, permiten utilizar estructuras de programacin ms complejas propias de los lenguajes de alto nivel.

1.4.2 COMPILADORES
Un compilador acepta programas escritos en un lenguaje de alto nivel y los traduce a otro lenguaje, generando un programa equivalente independiente, que puede ejecutarse tantas veces como se quiera. Este proceso de traduccin se conoce como compilacin.

Los programas interpretados suelen ser ms lentos que los compilados, pero los intrpretes son ms flexibles como entornos de programacin y depuracin.
Partes de un compilador

Normalmente los compiladores estn divididos en dos partes: Front End: es la parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar. Back End: es la parte que genera el cdigo mquina, especfico de una plataforma, a partir de los resultados de la fase de anlisis, realizada por el Front End. Esta divisin permite que el mismo Back End se utilice para generar el cdigo mquina de varios lenguajes de programacin distintos y que el mismo Front End que sirve para analizar el cdigo fuente de un lenguaje de programacin concreto sirva para la generacin de cdigo mquina en varias plataformas distintas. El cdigo que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker).
Tipos de compiladores

Esta taxonoma de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categoras: Compiladores cruzados: generan cdigo para un sistema distinto del que estn funcionando. Compiladores optimizadores: realizan cambios en el cdigo para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original. Compiladores de una sola pasada: generan el cdigo mquina a partir de una nica lectura del cdigo fuente. Compiladores de varias pasadas: necesitan leer el cdigo fuente varias veces antes de poder producir el cdigo mquina. Compiladores JIT (Just In Time): forman parte de un intrprete y compilan partes del cdigo segn se necesitan. Pauta de creacin de un compilador: En las primeras pocas de la informtica, el software de los compiladores era considerado como uno de los ms complejos existentes.

Los primeros compiladores se realizaron programndolos directamente en lenguaje mquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador. Actualmente existen herramientas que facilitan la tarea de escribir compiladores intrpretes informticos. Estas herramientas permiten generar el esqueleto del analizador sintctico a partir de una definicin formal del lenguaje de partida, especificada normalmente mediante una gramtica formal y barata, dejando nicamente al programador del compilador la tarea de programar las acciones semnticas asociadas.

1.4.3 INTRPRETES.
Un intrprete es un traductor que toma un programa fuente, lo traduce y a continuacin lo ejecuta. BASIC es un lenguaje interpretado. Se trata de traductores-ejecutores ya que con cada instruccin realizan un proceso triple de lectura-traduccin-ejecucin. Son relativamente lentos, pero muy buenos para la depuracin de programas. Se puede tambin utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el cdigo objeto que se produce durante la corrida de compilacin para utilizarlo en una corrida de produccin futura, el programador slo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuacin, un programa intrprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la mquina, convierte cada proposicin del programa fuente en lenguaje de mquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el cdigo objeto para utilizarlo posteriormente. La siguiente vez que se utilice una instruccin, se le debe interpretar otra vez y traducir a lenguaje mquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instruccin del ciclo tendr que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea ms lento en tiempo de ejecucin (porque se va revisando el cdigo en tiempo de ejecucin) pero ms rpido en tiempo de diseo (porque no se tiene que estar compilando a cada momento el cdigo completo). El intrprete elimina la necesidad de realizar una corrida de compilacin despus de cada modificacin del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelacin deber ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de produccin.

1.5 Generadores De Cdigo Para Compiladores


Aqu se hablar de las herramientas generadoras automticas de cdigo para un compilador. Estas herramientas trabajan basadas en un conjunto de reglas; estas reglas definen la

traduccin de las instrucciones del lenguaje intermedio al lenguaje de mquina. Para la generacin de cdigo, se busca en las reglas establecidas la proposicin que coincida con la entrada actual; la entrada actual proviene de un rbol. Un ejemplo de esto seria Entonces el compilador recibe una entrada de caracteres, por lo general escrita por el programador; el compilador realiza los anlisis: lxico, sintctico y semntico, para generar seguidamente el cdigo intermedio, el cdigo intermedio se genera con principios de bsqueda de patrones y aplicacin de reglas. Despus se hace la optimizacin del cdigo intermedio; seguidamente se realiza la generacin de cdigo objeto en lenguaje de mquina. En sntesis para crear un generador de cdigo se deben hacer muchas de las tareas que realizan los compiladores; algunas de estas tareas son: la bsqueda de patrones, la escritura de cdigo, el anlisis sintctico, el anlisis lxico y la optimizacin de cdigo. Estas tareas las realiza el desarrollador una vez para una arquitectura especfica. METACOMPILADOR: Es sinnimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje. El desarrollo de los meta compiladores se encuentra con la dificultad de unir la generacin de cdigo con la parte de anlisis. Lo que s se han desarrollado son generadores de analizadores lxicos y sintcticos. Por ejemplo, los conocidos: LEX. Generador de analizadores lxicos YACC: generador de analizadores sintcticos desarrollados para UNIX. Los inconvenientes que tienen son que los analizadores que generan no son muy eficientes.