Introducción a la Física Computacional - Grupo de ... · general no intencionados, pero a veces a...
Transcript of Introducción a la Física Computacional - Grupo de ... · general no intencionados, pero a veces a...
Introducción a la Física Computacional
Tema 1Introducción
Universidad de OviedoGrado en FísicaCurso 2017-18
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
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.
Fue construida en la Universidad de Pensilvania y comenzó a comercializarse en 1946.
Arquitectura de un ordenador
Detalle de la sección trasera de una parte del ENIAC, mostrando las válvulas termoiónicas encendidas.
Estaba compuesto por tubos de vacío o también llamados válvulas termoiónicas, en total unos 17.468 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.
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 6.000 interruptores.
● Cuando se requerían modificaciones de software, había que recablear lo que llevaba semanas de instalación.
Arquitectura de un ordenador
● John Von 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 ordenadorPERIFÉRICOS
Dispositivos de Entrada
● Teclado● Ratón● Micrófono● Escáner
● Monitor● Impresora● Altavoces● Plóter
PERIFÉRICOSDispositivos de
SalidaCPU
ALU*
UC!
Memoria RAM#
(volátil)
Memoria externa(persistente)
● ROM$
● Disco Duro● CD-ROM● DVD● Memoria Flash
* ALU: unidad aritmético-lógica
! UC: unidad de control
# RAM: memoria de acceso aleatorio
$ ROM: memoria de sólo lectura
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 ROM
Disco Duro
Memoria Flash
DVD
CD-ROM
Memoria persistenteMemoria volátil
● Memoria de lectura/escritura.
● Almacena el S.O. y los programas que están en ejecución junto con sus datos.
Memoria RAM● Memoria de sólo lectura.
● Almacena la BIOS (Basic Input-Output System): Conjunto de programas que se ejecutan al encender el PC (chequean el sistema y cargan el S.O. en RAM)
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
Vistos a muy bajo nivel, los microprocesadores procesan exclusivamente señales electrónicas binarias. Dar una instrucción a un microprocesador supone en realidad enviar series de unos y ceros espaciadas en el tiempo de una forma determinada. Esta secuencia de señales se denomina código máquina.
Para simplificar se le da a cada instrucción del código máquina un nombre fácil de recordar, como por ejemplo STORE, ADD o JUMP. Esta abstracción da como resultado el ensamblador, un lenguaje de muy bajo nivel que es específico de cada microprocesador.
Lenguajes de bajo nivel
Lenguajes de alto nivel
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:
● Monousuario (un solo usuario utilizando el sistema): MSDOS, Windows XP.
● Multiusuario (múltiples usuarios utilizando el sistema): Unix, Linux, Windows 7.
➢ En función del número de tareas:● 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.
Representación de la información
● 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.
Direcciones byte
Bits
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).
Las celdas de memoria
● Los ordenadores modernos tiene un bus de datos de 32 ó 64 bits. Se dice que usan palabras de 32 ó 64 bits.
Las celdas de memoria
● El número total de direcciones de memoria depende de la anchura del denominado bus de direcciones: 32 bits permiten 232 (≈ 4x109 ) direcciones.
Registro de direcciones de memoria
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 ISO-8859-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 231-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 (±).
● ñ→ ?– 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).