Download Tema 1: Fundamentos de la programación
Document related concepts
Transcript
Tema 1: Introducción a los sistemas informáticos SOLP 1 1. Organización de un ordenador 2. Hardware de un ordenador 3. Software (programas) 4. Lenguajes de programación 5. Fases en la resolución de problemas con un programa 6. Breve historia de los lenguajes de programación de alto nivel 2 1. Organización de un ordenador Los primeros son de la década de los 40. 3 Los primeros PC aparecen en los 80. Los ordenadores transforman datos para obtener a la salida una información. Los datos de entrada y de salida pueden estar en formatos muy diversos. Es necesario hardware y software. 4 2. Hardware de un ordenador Los componentes más importantes son: Procesador (CPU) ALU Entrada Unidad de Control (UC) Memoria Interna Salida Memoria Externa 5 2.1 El procesador (CPU) Ejecuta las instrucciones del programa. Se encuentra integrado en un chip microprocesador Instrucciones sencillas a muy alta velocidad (~µs) Consta de dos partes : Unidad Aritmético Lógica (ALU) Unidad de Control (UC) Ejemplo de un programa que suma dos números: leer (a) leer (b) r=a+b Imprimir (r) 6 2.2 Memoria Se clasifica en: Memoria principal, interna, central o memoria RAM Memoria de almacenamiento secundario, externa o auxiliar datos Entrada Memoria de datos Instrucciones Memoria de Instrucciones CPU órdenes Salida órdenes Disco duro 7 Memoria pincipal Se conoce como memoria RAM, aunque está formada por dos tipos de memorias: Memoria RAM (Random Access Memory o Memoria de Acceso Aleatorio). Memoria ROM (Read Only Memory o Memoria de sólo lectura). 8 Memoria RAM de la memoria principal Es una memoria volátil. Se puede leer y escribir en cualquier dirección. La memoria RAM tiene dos partes: Memoria de programa Memoria de datos Tipos: SDR SDRAM, DDR SDRAM, DDR 2 SDRAM, DDR 3 SDRAM Y RDRAM. Valores típicos son 1 GB, 2GB o 4GB. Tiempo de acceso: del orden de ns. 9 Memoria ROM de la memoria principal No es volátil. Es sólo de lectura; ya viene de fábrica grabada. Se encuentra en un chip llamado BIOS. Es una pequeña parte de la memoria principal. Almacena las instrucciones necesarias para arrancar el ordenador. 10 La memoria caché es una memoria que sirve de almacenamiento intermedio entre el procesador y la memoria principal. La memoria caché es memoria SRAM; más rápida pero también mucho más cara que la memoria principal. Se utiliza para almacenar temporalmente la información que se utiliza con más frecuencia. 11 Memorias de almacenamiento secundario Almacenan datos o programas de forma permanente. Para su uso deben pasar a la memoria principal. Esta operación se realiza mediante órdenes al sistema operativo. Es más lenta que la memoria principal ya que está formada por componentes electrónicos y mecánicos. Por ejemplo: discos duros, DVD, disquetes 12 … 2.3 Dispositivos de E/S Permiten la comunicación entre el usuario y el ordenador Dispositivos de entrada: teclado, ratón, lápiz óptico, joystick, lector de códigos de barras, escáner, micrófono… Dispositivos de salida: Pantalla, impresora, trazador gráfico o plotter, reconocedores de voz, altavoces… Dispositivos de entrada/salida: monitor táctil, tarjeta de red, impresora multifunción… Los dispositivos de E/S y los dispositivos de almacenamiento secundario se llaman dispositivos periféricos o simplemente periféricos. 13 /* MEMORIAS*/ Bit: 0 o 1, es la unidad elemental de memoria (b). Byte: son 8 bits (B). Una dirección es un número que nos indica una &. Una palabra es el contenido de una dirección de memoria. Valores típicos son 8, 16, 32 o 64 bits. Cuando escribimos en una dirección de memoria se borra lo que había antes. En la ejecución de un programa, en una misma dirección de memoria, se pueden almacenar distintos valores: 14 /* Programa que calcula an*/ leer(a) leer(n) r=1 mientras(n>0) {r=r*a n=n-1} imprimir(r) 15 El tamaño de una memoria se calcula multiplicando el nº de palabras por el tamaño de las palabras. En las memorias siguientes unidades: 1 K (Ka)= 210 1M (Mega)= 220 1G (Giga)=230 1T (Tera) =240 se utilizan las 16 2.4 Memorias de almacenamiento secundario La memoria RAM es volátil y limitada. E tiempo de acceso a la información es mayor que en la memoria principal. Tiene mayor capacidad de almacenamiento que la memoria principal. También se conocen como memorias auxiliares o externas. Las más conocidas son: Cintas magnéticas Discos magnéticos: discos duros y disquetes Discos ópticos: CD y DVD Discos duros virtuales Discos flash 17 Cintas magnéticas Son los primeros dispositivos de almacenamiento secundario que se usaron. Se siguen utilizando para hacer copias de seguridad o para bases de datos en grandes ordenadores. Ventaja: gran capacidad de almacenamiento a bajo coste. Desventaja: acceso secuencial Cuanto mayor es la capacidad, mayor es la longitud y mayor el tiempo de acceso. 18 Discos magnéticos Tipos: Discos duros Discos flexibles o disquetes Ventaja: acceso aleatorio 19 Disquetes Material flexible Ventajas: transportabilidad, precio y compatibilidad con otros ordenadores Desventajas: baja capacidad (1.44MB) y baja fiabilidad Los primeros disquetes eran de 8’’ (pulgadas) Luego aparecieron los de 5 1/4 (5.25’’) de 360KB a 1,2 MB Hoy en día son de 3,5’’ y 1.44MB Cada vez su uso es menor 20 Discos duros Aparecen en la década de los 80 con una capacidad de 10MB. Están constituidos por material rígido sobre el que se deposita una capa de material magnetizable. Ventajas frente a los disquetes: capacidad de almacenamiento y tiempos de acceso a los datos. Cada vez son más pequeños y de mayor capacidad. Valores típicos son 120GB, 500 GB, 1 TB… Tipos: Fijos: dentro de una carcasa sellada y no se pueden extraer del ordenador. Extraíbles: internos y externos. 21 Las partes de un disco duro son: La unidad es un conjunto de componentes electrónicos y mecánicos que hacen posible el almacenamiento y recuperación de los datos en el disco. El disco es, en realidad, una pila de discos, llamados platos, que almacenan información magnéticamente. Cada uno de los platos tiene dos superficies magnéticas, caras: la superior y la inferior. Estas superficies magnéticas están formadas por millones de pequeños elementos capaces de ser magnetizados positiva o negativamente. De esta manera, se representan los dos posibles valores que forman un bit de información (un cero o un uno). 22 23 Cada cara tiene asignado uno de los cabezales de lectura/escritura de la unidad. Los cabezales no pueden tocar la superficie del discos; se sitúan a μm. El conjunto de cabezales se puede desplazar linealmente desde el exterior hasta el interior de la pila de platos mediante un brazo mecánico que los transporta. Para que los cabezales tengan acceso a la totalidad de los datos, es necesario que la pila de discos gire. Este giro se realiza a velocidad constante y no cesa mientras esté encendido el ordenador. En cambio, en los discos flexibles sólo se produce el giro mientras se está efectuando alguna operación de lectura o escritura. El resto del tiempo, la disquetera permanece en reposo. Con las unidades de CDROM ocurre algo similar, sin embargo en este caso la velocidad de giro no es constante y depende de la distancia al centro del dato que se esté leyendo. 24 Operación de lectura en el disco duro: Desplazar los cabezales de lectura/escritura hasta el lugar donde empiezan los datos. Esperar a que el primer dato, que gira con los platos, llegue al lugar donde están los cabezales. Leer el dato con el cabezal correspondiente. La operación de escritura es similar. En lugar de leer la información los cabezales de lectura/escritura magnetizan positiva o negativamente. 25 Cada una de las caras se divide en anillos concéntricos llamados pista. Un cilindro es la misma pista de todos los discos. Además, cada pista se divide en sectores. Los sectores son las unidades mínimas de información que puede leer o escribir un disco duro. Generalmente, cada sector almacena 512 bytes de información. 26 El número total de sectores de un disco duro se puede calcular: nº sectores = nº caras * nº pistas/cara * nº sectores/pista. Por tanto, cada sector queda unívocamente determinado si conocemos los siguientes valores: cabezas, cilindros y sectores. Por ejemplo, el disco duro ST33221A de Seagate tiene las siguientes especificaciones: cilindros = 6.253, cabezas = 16 y sectores = 63. El número total de sectores direccionables es, por tanto, 6.253*16*63 = 6.303.024 sectores. Si cada sector almacena 512 bytes de información, la capacidad máxima de este disco duro será de 6.303.024 sectores * 512 bytes/sector = 3.227.148.228 bytes ~ 3 GB. Las cabezas y cilindros comienzan a numerarse desde el cero y los sectores desde el uno. En consecuencia, el primer sector de un disco duro será el correspondiente a la cabeza 0, cilindro 0 y sector 1. 27 La estructura lógica de un disco duro está formada por: El sector de arranque (Master Boot Record) Espacio particionado Espacio sin particionar 28 El sector de arranque es el primer sector de todo disco duro (cabeza 0, cilindro 0, sector 1). En él se almacena la tabla de particiones y un pequeño programa master de inicialización, llamado también Master Boot. Este programa es el encargado de leer la tabla de particiones y ceder el control al sector de arranque de la partición activa. Si no existiese partición activa, mostraría un mensaje de error. El espacio particionado es el espacio del disco que ha sido asignado a alguna partición. El espacio no particionado, es espacio no accesible del disco ya que todavía no ha sido asignado a ninguna partición. 29 Ejemplo: un disco duro con espacio particionado (2 particiones primarias y 2 lógicas) y espacio todavía sin particionar. 30 El caso más sencillo consiste en un sector de arranque que contenga una tabla de particiones con una sola partición, y que esta partición ocupe la totalidad del espacio restante del disco. En este caso, no existiría espacio sin particionar. Como mínimo, es necesario crear una partición para cada disco duro. Esta partición puede contener la totalidad del espacio del disco duro o sólo una parte. 31 Particiones y directorios permiten organizar datos en un mismo disco duro. Diferencias entre particiones y directorios: 1ª) Las particiones son divisiones de tamaño fijo del disco duro; los directorios son divisiones de tamaño variable de la partición. 2ª) Las particiones ocupan un grupo de cilindros contiguos del disco duro (mayor seguridad); los directorios suelen tener su información desperdigada por toda la partición. 3ª) Cada partición del disco duro puede tener un sistema de archivos (sistema operativo) distinto; todos los directorios de la partición tienen el sistema de archivos de la partición. 32 Las razones que nos pueden llevar a crear más de una partición por disco se suelen reducir a tres: Razones organizativas: Un ordenador que es compartido por más de un usuario y, con objeto de lograr una mejor organización y seguridad de sus datos deciden utilizar particiones separadas. Instalación de más de un sistema operativo. Debido a que cada sistema operativo requiere (como norma general) una partición propia para trabajar, si queremos instalar dos sistemas operativos a la vez en el mismo disco duro (por ejemplo, Windows 98 y Linux), será necesario particionar el disco. Razones de eficiencia. Por ejemplo, suele ser preferible tener varias particiones FAT pequeñas antes que una gran partición FAT. Esto es debido a que cuanto mayor es el tamaño de una partición, mayor es el tamaño del grupo (cluster) y, por consiguiente, se desaprovecha más espacio de la partición. 33 Las particiones pueden ser de dos tipos: primarias o lógicas. Las particiones lógicas se definen dentro de una partición primaria especial denominada partición extendida. En un disco duro sólo pueden existir 4 particiones primarias (incluida la partición extendida, si existe). Las particiones existentes deben inscribirse en una tabla de particiones de 4 entradas situada en el primer sector de todo disco duro. De estas 4 entradas de la tabla puede que no esté utilizada ninguna (disco duro sin particionar, tal y como viene de fábrica) o que estén utilizadas una, dos, tres o las cuatro entradas. En cualquiera de estos últimos casos (incluso cuando sólo hay una partición), es necesario que en la tabla de particiones figure una de ellas como partición activa. La partición activa es aquella a la que el programa de inicialización (Master Boot) cede el control al arrancar. El sistema operativo de la partición activa será el que se cargue al arrancar desde el disco duro. 34 Conclusiones: Para que un disco duro sea utilizable debe tener al menos una partición primaria. Además para que un disco duro sea arrancable debe tener activada una de las particiones y un sistema operativo instalado en ella. Esto quiere decir que el proceso de instalación de un sistema operativo en un ordenador consta de la creación de su partición correspondiente, instalación del sistema operativo (formateo de la partición y copia de archivos) y activación de la misma. 35 No es posible crear más de cuatro particiones primarias. Este límite se logra subsanar mediante la creación de una partición extendida (como máximo una). Esta partición ocupa, una de las cuatro entradas posibles de la tabla de particiones. Dentro de una partición extendida se pueden definir particiones lógicas sin límite. El espacio de la partición extendida puede estar ocupado en su totalidad por particiones lógicas o bien, tener espacio libre sin particionar. Si hay una partición extendida, en la tabla de particiones del Master Boot Record debe existir una entrada con una partición extendida (la cual no tiene sentido activar). Esta entrada apunta a una nueva tabla de particiones similar a la ya estudiada, de la que sólo se utilizan sus dos primeras entradas. La primera entrada corresponde a la primera partición lógica; la segunda, apuntará a una nueva tabla de particiones. Esta nueva tabla contendrá en su primera entrada la segunda partición lógica y en su segunda, una nueva referencia a otra tabla. De esta manera, se va creando una cadena de tablas de particiones hasta llegar a la última, identificada por tener su segunda entrada en 36 blanco. Particiones primarias y particiones lógicas: Hay una diferencia importante: sólo las particiones primarias se pueden activar. Además, algunos sistemas operativos no pueden acceder a particiones primarias distintas a la suya. Conclusión: los sistemas operativos deben instalarse en particiones primarias, ya que de otra manera no podrían arrancar. El resto de particiones que no contengan un sistema operativo, es más conveniente crearlas como particiones lógicas. Por dos razones: primera, no se malgastan entradas de la tabla de particiones del disco duro y, segunda, se evitan problemas para acceder a estos datos desde los sistemas operativos instalados. Las particiones lógicas son los lugares ideales para contener las unidades que deben ser visibles desde todos los sistemas operativos. Algunos sistemas operativos presumen de poder ser instalados en particiones lógicas (Windows NT), sin embargo, esto no es del todo cierto: necesitan instalar un pequeño programa en una partición primaria que sea capaz de cederles el control. 37 Estructura lógica de las particiones: Dependiendo del sistema de archivos utilizado en cada partición, su estructura lógica será distinta. En los casos de MS-DOS y Windows 95, está formada por sector de arranque, FAT, copia de la FAT, directorio raíz y área de datos. De todas formas, el sector de arranque es un elemento común a todos los tipos de particiones. Todas las particiones tienen un sector de arranque (el primero de la partición) con información relativa a la partición. Si la partición tiene instalado un sistema operativo, este sector se encargará de arrancarlo. Si no hubiese ningún sistema operativo (como es el caso de una partición para datos) y se intentara arrancar, mostraría un mensaje de error. 38 Secuencia de arranque de un ordenador: Todos los ordenadores disponen de un pequeño programa almacenado en memoria ROM (Read Only Memory, memoria de sólo lectura), encargado de tomar el control del ordenador en el momento de encenderlo. Lo primero que hace el programa de arranque es un breve chequeo de los componentes hardware. Si todo está en orden, intenta el arranque desde la primera unidad física indicada en la secuencia de arranque. Si el intento es fallido, repite la operación con la segunda unidad de la lista y así hasta que encuentre una unidad arrancable. Si no existiese ninguna, el programa de arranque mostraría una advertencia. Esta secuencia de arranque se define en el programa de configuración del ordenador (también llamado Setup, CMOS o BIOS). Suponiendo que arrancamos desde el disco duro, el programa de arranque de la ROM cederá el control a su programa de inicialización (Master Boot). Este programa buscará en la tabla de particiones la partición activa y le cederá el control a su sector de arranque. El programa contenido en el sector de arranque de la partición activa procederá al arranque del sistema operativo. 39 Sistemas de archivos: Un sistema de archivos es una estructura que permite tanto el almacenamiento de información en una partición como su modificación y recuperación. Para que sea posible trabajar en una partición es necesario asignarle previamente un sistema de archivos. Esta operación se denomina dar formato a una partición. Generalmente cada sistema de archivos ha sido diseñado para obtener el mejor rendimiento con un sistema operativo concreto (FAT para DOS, FAT32 para Windows 98, NTFS para Windows NT, HPFS para OS/2…). Sin embargo, es usual que el mismo sistema operativo sea capaz de reconocer múltiples sistemas de archivos. 40 FAT (File Allocate Table, tabla de asignación de archivos): Se basa, como su nombre indica, en una tabla de asignación de archivos o FAT. Esta tabla es el índice del disco. Almacena los grupos utilizados por cada archivo, los grupos libres y los defectuosos. Como consecuencia de la fragmentación de archivos, es corriente que los distintos grupos que contienen un archivo se hallen desperdigados por toda la partición. La FAT es la encargada de seguir el rastro de cada uno de los archivos por la partición. Grupo, cluster o unidad de asignación: es la unidad mínima de almacenamiento de un archivo en una partición y está formada por uno o varios sectores contiguos del disco. Esto quiere decir que el espacio real ocupado por un archivo en disco será siempre múltiplo del tamaño del grupo. Además, cada grupo puede almacenar información de un solo archivo. Si no cabe en un solo grupo, se utilizarán varios (no necesariamente contiguos). Para hacernos una idea del nefasto resultado de un tamaño de grupo incorrecto, consideremos dos archivos de 1 byte cada uno. Si el tamaño del grupo es de 32 KB, se utilizarán dos grupos y el espacio real ocupado en disco habrá sido de 64 KB = ¡65.536 bytes! en vez de 2 bytes, como sería de esperar. 41 Limitaciones: Nombres de archivos cortos: 8 caracteres de nombre y 3 de extensión Tamaño máximo de particiones de 2 GB Grupos (clusters) demasiados grades, con el consiguiente desaprovechamiento de espacio en disco. Elevada fragmentación, que ralentiza el acceso a los archivos. A su favor: Su sencillez Compatibilidad con la mayoría de sistemas operativos. Debido a que la FAT de este sistema de archivos tiene entradas de 16 bits (por eso, a veces se llama FAT16), sólo se pueden utilizar 216 = 65.536 grupos distintos. Esto implica que, con el fin de aprovechar la totalidad del espacio de una partición, los grupos tengan tamaños distintos en función del tamaño de la partición. Por ejemplo, con un grupo de 16 KB se puede almacenar hasta 216 grupos * 16 KB/grupo = 220 KB = 1 GB de información. El límite de la partición (2 GB) se obtiene al considerar un grupo máximo de 32 KB (formado por 64 sectores consecutivos de 512 bytes). 42 VFAT (Virtual FAT): Ventajas con FAT: Con VFAT los nombres de los archivos pueden tener 255 caracteres entre nombre y extensión. Plena compatibilidad con FAT. Por ejemplo, es factible utilizar la misma partición para dos sistemas operativos que utilicen uno FAT y otro VFAT (MS-DOS y Windows 95). Cuando entremos desde MS-DOS, los nombres largos de archivos se transforman en nombres cortos según unas reglas establecidas, y pueden ser utilizados de la manera habitual. Limitaciones: tanto las particiones FAT como las VFAT están limitadas a un tamaño máximo de 2 GB. Esta es la razón por la que los discos duros mayores de este tamaño que vayan a trabajar con alguno de los dos sistemas, necesiten ser particionados en varias particiones más pequeñas. El sistema de arhivos FAT32 ha sido diseñado para aumentar este límite a 2 TB (1 terabyte = 1024 GB). 43 FAT32 (FAT de 32 bits): Ventajas: El sistema FAT32 permite trabajar con particiones mayores de 2 GB. El tamaño del grupo (cluster) es mucho menor y no se desperdicia tanto espacio como ocurría en las particiones FAT. En la siguiente tabla, se comparan los tamaños de grupo utilizados según el tamaño de la partición y el sistema de archivos empleado: 44 Tamaño del cluster Tamaño de la partición FAT FAT32 <128 MB 2 KB 128 - 256 MB 4 KB 256 - 512 MB 8 KB 512 MB - 1GB 16 KB 1 - 2 GB 32 KB 4 KB No permitido 8 KB No permitido 2 - 8 GB 8 - 16 GB 16 - 32 GB 32 GB – 2 TB 16 KB 32 KB 45 NTFS (New Technology File System, sistema de archivos de nueva tecnología): NTFS sólo es recomendable para particiones superiores a 400 MB, ya que las estructuras del sistema consumen gran cantidad de espacio. NTFS permite definir el tamaño del grupo (cluster), a partir de 512 bytes (tamaño de un sector) de forma independiente al tamaño de la partición. Las técnicas utilizadas para evitar la fragmentación y el menor desaprovechamiento del disco, hacen de este sistema de archivos el sistema ideal para las particiones de gran tamaño. 46 HPFS (High Performance File System, sistema de archivos de alto rendimiento): HPFS es el sistema de archivos propio de OS/2. Utiliza una estructura muy eficiente para organizar los datos en las particiones. HPFS no utiliza grupos sino directamente sectores del disco (que equivalen a un grupo de 512 bytes). En vez de utilizar una tabla FAT al principio de la partición, emplea unas bandas distribuidas eficazmente por toda la partición. De esta forma se consigue, suprimir el elevado número de movimientos que los cabezales de lectura/escritura tienen que realizar a la tabla de asignación en una partición FAT. El resultado de este sistema es una mayor velocidad de acceso y un menor desaprovechamiento del espacio en disco. 47 MS-DOS (y Windows 3.1) reconoce únicamente particiones FAT Windows 95 admite tanto particiones FAT como VFAT; Windows 98 y Windows 95 OSR2 soportan FAT, VFAT y FAT32 Windows NT 4.0 admite particiones FAT, VFAT y NTFS Windows 2000 admite particiones FAT, VFAT, FAT32 y NTFS Linux admite su propio sistema de archivos y, dependiendo de las versiones, la mayoría de los anteriores. Windows XP, Vista y Windows 7 admiten particiones FAT, FAT32 y NTFS 48 Definiciones sobre discos duros: Densidad de grabación lineal: nº de bits grabados por unidad de longitud. Velocidad de transferencia: número de bits que pasan por debajo del cabezal por unidad de tiempo (= para todas las pistas). Tiempo medio de acceso a un dato= n T T T T pistas busqueda T accesoDato T búsqueda T latencia T estabilización T latencia p p 2 max min 2 1 2 T latencia 49 Discos ópticos Usan un haz de láser para grabar la información Más fiables que los disquetes, mayor capacidad de almacenamiento y mayor velocidad de acceso a los datos. Tipos CD-ROM (Cederrón) DVD 50 CD-ROM (Compact Disk- Read Only Memory; Disco Compacto-Memoria de sólo lectura): Tipos más importantes: CD-R y CD-RW DVD Nace en 1995 La capacidad de almacenamiento es grande (4,7 GB para los de 1 cara y 1 capa, y 17 GB para los de dos caras y dos capas) Tipos más importantes: DVD-R, DVD+R y DVD-RW 51 Discos duros virtuales: Dispositivo de almacenamiento que no reside en el ordenador Gratuito o de pago Ventaja: se puede acceder a esa información desde el ordenador que se desee Desventaja: se necesita conexión a Internet 52 Discos Flash: Pequeña memoria del tamaño de un mechero que se pueden conectar al ordenador a través del puerto USB Valores típicos son de 1 GB, 2 GB, 4GB… 53 3. El software Programas o software Sistema operativo: Monousuario Multiusuario Monotarea Multitarea Sistemas operativos: UNIX, LINUX, MS-DOS, Windows 95, 98, NT, 2000, XP, Vista … Los sistemas operativos constan de: Kernel Sistema de administración de memoria Administrador del sistema de archivos Controladores de dispositivos Bibliotecas del sistema 54 Definiciones: Programa: conjunto de instrucciones que al ser ejecutadas en un ordenador, se obtiene un resultado. Programación: es la escritura de un programa. Lenguajes de programación: son los lenguajes utilizados para escribir el programa. Programador: es la persona que escribe un programa. 55 4. Lenguajes de programación Los ordenadores son máquinas electrónicas, que trabajan con datos binarios El lenguaje máquina es muy diferente del lenguaje humano Los principales lenguajes que se pueden utilizar son: Lenguaje máquina Lenguaje ensamblador Lenguaje de alto nivel 56 4.1 Lenguaje máquina Sólo usan 0 y 1 Son directamente inteligibles por la máquina Ventaja: no necesita traducción Desventajas: Dificultad y lentitud en la programación Poca fiabilidad Dificultad grande de verificar y poner a punto los programas Los programas sólo son ejecutables en el mismo ordenador (mismo microprocesador) Las desventajas superan a las ventajas por lo que no se recomienda su uso 57 4.2 Lenguaje ensamblador Es más fácil de usar que el lenguaje máquina, debido al uso de nemotécnicos (add, sus, div…), pero también dependen del microprocesador. Ejemplo: Lenguaje ensamblador: add M, N, P Lenguaje máquina: 0110 1001 1010 1011 Un programa escrito en lenguaje ensamblador debe ser traducido al lenguaje máquina; para ello se utiliza un programa llamado ensamblador (assembler): Programa en lenguaje ensamblador (programa fuente) Programa ensamblador Programa en lenguaje máquina (programa objeto) 58 El lenguaje ensamblador ≠ programa ensamblador Ventajas del lenguaje ensamblador: Más fácil de codificar que en lenguaje máquina Más rápida su ejecución que en lenguaje de alto nivel Desventajas del lenguaje ensamblador: También depende de la máquina La programación es compleja ya que, además de conocer las instrucciones de programación, es necesario conocer el interior de la máquina. 59 4.3 Lenguajes de alto nivel Son los más utilizados por los programadores. Los programas en lenguaje de alto nivel son más fáciles de escribir y de interpretar que en lenguaje de bajo nivel o ensamblador. Además son portables o transportables. Ventajas: Tiempo de formación de los programadores relativamente corto si lo comparamos con otros lenguajes. Instrucciones que recuerdan al lenguaje humano: while, if, for, open … Las modificaciones y puesta a punto de un programa son más sencillas. Reducción del coste de los programas. Transportabilidad. 60 Inconvenientes: Para su puesta a punto necesitaremos realizar sucesivas traducciones hasta conseguir el programa objeto definitivo. No se aprovechan los recursos internos de la máquina tan bien como en el lenguaje máquina o en el lenguaje ensamblador. Aumento de la ocupación de memoria. El tiempo de ejecución de los programas es mucho mayor. Ejemplos: C, FORTRAN, Pascal, BASIC, C++, VisualBASIC, Java, html… Programas traductores: intérpretes y compiladores. 61 Intérprete: No genera un programa objeto; traduce y ejecuta instrucción a instrucción. Se utiliza para algunos lenguajes de programación como Java o BASIC. Ventaja: es más fácil la puesta a punto del programa. Desventaja: siempre que ejecutemos el programa hay que traducirlo antes. Programa fuente Intérprete Traducción y ejecución línea a línea 62 Compilador: Traduce el programa fuente obteniendo el programa objeto. Esta traducción se llama compilación. Además de realizar la traducción realiza alguna optimización del código. Tras la compilación se ejecuta automáticamente otro programa llamado enlazador que incorpora las funciones de la biblioteca que se utilicen en el programa. Los programas compiladores son distintos según el ordenador y el sistema operativo; y el código máquina que generan es también distinto de un ordenador a otro. El programa fuente, sin embargo, es el mismo para cualquier ordenador. 63 Programa en lenguaje de alto nivel Compilador + Enlazador Programa en lenguaje máquina Si en la compilación se detecta algún error, el programa fuente deberá ser modificado y otra vez compilado. Ventajas: Se optimiza algo el código. Una vez compilado el programa, se puede ejecutar las veces que queramos sin necesidad de traducir otra vez el programa fuente. Desventajas: el proceso de depuración de errores puede ser más complicado que si se usa un intérprete. 64 5. Fases en la resolución de problemas mediante programas Fases de este proceso: 1. Análisis del problema 2. Diseño del algoritmo 3. Codificación 4. Compilación y ejecución 5. Verificación y depuración 6. Mantenimiento 7. Documentación 65 Ejemplo: programa que nos manda escribir una cantidad de dinero en euros y nos da su valor en dólares y en libras. 1. Análisis del problema: Se analiza el problema teniendo en cuenta las especificaciones establecidas. En este caso una especificación podría ser que el resultado tenga dos cifras decimales. 66 Inicio Leer (euros) 2. Diseño del algoritmo: se diseña el algoritmo que resuelva el problema; por ejemplo con un diagrama de flujo: dolares=c1*euros libras=c2*euros Imprimir (dolares, libras) Fin 67 3. Codificación: se escribe el programa utilizando la sintaxis del lenguaje de alto nivel que se vaya a usar; por ejemplo C: /*Programa que calcula el valor en dólares y libras una cantidad en euros*/ #include<stdio.h> #include<conio.h> main() { float euros, dolares, libras; printf(“Escribe el valor en euros que quieras convertir:\n”); scanf(“%f”,&euros); dolares= euros*c1; libras=euros*c2; printf(“El valor en dolares es: %.2f y en libras es: %.2f”, dolares, libras); getch(); } 68 4. Compilación y ejecución: el programa se compila y si no hay errores de sintaxis, se ejecuta. Si hay errores de sintaxis, se modifica el programa fuente y se vuelve a compilar. Existen aplicaciones como el Turbo C de Borland o el Dev-C++ que permiten: Escribir el programa Compilarlo Ejecutarlo Ejecutarlo paso a paso Comprobar donde hay errores en la compilación … Pero también se puede escribir en el bloc de notas de Windows y compilarlo y ejecutarlo en MS-DOS o desde UNIX 69 5. Verificación y depuración: Puede que no haya ningún error de tipo sintáctico, pero que el programa no funcione del todo bien. Por ello es necesario ejecutar el programa varias veces y probarlo. Por ejemplo en el caso anterior, si hemos definido las variables euros, dolares y libras como enteros en vez de decimales (float). 6. Mantenimiento: Consiste en actualizar el programa cada vez que sea necesario. En el ejemplo anterior, las constantes c1 y c2 no son siempre las mismas. 70 7. Documentación: nos va a permitir la comprensión, modificación, mantenimiento … de un programa, en el futuro, y por una persona distinta del programador. La programación incluye el algoritmo del programa (pseudocódigo o diagrama de flujo) y el programa debidamente comentado. 71 Inicio Editar programa fuente Fases en la ejecución de un programa: Compilar programa fuente (programa objeto) ¿Errores de compilación? SI No Programa compilado y enlazado (programa ejecutable) Ejecución del programa ejecutable (¿errores no sintácticos?) ¿Errores no sintácticos? SI NO Fin 72 6. Breve historia de los lenguajes de programación de alto nivel Los primeros lenguajes de programación que se desarrollaron fueron, a finales de los 50 y principios de los 60 el COBOL, FORTRAN IV, BASIC y LOGO. Surgen como alternativa a los lenguajes ensambladores. A finales de los 70 y principios de los 80 aparecen otros como el PASCAL (1971) y C (1972). Se convierten en dominantes junto con otros anteriores como el COBOL y el FORTRAN. A principios de los años 80 apareció C++, lenguaje de programación orientada a objetos. En los 90 aparece el lenguaje Java, también orientado a objetos y muy dirigido a Internet. En el año 2000 Microsoft presenta el lenguaje C#, evolución del lenguaje C++. 73 El lenguaje C nace en los laboratorio Bell de AT&T y ha sido estrechamente asociado al sistema operativo UNIX ya que el propio UNIX, los compiladores C y los programas y herramientas de UNIX están escritas en C. El lenguaje está inspirado en el lenguaje B escrito por Ken Thompson en 1970 con intención de codificar el UNIX, que en la fase de arranque estaba escrito en ensamblador, en vistas a su transportabilidad a otras máquinas. El lenguaje B, a su vez, es un lenguaje inspirado en otro lenguaje, el BCPL, concebido por Martin Richard en 1967. En 1972, Dennis Ritchie toma el relevo y modifica el lenguaje B, creando el lenguaje C y reescribiendo UNIX en dicho lenguaje. 74 La gran cantidad de ventajas que presenta el lenguaje C sobre otros lenguajes hace que siga siendo uno de los lenguajes más populares y usados en empresas, organizaciones, fabricantes de software … Ventajas: Programación estructurada (se evita la instrucción goto) Economía de las expresiones Abundancia de operadores y tipos de datos Codificación en alto y bajo nivel simultáneamente (punteros) Transportabilidad Producción de código objeto altamente optimizado Uso de bibliotecas de C (funciones matemáticas, lectura y escritura de ficheros, manejo de cadenas de caracteres …) 75