LOS PROGRAMAS DEL SISTEMA INDICE: 1.LOS LENGUAJES BINARIO Y ENSAMBLADOR 2.LOS LENGUAJES DE ALTO NIVEL 3.EL SISTEMA OPERATIVO 4.LOS PROGRAMAS DE APLICACIONES 5.EJEMPLOS DE SISTEMAS OPERATIVOS 6.BIBLIOGRAFIA TEMA 3: LOS PROGRAMAS DEL SISTEMA 1.LOS LENGUAJES BINARIO Y ENSAMBLADOR. Concepto de sistema informático. Sistema:conjunto de cosas que ordenadamente relacionadas entre sí contribuyen a determinado objeto. Un sistema se compone a su vez de otros sistemas. Componentes de un sistema informático: Hardware y software:El hardware o soporte físico es todo aquello que podemos tocar: CPU, disco duro, placa, disquetes, monitor, etc. El software o soporte lógico es todo aquello que no es hardware: los programas, ficheros, bases de datos, el sistema operativo, etc. El contenido de un disquete es software mientras que el disquete por sí mismo es hardware. El software se estructura en capas, donde cada capa trata de crear una abstracción para la capa siguiente que así puede tratar con un dispositivo virtual más sencillo de utilizar. Lenguajes de programación.:Los ordenadores son máquinas que sólo entienden un lenguaje binario, es decir, sólo entienden dos estados (encendido y apagado). Conceptualmente podemos considerar que el ordenador está compuesto por millones de interruptores donde cada interruptor puede tomar los valores 1ó 0, donde 1 significa que pasa corriente por ese interruptor y 0 significa que no pasa. Sin embargo, los seres humanos usamos el lenguaje natural que cuenta con muchos más símbolos y reglas, que sin embargo no es entendido por el computador. 1 Existen varios tipos de lenguajes de programación: Lenguajes de bajo nivel lenguaje máquina lenguaje ensamblador Los lenguajes de bajo nivel son aquellos que están más próximos al lenguaje que entiende el computador. El lenguaje máquina:es un lenguaje de 1s y 0s que es directamente entendible por el ordenador, es muy engorroso, es fácil cometer errores y difícil detectarlos, depende del hardware. PROBLEMA Estructuras de datos Algoritmo PROGRAMA Análisis Codificación Características de lenguaje maquina: La codificación en lenguaje máquina implica una laboriosidad y unas grandes posibilidades de error. Otra de sus características es la portabilidad: un programa de estas características es absolutamente máquina−dependiente. Debido a esta dependencia, es necesario tener un conocimiento profundo de la arquitectura para poder programar. Por último tiene una nula capacidad de abstracción, el salto que hay que dar entre la concepción abstracta del programa a resolver, y la expresión de su solución, utilizando esta nomenclatura, es inmenso. El lenguaje ensamblador: es un lenguaje de etiquetas, donde se sustituye cada instrucción máquina por una etiqueta más fácil de recordar que un conjunto de 1s y 0s precisa que otro programa traduzca las etiquetas a lenguaje máquina menos engorroso que el lenguaje máquina depende del hardware. El lenguaje aporta una minima capacidad de abstracción: Los códigos de operación tienen nombres nemotécnicos. Las direcciones de memoria donde se encuentran los operandos se pueden representar mediante nombres simbólicos (identificador). El ensamblador es un programa que tiene como entrada el programa escrito en lenguaje Ensamblador (programa fuente) y como salida el mismo programa traducido a código máquina. Las tareas fundamentales del programa Ensamblador son dos: 2 Traducir a código binario los códigos simbólicos de operación: existe una equivalencia uno a uno entre Ensamblador y código maquina. Traducir a direcciones de memoria reales las direcciones simbólicas del programa fuente: El programa fuente debe suministrar al Ensamblador la lista de nombres simbólicos que el programa manipula y algunas características de las necesidades de almacenamiento de la información a almacenar. Las direcciones reales asignadas por el programa ensamblador, no suelen ser absolutas sino relativas. Será un segundo programa: el cargador, quien se encargue de transformar dichas direcciones en absolutas. 2.LOS LENGUAJES DE ALTO NIVEL. Los llamados Lenguajes de Alto Nivel son los más utilizados hoy en día como lenguajes de programación y fueron desarrollados entre los años 50 y 60. Pertenecen a esta categoría la tercera y la cuarta generación. Una de las características de estos lenguajes es que permiten que los algoritmos se expresen en un nivel y estilo de escritura fácilmente legible y comprensible por otros programadores (capacidad de abstracción), otra de sus características es la Transportabilidad, es decir, están implementadas sobre varias máquinas de forma que un programa puede ser fácilmente Transportado (Transferido) de una máquina a otra sin una revisión sustancial. En este sentido son Independientes de la máquina. Algunos ejemplos de estos lenguajes de alto nivel son: PASCAL, APL y FORTRAN = FORmula TRANslation (para aplicaciones científicas), COBOL = Common Business Oriented Languaje (para aplicaciones de procesamiento de datos), SNOBOL (para aplicaciones de procesamiento de textos), LISP = LISt Procesing y PROLOG (para aplicaciones de inteligencia artificial), C y ADA (para aplicaciones de programación de sistemas) y PL/I (para aplicaciones de propósitos generales). COMPARACIÓN Un ejemplo para comprender la diferencia entre los lenguajes de alto nivel y los lenguajes de más bajo nivel es: un lenguaje de bajo nivel está más cerca de las características de un lenguaje tipo máquina en particular, y más alejado de poder ser comprendido por un humano. Cuanto más alto es el nivel del lenguaje, más sencillo es comprenderlo y utilizarlo. Existe también una estrecha relación entre las sentencias en lenguaje de alto nivel y sus formas en lenguaje máquina codificada (lenguaje de bajo nivel). La principal diferencia aquí es que en los lenguajes de alto nivel se utilizan símbolos como: `X', `Y', `Z', `A', etc para sumar, `M' para multiplicar, etc; mientras que en un lenguaje ensamblador o máquina se requieren códigos numéricos del estilo: OC1A4, AV7J9, etc, para que sea comprensible por la máquina. La programación en un lenguaje de alto nivel requiere, por tanto, algún tipo de interfaz con el lenguaje máquina para que el programa pueda ejecutarse. Las interfaces más comunes son: un compilador, y un intérprete. El compilador traduce el programa a otro equivalente en el lenguaje `X' de la máquina residente como un paso separado antes de la ejecución del programa, en cambio, el intérprete ejecuta directamente las instrucciones en un lenguaje `Y' de alto nivel, sin un paso de procesamiento previo. La compilación es, en general, un proceso más eficiente que la interpretación en la mayoría de los tipos de máquina, esto se debe principalmente a que las sentencias dentro de un bucle deben ser reinterpretadas cada vez que se ejecutan por un intérprete, con un compilador, cada sentencia es interpretada y luego traducida a lenguaje máquina solo una vez. Algunos lenguajes interpretados son: APL, PROLOG y LISP. El resto de los lenguajes: Pascal, FORTRAN, COBOL, PL/1, SNOBOL, C, Ada y Modula−2 son normalmente lenguajes compilados. 3 En algunos casos, un compilador será utilizable alternativamente para un lenguaje interpretado (como LISP) y un intérprete podrá funcionar con un lenguaje compilado (como el interprete SNOBOL4 de los laboratorios Bell). Normalmente la interpretación es preferible a la compilación en un entorno de programación experimental o de educación, donde cada nueva ejecución del programa implica un cambio en el propio texto del programa. La calidad de diagnóstico y depuración que soportan los lenguajes interpretados es generalmente mejor que la de los lenguajes compilados, puesto que los mensajes de error se refieren directamente a sentencias del texto del programa original. Además, la ventaja de la eficiencia que se adjudica tradicionalmente a los lenguajes compilados frente a los interpretados puede ser pronto eliminado, debido a la evolución de las máquinas cuyos lenguajes son ellos mismos lenguajes de alto nivel, como por ejemplo: las nuevas maquinas LISP, las cuales han sido diseñadas recientemente por Symbolics y Xerox Corporations. HISTORIA El programador, diseñador e implementador de un lenguaje de programación debe comprender la evolución histórica de los lenguajes para poder apreciar por qué presentan características diferentes. Por ejemplo, los lenguajes más jóvenes desaconsejan (o prohíben) el uso de las sentencias GOTO, y esto es correcto en el contexto de las filosofías actuales de ingeniería del software y programación estructurada. Pero hubo un tiempo en que la sentencia GOTO, combinada con la IF, era la única estructura de control disponible, ya que el programador no disponía de la construcción WHILE o de un IF−THEN−ELSE . Por tanto, cuando se ve un lenguaje como FORTRAN, el cual tiene sus raíces en los comienzos de la historia de los lenguajes de programación, uno no debe sorprenderse de ver la antigua sentencia GOTO dentro de su repertorio. Lo más importante es que la historia nos permite ver la evolución de familias de lenguajes de programación, ver la influencia que ejercen las arquitecturas y aplicaciones de las computadoras sobre el diseño de los lenguajes y evitar futuros defectos de diseño. Los que son estudiados hoy en día se han elegido debido a su mayor influencia y amplio uso entre los programadores, así como por sus distintas características de diseño e implementación. Colectivamente cubren los aspectos más importantes con los que ha de enfrentarse el diseñador de lenguajes y la mayoría de las aplicaciones con las que se enfrenta el programador. Vemos que FORTRAN I es un ascendente directo de FORTRAN II, mientras que FORTRAN, COBOL, ALGOL 60, LISP, SNOBOL y los lenguajes ensambladores, influyeron en el diseño de PL/1. También hay varios lenguajes que están prefijados por las letras ANSI. Esto significa que el American National Standards Institute ha adoptado esa versión del lenguaje como el estándar nacional, reforzando así la transportabilidad de los programas de una máquina a otra. Finalmente, la notación algebraica ordinaria, por ejemplo, influyó fuertemente en el diseño de FORTRAN y ALGOL. Por otra parte, el inglés influyó en el desarrollo de COBOL. El lambda cálculo de Church dio los fundamentos de la notación funcional de LISP, mientras que el algoritmo de Markov motivó el estilo de reconocimiento de formas de SNOBOL. La arquitectura de computadoras de Von Neumann, la cual fue una evolución de la máquina de Turing, es el modelo básico de la mayoría de los diseños de computadoras de las ultimas tres décadas. Esta maquina no solo influyó en los primeros lenguajes de programación sino que también suministraron el esqueleto operacional sobre el que evolucionó la mayoría de la programación de sistemas. COMPILADORES E INTERPRETES Compilador: Programa que lee las líneas escritas en un lenguaje de alto nivel, también llamado código fuente, y las traduce a otro que pueda ejecutar la computadora, también llamado código objeto. 4 Intérprete: Es un traductor que realiza la operación de compilación paso a paso. Para cada sentencia que compone el texto de entrada, se realiza una traducción, ejecuta dicha sentencia y vuelve a iniciar el proceso con la sentencia siguiente. Diferencias: La principal ventaja del proceso de compilación frente al de interpretación es que los programas se ejecutan mucho más rápidamente una vez compilados, debido a que han sido completamente traducidos a lenguaje máquina; por el contrario, es más cómodo desarrollar un programa mediante un intérprete que mediante un compilador puesto que en el intérprete las fases de edición y ejecución están más integradas. La depuración de los programas suele ser más fácil en los intérpretes que en los compiladores puesto que el código fuente está presente durante la ejecución. Estas ventajas pueden incorporarse al compilador mediante la utilización de entornos de desarrollo y depuradores simbólicos en tiempo de ejecución. PARTES DE UN COMPILADOR Pueden distinguirse dos fases principales: una fase de análisis, en la cuál se lee el programa fuente y se estudia la estructura y el significado del mismo; y otra fase de síntesis, en la que se genera el programa objeto. Además, en un compilador pueden distinguirse algunas estructuras de datos comunes: la más importante de ellas es el gestor de tabla, junto con el manipulador de errores. El esquema general de un compilador podría ser el siguiente: Analizador Léxico: Módulo que transforma el programa fuente en Tokens (unidades de información que es capaz de manejar el analizador sintáctico). Identifica los símbolos y avisa de posibles errores sobre la forma en la que está escrita el programa. Analizador Sintáctico: Módulo que analiza los Tokens. Comprueba que las sentencias que componen el programa fuente son correctas en el lenguaje que está escrito. Analizador Semántico: Módulo que se ocupa de analizar si la sentencia tiene algún significado, ya que se pueden encontrar sentencias que son sintácticamente correctas pero que no se pueden ejecutar porque carecen de sentido. Generador de Código Intermedio: Superada la fase de análisis, se genera un Código Intermedio (generalmente lenguaje ensamblador) para luego crear el código máquina. Optimizador de Código: A partir del Código Intermedio se crea un nuevo código más compacto y eficiente, eliminando sentencias que no se ejecutan nunca, simplificando expresiones aritméticas, etc... Generador de Código: Es la fase final del compilador. Genera el código objeto, es decir, el ejecutable. 3.EL SISTEMA OPERATIVO. El Sistema Operativo es el soporte lógico que controla el funcionamiento del equipo físico. Es un conjunto de programas y funciones que ocultan los detalles del hardware, ofreciendo al usuario una via sencilla y flexible de acceso al mismo. Es un programa básico que corre en un sistema, maneja los componentes del sistema, posee una interfaz común a las otras aplicaciones, y es el encargado de ejecutar dichas aplicaciones, recibe los comandos de los usuarios. En resumen, Sistema Operativo es el conjunto de Programas que ordenadamente relacionados entre sí 5 permiten a los computadores realizar sus tareas, que son principalmente facilitar la tarea del usuario y gestionar de forma eficiente los recursos. La parte central del sistema operativo, está ejecutándose continuamente, por lo que existen dos tipos de núcleo o kernel: −Kernel monolítico: contiene gran parte de la funcionalidad del sistema operativo. −Microkernel: es un proceso pequeño y el resto de la funcionalidad la dan otros procesos. Existen diferentes tipos de sistemas operativos: −Sistemas multitarea: puede realizar varios procesos a la vez; los recursos del sistema de cada proceso están protegidos, por lo que existe un mecanismo de control de procesos. −Sistema multiusuario: permiten que varios usuarios usen el sistema de forma simultánea, es un sistema de pertenencias y permisos sobre archivos y procesos. La interfaz gráfica de usuario hace las capacidades gráficas del sistema, puede evitar aprender lenguajes de comandos y simplificar el uso de algunas aplicaciones; generalmente esta basada en un dispositivo puntero, como puede ser por ejemplo del ratón. La interfaz grafica fue inventada en los años 70 por Xerox, pero se hizo popular en los años 80 con Apple. Actualmente casi todos los sistemas modernos poseen interfaz grafica. 4.LOS PROGRAMAS DE APLICACIONES. Programas de Aplicaciones Son los que resuelven un problema concreto de los usuarios y que no son suministrados con el sistema operativo. Son programas diseñados y codificados por analistas y programadores de aplicaciones conjuntamente con los usuarios. Los programas de aplicación pueden ser por ejemplo: procesadores de texto, hojas de cálculo, bases de datos, aplicaciones gráficas, Internet, etc. Procesadores de Texto: Son utilizados para escribir cartas, memorándums y otros documentos, El usuario teclea una serie de letras o párrafos, y son mostradas en la pantalla. El usuario puede fácilmente adherir, borrar y cambiar el texto hasta que el documento quede exactamente como se desea. Algunas características avanzadas que encontramos en la actualidad en los procesadores de texto son: corrector de ortografía, diccionario de sinónimos, presentación preliminar del texto antes de imprimir. Ejemplos de procesadores de texto: Word, AmiPro, Wordperfect. Hojas de Cálculo Una Hoja de Cálculo es una herramienta para calcular y evaluar números. También ofrece capacidades para crear informes y presentaciones para comunicar lo que revelan los análisis; el usuario teclea los datos y las fórmulas que serán usadas para obtener los resultados; después el programa aplica las fórmulas a los datos y así obtiene los resultados; una de sus características mas importantes es la habilidad de preguntar (Condicionales)"what IF" "QUE PASARÍA SI?", cambiando los datos and rápidamente re− calculando los nuevos resultados. La mayoría de las Hojas de Cálculo cuentan también con la posibilidad de graficar estos resultados en 6 diferentes estilos de gráficas (Barras, Líneas, Pastel, etc). Ejemplos de Hojas de Cálculo: Excel, Lotus 123, Quatro. Bases de Datos: La DBMS (Data Base Management System) es la herramienta que las computadoras utilizan para realizar el procesamiento y almacenamiento ordenado de los datos. Una base de datos es un recipiente para colecciones relacionadas de datos. Por ejemplo, un a agenda puede ser una base de datos donde se almacenan los nombres, direcciones y números telefónicos de amigos y contactos de negocios. La Base de Datos de una Compañía puede contener información acerca de los consumidores, vendedores, empleados, venta s en inventario. Ejemplos de Bases de Datos: Access, FoxPro, Approach. Paquetes de Presentación. Software que permite al usuario diseñar presentaciones para desplegarlas a través de la misma computadora o imprimir diapositivas y acetatos. Contienen opciones avanzadas para integrar efectos en cada cambio de diapositiva. Ejemplos: Presentation, Power Point. 5.EJEMPLOS DE SISTEMAS OPERATIVOS. Los ejemplos más famosos de sistemas operativos, don Windows, MS−DOS y Unix. −Windows: interfaz gráfica de fácil manejo por lo cual, es el mas utilizado actualmente. −MS−DOS: sistema operativo no gráfico que esta en desuso. −Unix: Aparece a finales de los 70, Unix ofreció capacidades desconocidas hasta el momento, como puede ser la multitare, multiusuario y portable. Por lo que establece las características básicas de los sistemas operativos actuales. La filosofia de Unix es tener aplicaciones sencillas que se combinana entre si, Unix fue el sistema operativo en el que se baso el desarrollo de Internet. Los sistemas operativos actuales: −Linux: Linux es un clon de UNIX basado en el modelo de software libre, este solo provee el kernel del sistema. Existen varios grupos y empresas que hacen distribuciones de GNU/Linux, la que contiene un sistema de instalacion y de paquetes de software. Entre estas destacan, Debian, Redhat, Mandrake, Suse etc. −Microsoft windows: Sistema operativo multitarea basado en un ambiente gráfico, ampliamente usado en sistemas de escritorio Intel, inicialmente basado en DOS, las últimas versiones están basadas en un microkernel (NT). Ej. XP, 2000 6.BIBLIOGRAFIA: 7 Algunas de las paginas que hemos utilizado para obtener la información necesaria para la realización del trabajo. http://www.monografias.com/trabajos/tendprog/tendprog.shtml http://www.geocities.com/Athens/Temple/2269/001.htm http://www.dlsi.ua.es/~marco/tema3/sld086.htm http://www.deguate.com/infocentros/tecnologia/softwareII/info2.htm http://www.tectimes.com/cda/glosario.asp?texto=C&codpalabra=64 http://www.tectimes.com/cda/glosario.asp?texto=I&codpalabra=152 http://www.lcc.uma.es/docencia/ETSIInf/pl/apuntes/pl1/lecc11.html http://www.iespana.es/canalhanoi/informatica/software.htm http://www.lafacu.com/apuntes/informatica/Sistemas_Operativos_en_Red_y_Distribuidos/ default.htm Programa Fuente F A S E D E A N Á L I S I S Analizador Léxico 8 Analizador Sintáctico Analizador Semántico MANIPULADOR DE ERRORES GESTOR DE TABLA F A S E D E S Í N T E S I S Generador de Código Intermedio Optimizador de Código Generador de Código Programa Objeto 9