Introducción a la Física Computacional

Anuncio
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).
Descargar