Download Manual de Prácticas

Document related concepts
Transcript
Alumno:
Alfonso Ramos De Ángel
Catedrático:
Yesenia Pérez Reyes
Materia:
Programación de Sistemas
Grupo:
5° Semestre “A”
Turno:
Matutino
Titulo:
Unidad I
Introducción al a programación
Fecha de entrega 25 de agosto del 2011
Programación de Sistemas
PLAN ISIC-2004-296
INGENIERÍA EN SISTEMAS COMPUTACIONALES
UNIDAD I
INTRODUCCION A LA PROGRAMACION
1.1 ¿Qué es y que estudia la programación de sistemas?
1.2 Herramientas desarrolladas con la teoría de programación de sistemas
1.3 Lenguajes
1.3.1 Lenguajes naturales.
1.3.2 Lenguajes artificiales.
1.3.3 Proceso de la comunicación.
1.4 Traductor y su estructura.
1.4.1 Ensambladores.
1.4.2 Compiladores.
1.4.3 Interpretes.
1.5 Generadores de código para compiladores (compilador de compilador).
CONCLUCION
BIBLIOGRAFIA
1.1 ¿Qué es y qué estudia la programación de sistemas?
• Programa: conjunto de instrucciones que ejecuta una computadora para realizar
una actividad.
• Sistema: conjunto de elementos autónomos que trabajan en armonía para
alcanzar un objetivo en común.
¿QUE ES?
Un sistema es un conjunto de componentes que interaccionan entre si para lograr
un objetivo común. Las personas se comunican con el lenguaje, que es un sistema
muy desarrollado formado por palabras y símbolos que tienen significado para el
que habla y para quienes lo escuchan, lo mismo es para las computadoras las
cuales tienen sistemas y se comunican por medio de computadoras.
La programación es el proceso de convertir las especificaciones a grandes rasgos
de los sistemas en instrucciones de máquina que produzcan los resultados
deseados.
¿QUE ESTUDIA?
El trabajo de un programador de sistemas es seleccionar, modificar y mantener el
complejo software del sistema operativo.
Página 2
Por lo tanto, los programadores de sistemas desempeñan una función de apoyo al
mantener el ambiente del software del sistema operativo en el que trabajan los
programadores de aplicaciones y los operadores de las computadoras. También
participan en las decisiones relativas a reducciones o ampliaciones de hardware y/o
software.
Programación de Sistemas Conceptos y Aplicaciones
Se entiende por programación de sistemas el conjunto de programas necesario
para que una computadora de una imagen coherente y monolítica ante sus
usuarios. Es un área especializada dentro de las ciencias de la computación. Así,
mediante la programación de sistemas, no solo se manejan las computadoras por
medio del lenguaje maquina (0 y 1) sino por otros sistemas operativos, sin lo cual
sería muy difícil la interacción con la maquina.
El estudio de la programación de sistemas
En esta área se estudia la teoría de máquinas y su aplicación en el diseño de
sistemas digitales y de arquitectura de computadoras. Áreas específicas: Sistemas
digitales para arquitecturas paralelas y control de procesos y sistemas
reconfigurables.
Tipos de sistemas
• Sistemas físicos: equipo, maquinaria, objetos reales, Hardware
• Sistemas abstractos: ideas, hipótesis, conceptos, planes, Software
• Sistemas abiertos y cerrados dependiendo del ambiente en que se ejecutan.
Características de un sistema
• Están bien delimitados, por lo tanto se conocen sus fronteras.
• Un sistema puede interactuar con su medio ambiente a través de una interfaz de
entradas y salidas que recibe el nombre de parámetros del sistema.
• Un sistema puede ser componente de otro sistema
¿Cuál es la diferencia entre un técnico y un ingeniero?
• A parte del grado académico, el tipo de programas que realizan.
Página 3
• Generalmente un técnico realiza software de aplicaciones (ABCD) o aplicaciones
de gestión (nóminas, control de inventarios, etc.)
• Un ingeniero es más creativo, más ciencia e investigación; mientras que un
licenciado aplica los conocimientos.
Clasificación del software
• Software de sistemas: software que ayuda (sirve de base) a otro software.
• Procesan estructuras de datos complejas
• Tienen una fuerte dependencia con el hardware
• Utilizan una fuerte gestión de procesos (concurrencia, planificación, etc.)
Clasificación del software
• Software de aplicación (gestión)
• Software de tiempo real
• Software empotrado
• Software de ingeniería y científico
• Software basado en Web
• Software de inteligencia artificial
Áreas afines a la programación de sistemas
• Teoría de la computación (lenguajes y autómatas).
• Lenguajes de programación
• Arquitecturas de computadoras
• Algorítmica
• Ingeniería del software
1.2 Herramientas desarrolladas con la teoría de programación de sistemas
Las herramientas de programación, son aquellas que permiten realizar aplicativos,
programas, rutinas, utilitarios y sistemas para que la parte física del computador u
ordenador, funcione y pueda producir resultados.
Hoy día existen múltiples herramientas de programación en el mercado, tanto para
analistas expertos como para analistas inexpertos.
Página 4
Las herramientas de programación más comunes del mercado, cuentan hoy día con
programas de depuración o debugger, que son utilitarios que nos permiten detectar
los posibles errores en tiempo de ejecución o corrida de rutinas y programas.
Muchas herramientas de software que manipulan programas fuente realizan
primero algún tipo de análisis. Algunos ejemplos de tales herramientas son:

1. Editores de estructuras: Un editor de estructuras toma como entrada una
secuencia de órdenes para construir un programa fuente. El editor de
estructuras no sólo realiza las funciones de creación y modificación de textos de
un editor de textos ordinario, sino que también analiza el texto del programa,
imponiendo al programa fuente una estructura jerárquica apropiada. De esa
manera, el editor de estructuras puede realizar tareas adicionales útiles para la
preparación de programas. Por ejemplo, puede comprobar si la entrada está
formada correctamente, puede proporcionar palabras clave de manera
automática (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 paréntesis izquierdo hasta
su correspondiente end o paréntesis derecho. Además, la salida de tal editor
suele ser similar a la salida de la fase de análisis de un compilador.

2. Impresoras estéticas: Una impresora estética 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 identificación proporcional a la
profundidad de su anidamiento en la organización jerárquica de las
proposiciones.
3. Verificadores estáticos: Un verificador estático lee un programa, lo analiza e
intenta descubrir errores potenciales sin ejecutar el programa. La parte de
análisis a menudo es similar a la que se encuentra en los compiladores de
optimización. Así, un verificador estático puede detectar si hay partes de un
programa que nunca se podrán ejecutar o si cierta variable se usa antes de ser
definida. Además, puede detectar errores de lógica, como intentar utilizar una
variable real como apuntador, empleando las técnicas de verificación de tipos.
4. Intérpretes: En lugar de producir un programa objeto como resultado de una
traducción, un intérprete realiza las operaciones que implica el programa fuente.
Para una proposición de asignación, por ejemplo, un intérprete podría construir
un árbol como el de la figura 1 y después efectuar las operaciones de los nodos
conforme “recorre” el árbol. En la raíz descubriría que tiene que realizar una
asignación, y llamaría a una rutina para evaluar la expresión de la derecha y
después almacenaría el valor resultante en la localidad de memoria asociada
con la identificadora posición. En el hijo derecho de la raíz, la rutina descubriría
que tiene que calcular la suma de dos expresiones. Se llamaría a sí misma de
manera recursiva para calcular el valor de la expresión velocidad*60. Después
sumaría ese valor de la variable inicial. Muchas veces los intérpretes se usan


Página 5

para ejecutar lenguajes de órdenes, pues cada operador que se ejecuta en un
lenguaje de órdenes suele ser una invocación 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 tamaño y la forma de las matrices, que no se pueden deducir en el
momento de la compilación.
5. Compiladores: Tradicionalmente, se concibe un compilador como un
programa que traduce un programa fuente, como FORTRAN, al lenguaje
ensamblador o de máquina de algún computador. Sin embargo, hay lugares, al
parecer, no relacionados donde la tecnología de los compiladores se usa con
regularidad. La parte de análisis 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 párrafos, figuras o estructuras matemáticas, como subíndices
o superíndices.
b) Compiladores de circuitos de silicio. Un compilador de circuitos de silicio tiene un
lenguaje fuente similar o idéntico a un lenguaje de programación convencional. Sin
embargo las variables del lenguaje no representan localidades de memoria, sino
señales lógicas (0 o 1) o grupos de señales en un circuito de conmutación. La salida
es el diseño de un circuito en un lenguaje apropiado.
c) Intérpretes de consultas. Un intérprete de consultas traduce un predicado que
contiene operadores relacionales y boléanos a órdenes para buscar en una base de
datos registros que satisfagan ese predicado.
• El caso más sencillo de programación de sistemas es la construcción de
compiladores para ejecutar lenguajes de programación.
• Pero no sólo se aplica en lenguajes de programación, sino también se aplica en
cualquier programa que se tenga que hacer un análisis o extracción de información
Software de sistemas
• Editores de texto inteligentes (IDEs con autocompletar, revisores ortográficos, etc)
• Impresoras estéticas (impresión de gran calidad sin un editor visual, Latex, etc.)
• Intérpretes (Shells de sistemas operativos o de alguna aplicación como un SMBD)
• Búsqueda de información que no es tan común en base a patrones, etc.
1.3 Lenguajes
Página 6
• Conjunto de palabras y reglas que permiten comunicar información entre dos
entidades.
• Lenguaje son las cadenas que pueden generarse a través de una gramática
• El lenguaje que entienden las máquinas (lenguaje ARTIFICIAL) es muy diferente
del lenguaje que entendemos los humanos
Repaso de lenguajes y autómatas
• Símbolo: representación abstracta de alguna entidad
• Alfabeto: conjunto finito de símbolos
• Cadena: yuxtaposición de símbolos de un alfabeto que representan a un objeto
• Lenguaje: conjunto de cadenas válidas que se pueden formar a través de un
alfabeto
1.3.1 Lenguajes naturales
El lenguaje natural es una de las manifestaciones de la capacidad cognitiva del ser
humano en la que da curso a la exteriorización de sus pensamientos a sus
semejantes. Para ello las personas se valen de una serie de convenciones fonéticas
y visuales que hacen posible el entendimiento. Dada la naturaleza del lenguaje
natural, su tratamiento por medio de sistemas de cómputo, constituye un reto de
investigación y desarrollo.
• El lenguaje natural es inherentemente ambiguo, por lo que se necesita crear un
lenguaje que permita eliminar esas ambigüedades.
• Es mejor crear otro lenguaje, denominado de alto nivel que es el encargado de
mediar entre la abstracción humana y la abstracción de lenguaje de máquina
1.3.2 Lenguajes artificiales
Los lenguajes de programación no se hablan, lo cual significa también una gran
diferencia. Su fin no es que se entiendan en la comunicación oral, ya que las
computadoras actuales casi no toman en cuenta las ondas sonoras. Pero aún
suponiendo que fuera posible hablar a una computadora (lo cual es completamente
concebible), muy pocos programadores estarían dispuestos a dialogar en
FORTRAN.
En este terreno resulta exacta la imagen que nos da la ficción científica.
Los programadores se dan cuenta de esto cuando distinguen entre lenguajes
Página 7
artificiales o programación y lenguajes "naturales" como el español y el inglés. En
sí, la palabra "artificial" nos dice algo sobre el plan del programador. Aunque el
español o cualquier otro idioma son también producto de artificio, su creación a lo
largo de siglos no fue plenamente consciente y racional como ha sido la creación de
lenguajes de programación.
• Los lenguajes artificiales son aquellos que los humanos hemos creado para
comunicarnos
• Las computadoras sólo saben 0 y 1
• Un lenguaje artificial permite implementar un algoritmo en una computadora para
resolver un problema.
Lenguajes de bajo nivel
• Una abstracción más entendible del lenguaje máquina es el uso de lenguajes
ensambladores en donde cada instrucción o mnemónico es traducido a una
instrucción máquina.
• ADD AX, 5
• LOAD A, 5
Lenguajes máquina
• El lenguaje máquina es dependiente de cada tipo de arquitectura de
computadoras por lo que el código no es fácilmente portable a otras arquitecturas.
• Los lenguajes de alto nivel son más portables en lo que respecta al código fuente
pudiendo llevarse a otras arquitecturas de computadoras sin mayor problema.
Clasificación de Chomsky
• Lenguajes sin restricciones (gramática 0)
• Lenguajes dependientes del contexto (tipo 1)
• Lenguajes independientes del contexto (tipo 2)
• Lenguajes regulares (tipo 0 no presentan ambigüedades, lo ideal para
representarlas en una computadora)
1.3.3 Proceso de la comunicación
La comunicación es un fenómeno inherente a la relación grupal de los seres vivos
por medio del cual éstos obtienen información acerca de su entorno y de otros
entornos y son capaces de compartirla haciendo partícipes a otros de esa
información. La comunicación es de suma importancia para la supervivencia de
especies gregarias, pues la información que ésta extrae de su medio ambiente y su
Página 8
facultad de transmitir mensajes serán claves para sacar ventaja del modo de vida
gregario.
Los elementos o factores de la comunicación humana son: fuente, emisor o
codificador, código (reglas del signo, símbolo), mensaje primario (bajo un código),
receptor o decodificador, canal, ruido (barreras o interferencias) y la
retroalimentación o realimentación (feed-back, mensaje de retorno o mensaje
secundario).
• Para entablar una comunicación se necesita que tanto el emisor como el receptor
conozcan el mismo lenguaje o en su defecto tengan un traductor.
• En este sentido, los humanos escribimos algoritmos en un lenguaje formal que
una computadora pueda transformar a un lenguaje entendible por ella.
1.4 Traductor y su estructura
• Un traductor es un mediador entre dos entidades: emisoras y receptoras
• Los mediadores enmascaran la complejidad y heterogeneidad de los lenguajes
• Un traductor convierte un lenguaje de entrada (código fuente) a uno de salida
(código objeto)
Traductor
• La traducción puede ser sencilla (literal) o compleja (revisar el contexto)
dependiendo del tipo de lenguaje de entrada y salida.
Página 9
• Traducción español a inglés si se hace de manera literal es una mala traducción,
se necesita de al menos otra revisión (pasada) para hacer una buena traducción.
1.4.1 Ensambladores
Un lenguaje ensamblador se refiere a un tipo de programa, informático que se
encarga de traducir un fichero fuente o instrucciones mnemónicas escrito en un
lenguaje ensamblador, a un fichero objeto que contiene código máquina u
operativos, ejecutable directamente por la máquina para la que se ha generado.
El uso de referencias simbólicas es una característica básica de los ensambladores,
evitando tediosos cálculos y direccionamiento manual después de cada
modificación del programa.
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.
• Ensamblador es el traductor que se encarga de convertir instrucciones de bajo
nivel a instrucciones de una máquina en general
• //Encabezados
00 MOV AX, 58d 4F0188
03 CMP 0 3A00
05 JMP etiqueta 9918
Página 10
…
Etiqueta:
18 MUL AX, FF 4401FF
1.4.2 Compiladores
Un compilador es querer traducir un programa de un lenguaje de alto nivel, a otro
lenguaje de nivel inferior (típicamente lenguaje máquina). De esta manera un
programador puede diseñar un programa en un lenguaje mucho más cercano a
como piensa un ser humano, para luego compilarlo a un programa más manejable
por una computadora.
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).
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 traducción se conoce
como compilación.
• Es el traductor que se encarga de convertir un lenguaje de alto nivel a código
máquina.
• La característica de este traductor radica en el hecho de que necesita revisar todo
el código fuente para poder realizar la traducción.
• Ejemplo: la traducción de un libro, discurso, o artículo técnico o de investigación
Compiladores
• Ejemplos de compiladores: C, C++, Pascal, etc.
• Entre más pasadas se dé a un código fuente mayor es la optimización que se
puede hacer. El problema radica en el tiempo y en los recursos para hacerlo
• Antes de compilar un programa fuente se sigue una etapa de preprocesamiento.
Preprocesadores:
• Macros (expansión de funciones)
• Inclusión de archivos (bibliotecas)
• Procesadores racionales
Página 11
• Extensiones al leguaje (inclusión de ensamblador en C)
1.4.3 Intérpretes
Un intérprete es un programa capaz de analizar y ejecutar otros programas, escritos
en un lenguaje de alto nivel. Los intérpretes suelen contraponerse a los
compiladores, ya que mientras que los segundos se encargan de traducir un
programa desde su descripción en un lenguaje de programación al código máquina
del sistema destino, los primeros sólo realizan la traducción a medida que sea
necesario y normalmente, no guardan el resultado de dicha traducción.
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
virtual).
• Se ejecutan línea por línea, instrucción por instrucción.
• Lenguajes interpretados: PHP, PERL, BASIC
• En algunas ocasiones se necesita de una traducción rápida de algunas
instrucciones, como en el Shell, instrucciones SQL, etc.
Página 12
¿Java es compilado o interpretado?
• Java al igual que otros lenguajes como C# son lenguajes híbridos. Por una parte
se compila un programa fuente para generar código objeto para una máquina virtual
(bytecode o MSIL) para posteriormente ejecutarse de manera interpretada en las
diferentes máquinas virtuales de cada plataforma. A este compilador se les llama
jitter de JIT (Just in Time)
1.5 Generadores de código para compiladores (compilador de compilador)
• Los dos primeros lenguajes de alto nivel desarrollado fueron FORTRAN y COBOL.
• Desarrollar FORTRAN tardó alrededor de 14 años. Desarrollar nuestro compilador
tardará menos de 6 meses
• Son herramientas que auxilian algún aspecto del proceso de traducción
Herramientas auxiliares para programación de sistemas
• Cargadores y editores de enlace
• Generadores de analizadores léxico
• Generadores de Analizadores sintácticos
• Traductores dirigidos por sintaxis
• Generadores automáticos de código
• Dispositivos para el análisis de flujo de datos
Página 13
CONCLUCION
Abordando lo que es la unidad 1 de programación de sistemas vimos que es
programación de sistemas para que no servirá también que es un lenguaje y nos
dice que es conjunto de palabras y letras que nos permiten comunicar información
entre dos entidades y que está dividido en dos el lenguaje natural y el lenguaje
artificial y uno nos sirve para comunicarnos entre humanos y otro para establecer
una comunicación de humano a máquina también vimos que es un traductor,
compilador etc. Y sus ventajas y desventadas de cada uno y su uso de cada uno
como lo ocupamos en programación de sistemas para poder realizar el objetivo
principal que es el de elaborar un sistema.
Bibliografía
M.C. Juan Carlos Olivares Rojas
http://antares.itmorelia.edu.mx/~jcolivar/courses/ps207a/ps2_u1.pdf
http://usuarios.multimania.es/psistemas/
http://usuarios.multimania.es/psistemas/index.php?tema=32
http://www.wolnm.org/apa/articulos/Lenguaje_Natural.pdf?target=
http://usuarios.multimania.es/psistemas/index.php?tema=33
Página 14