introducción a la física computacional - grupo de ... · general no intencionados, pero a veces a...

39
Introducción a la Física Computacional Tema 1 Introducción Universidad de Oviedo Grado en Física Curso 2017-18

Upload: phamduong

Post on 02-Oct-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

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 ordenadorPlaca 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 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).