Universidad de Oviedo Grado en Física Curso 2016-17 Introducción a la Física Computacional Tema 1 Introducción Tema 1. Introducción ● Qué es un ordenador ● Sistemas operativos ● Representación de la información ● Modelos físico-matemáticos Tema 1. Introducción ● Qué es un ordenador ● Sistemas operativos ● Representación de la información ● Modelos físico-matemáticos Qué es un ordenador (computadora) ● ● ● Es un dispositivo electrónico (hardware) capaz de procesar información recibida a través de dispositivos de entrada (input), obtener ciertos resultados que serán mostrados en dispositivos de salida (output), gracias a programas (software). Todos los ordenadores poseen una memoria para almacenar los datos y los programas. Los sistemas de comunicación con el mundo exterior de los ordenadores se denominan periféricos y también dispositivos de entrada/salida (E/S, o en inglés, I/O). Arquitectura de un ordenador ENIAC Electronic Numerical Integrator And Computer Computador e Integrador Numérico Electrónico Fue construida en la Universidad de Pensilvania y comenzó a comercializarse en 1946. Glen Beck and Betty Snyder program ENIAC in BRL building 328. (U.S. Army photo) Ocupaba una habitación de 6m x 12m , pesaba 27 toneladas y se tardó en construir 30 meses. Arquitectura de un ordenador Estaba compuesto por tubos de vacío o también llamados válvulas termoiónicas, en total unos 17468 tubos, 7.200 de diodos de cristal , 1.500 relés , 70.000 resistencias, 10.000 condensadores y alrededor de 5 millones de soldaduras todas hechas a mano. Detalle de la sección trasera de una parte del ENIAC, mostrando las válvulas termoiónicas encendidas. Arquitectura de un ordenador ● Inconvenientes de ENIAC: ● ● ● Los tubos de vacío tenían una vida muy corta (los primeros solo duraban 10 minutos) y era tedioso encontrar el que había fallado. Requería la operación manual de 6000 interruptores. Cuando se requerían modificaciones de software, había que recablear lo que llevaba semanas de instalación. Arquitectura de un ordenador ● John Vob Neumann (1903-1957) ● ● En 1947 se encarga del problema que supone recablear el ENIAC En 1949 aporta la solución: la concepción de una memoria que registre los datos numéricos de un problema y almacene el programa con las instrucciones para la resolución del mismo. Arquitectura de un ordenador ● ● ● Los ordenadores modernos tienen lo que se denomina arquitectura de Von Neumann: tanto las instrucciones de programa como los datos a procesar se almacenan en la memoria. Ello permite una gran generalidad, ya que se pueden tratar a los programas como datos y viceversa. No obstante, esto también da lugar a problemas por fallos en la programación (en general no intencionados, pero a veces a propósito—como en los virus informáticos). Estructura de un ordenador PERIFÉRICOS Dispositivos de Entrada Teclado ● Ratón ● Micrófono ● Escáner ● PERIFÉRICOS Dispositivos de Salida CPU Monitor ● Impresora ● Altavoces ● Plóter ALU* ● UC! Memoria externa (persistente) ROM$ ● Disco Duro ● CD-ROM ● DVD ● Memoria Flash * ALU: unidad aritmético-lógica ● ! RAM# Memoria (volátil) UC: unidad de control RAM: memoria de acceso aleatorio # ROM: memoria de sólo lectura $ Estructura de un ordenador Placa Madre Estructura de un ordenador ● CPU (Unidad Central de Proceso) ● ● ALU (Unidad Aritmetico-Lógica) que realiza operaciones aritméticas y lógicas. Las operaciones que puede efectuar esta unidad son muy elementales, puesto que la mayoría de los computadores configuran la Unidad Aritmética con un sencillo sumador-restador. La ejecución de operaciones complejas se lleva a cabo descomponiéndolas en pasos elementales, que se ejecutan a la velocidad de varios millones por segundo. UC (Unidad de Control) se encarga de enviar la información a procesar a la Unidad Aritmética, así como el código que selecciona la operación que se debe hacer. Estructura de un ordenador Memoria volátil Memoria persistente DVD Memoria ROM CD-ROM Memoria RAM Disco Duro Memoria Flash Estructura de un ordenador ● ALU Una ALU simple de 2 bits que hace operaciones de AND, OR, XOR y adición A B A AND B 0 0 0 0 1 0 1 0 0 1 1 1 Qué lenguajes conocen los ordenadores ● ● ● Un lenguaje es un sistema de codificación de información, con un conjunto de símbolos que se combinan de acuerdo a reglas gramaticales. Los programas han de estar en el interior del ordenador en lenguaje de máquina (un lenguaje de muy bajo nivel) que depende de la CPU. Como es muy difícil programar en lenguaje de máquina, se diseñan programas en otros lenguajes, que se deben traducir a lenguaje de máquina. El software ● ● Un ordenador necesita un programa funcionando (software). Cuando se arranca, se ejecuta un programa (bastante corto) almacenado en la ROM. Ese programa de la ROM carga luego otro programa más largo del sector de arranque de alguno de los dispositivos de almacenamiento permanente (disco duro, por ejemplo). El software ● ● Ese segundo programa carga en memoria el sistema operativo (SO). El sistema operativo lanza otros programas o/y espera que nosotros interaccionemos con él. Qué lenguajes conocen los ordenadores Usuario Aplicaciones Sistema Operativo Firmware Hardware Tema 1. Introducción ● Qué es un ordenador ● Sistemas operativos ● Representación de la información ● Modelos físico-matemáticos Sistemas operativos ● ● ● El sistema operativo (SO) es la capa del software más cercana al hardware. Trabaja directamente con el hardware, siendo la interface entre el ordenador y el resto del software que en él se ejecuta. Gestiona los recursos del sistema y los reparte entre los distintos programas que se estén ejecutando. El SO permite interactuar con el ordenador estableciendo un lenguaje de comunicación entre el usuario y el ordenador a través de un intérprete de comandos. Clasificación de los sistemas operativos ➢ En función del número de usuarios: ● ● ➢ Multiusuario (múltiples usuarios utilizando el sistema): Unix, Linux, Windows 7. En función del número de tareas: ● ● ➢ Monousuario (un solo usuario utilizando el sistema): MSDOS, Windows XP. Monotarea (sólo admiten un programa en ejecución a la vez): MSDOS. Multitarea (admiten múltiples programas en ejecución a la vez): Windows, Unix, Linux. En función del número de procesadores: ● Uniproceso (un único procesador) ● Multiproceso (varios procesadores) El intérprete de comandos ● ● ● ● El intérprete de comandos es el interface del SO con el usuario. Puede ser en modo gráfico o en modo texto. A lo largo del curso iremos interaccionando con el SO (Linux Ubuntu) e iremos aprendiendo su manejo básico. En modo gráfico usaremos Gnome y en modo texto Bash. En Unix el intérprete de comandos en modo texto se denomina shell (caparazón). La shell espera órdenes nuestras indicándonoslo con $. Las órdenes son de la forma: $ orden argumento1 argumento2 ... <entrar> Tema 1. Introducción ● Qué es un ordenador ● Sistemas operativos ● Representación de la información ● Modelos físico-matemáticos Representación de la información ● ● ● Los datos y programas se almacenan en memoria en celdas (posiciones de memoria) numeradas con una dirección unívoca a través de la cual se accede a cada una de ellas. La longitud de las celdas usadas se mide en número de bits: un bit (b) es la unidad mínima de información que se puede almacenar: 0 ó 1. El byte (B) son 8 bits: número de bits necesarios para almacenar un carácter simple. Las celdas de memoria ● ● Las celdas de memoria tienen un tamaño que depende del bus de datos (que se usa para intercambiar datos de unos puntos a otros de la memoria y de la CPU). Los ordenadores modernos tiene un bus de datos de 32 ó 64 bits. Se dice que usan palabras de 32 ó 64 bits. El número total de direcciones de memoria depende de la anchura del denominado bus de direcciones: 32 bits permiten 232 (≈ 4x109 ) direcciones. Múltiplos del byte ● La capacidad total de la memoria se mide en bytes, aunque se usan casi siempre múltiplos: 1 Kilobyte (KB) = 210 bytes = 1024 bytes ≈ 103 bytes 1 Megabyte (MB) = 210 KBytes = 220 bytes ≈ 106 bytes 1 Gigabyte (GB) = 210 MByte = 230 bytes ≈ 109 bytes 1 Terabyte (TB) = 210 GByte = 240 bytes ≈ 1012 bytes. ● Estos múltiplos son diferentes a los del SI, y además Kilo se pone K (en mayúsculas). Tipos de datos ● Los datos básicos son los siguientes: Datos lógicos (booleanos) ✗ Las tiras de caracteres ✗ Los números enteros ✗ Los números reales Existen agrupaciones homogéneas y no homogéneas de los anteriores: ✗ ● ✗ ✗ Vectores y matrices (homogéneas) Listas, diccionarios y otras (heterogéneas) Datos lógicos ● ● ● Los datos lógicos o booleanos pueden tomar dos valores: verdadero o falso (true, false). Se necesita 1 bit para codificar un dato booleano, aunque se suele usar el tamaño mínimo de palabra (32 ó 64 bits) por comodidad. Algunos lenguajes utilizan un número entero 0 para indicar falso y un número entero diferente de 0 (por ejemplo, 1) para indicar verdadero. Tiras de caracteres ● ● ● Los caracteres usados en los alfabetos occidentales suelen necesitar 8 bits para codificarse, aunque los alfabetos orientales necesitan muchos más bits. En el primer caso una palabra necesita tantos bytes como caracteres tiene. Normalmente la información textual necesita del tipo de dato tira de caracteres (string en inglés), que incluye en ocasiones información sobre la longitud de la tira. Tiras de caracteres ● ● ● Hay muchas formas de asociar secuencias de bytes con letras, es decir, codificar (en inglés 'encoding'). La codificación más popular era la ASCII que asociaba los números del 0 al 127 con letras (utilizando 7 bits). El problema es que no asociaba ningún número a las letras acentuadas, a la eñe, a los signos ¿ y ¡, etc... La codificación de Windows se llama Win-1252 (equivalente a ISO8859-1), en esta, los números del 0 al 255 ( 8 bits) están asociados a letras, y por suerte hay acentos y exclamaciones y muchas cosas útiles como la eñe. La codificación UCS (Universal Character Set) que tiene muchísimos millones de letras distintas (todas las que se pueden usar en cualquier idioma del mundo, real o inventado). La asociación de números con letras que emplea UCS se llama Unicode y tiene distintas codificaciones posibles. Tiras de caracteres ● ● La codificación más popular de Unicode se llama UTF-8, y es la que utiliza Linux. Los números del 0 al 127 corresponden a las mismas letras en UTF-8 y en Win-1252. Si se escribe texto sin acentos, ni eñes, ni exclamaciones o interrogaciones abiertas, se leerá exactamente igual en Linux y en Windows. Para codificar todas las letras del mundo, que son muchas más que 256 (lo que cabe en un byte), el truco que tiene UTF-8 para representar con bytes las letras desde la 128 hasta la 2^31-1 es utilizar varios bytes. Tiras de caracteres ● Ejemplo de problemas con la codificación ● ñ → ñ – ● Si escribimos en UTF-8 y leemos en Win-1252. La letra eñe se codifica en UTF-8 con dos bytes que en Win-1252 representan la A mayúscula con tilde (Ã) y el símbolo más-menos (±). ñ→ Espa�a – Si escribimos en Win-1252 y leemos en UTF-8. La codificación de la eñe en Win-1252 es inválida en UTF-8 y se sustituye por un caracter de sustitución, que puede ser una interrogación, un espacio en blanco… depende de la implementación. Números enteros ● ● ● ● Los números enteros se codifican de acuerdo al sistema binario, con algunas modificaciones. Algunos lenguajes permiten números naturales (enteros sin signo). En general una CPU maneja muy rápido los números enteros, y admite obviamente de cada vez un tamaño de número correspondiente a la palabra (32 ó 64 bits). 32 bits permiten números enteros entre aproximadamente -231 y 231 (±2x1010). Números reales ● Los números reales suelen codificarse (norma IEEE 754) utilizando coma flotante de la forma: s 1,abcd x 2wyz de tal manera que un bit (s) codifica el signo, un grupo de bits codifica el exponente de 2 (wyz) y otro grupo (abcd) codifica la mantisa. En la mantisa el 1 antes de la coma está implícito y no se guarda. ● Con 8 bytes ó 64 bits (lo normal, denominado por cuestiones históricas doble precisión), en IEEE 754, se usan 11 bits para el exponente y 52 para la mantisa, lo que permite números entre: ±2,225x10 y ±1,798×10 Vectores y matrices ● ● ● ● Los vectores y matrices son agrupaciones homogéneas de datos (normalmente números). En inglés se denominan genéricamente arrays. Ocupan tanto como el total de números usados (un vector real de dimensión 3 ocupará 24 bytes). El acceso a los elementos de un vector o una matriz es directo (o sea se puede obtener el valor del 5º elemento sin necesidad de pasar por los anteriores). Se denomina acceso aleatorio. Existen en muchos lenguajes operaciones especiales para manejo de estas agrupaciones (tan importantes en el cálculo científico). Listas y diccionarios ● ● ● Los informáticos usan en multitud de ocasiones otras agrupaciones de datos (heterogéneas muchas veces). En las listas cada elemento se asocia a una posición (se parecen a los vectores, pero éstos son homogéneos). En los diccionarios (llamados en ocasiones arrays asociativos) se asocia un valor a una clave (que puede tener en general cualquier valor, entero, real, tira de caracteres, etc., aunque no siempre).