Introducci ´on a la Computaci ´on
¿C ´
omo funciona una computadora?
Esteban E. Mocskos ([email protected])
Facultad de Ciencias Exactas y Naturales, UBA CONICET
Un poquito de historia
Y al comienzo solo hab´ıa oscuridad
Hasta que se hizo la luz ...
¡Alan Turing!
En 1936, escribe On Computable Numbers, with an Application to the Entscheidungsproblem - Decision Problem en Proceedings of the London Mathematical Society.
Cre ´o una m ´aquina “imaginaria” (por que a ´un no se hab´ıa construido) llamada m ´aquina universal de c ´omputo (“universal computing machine”). Hoy en d´ıa se la conoce como “Universal Turing machine”.
¿Qu ´e es una computadora?
Modelo de von Neumann
Se compone de cuatro partes principales:
1 Memoria 2 Unidad de Control 3 Unidad aritm ´etica l ´ogica
4 Componentes de entrada/salida (input/output)
Memoria de acceso aleatorio de lectura y escritura para
instruccionesy datos.
Los datos son informaci ´on almacenada que es usada e interpretada por el programa (o programador). Los programas son datos codificados que indican a la computadora qu ´e tiene que hacer.
La unidad de control consigue las instrucciones y datos de la memoria, decodifica las instrucciones y luego coordina las distintas tareas para que las operaciones se realicen.
La unidad aritm ´etica se encarga de las operaciones b ´asicas entre n ´umeros enteros.
Los componentes de entrada/salida son la comunicaci ´on con el universo de los humanos.
¿Qu ´e es una computadora?
Los tres componentes del sistema son:
1 La unidad central de proceso (CPU): dentro
est ´an los registros que pueden ser
manipulados directamente por un programa.
2 La memoria
3 Los dispositivos de Entrada/Salida (I/O).
Estos tres componentes se interconectan mediante un dispositivo denominado bus de sistema (system bus).
Bus: es un paquete de conductores (cables o pistas) que interconectan
¿Qu ´e es una computadora?
Ciclo de instrucci ´on
Una computadora vive realizando el siguiente ciclo:
1 Fetch: conseguir la siguiente instrucci ´on a ejecutar. 2 Decode: a partir de un chorizo de bits (0110 1110 1100
1100) adivinar de qu ´e instrucci ´on se trata.
3 Memory fetch: de ser necesario, se deber ´an conseguir los
datos requeridos por la instrucci ´on.
4 Execute: se ejecuta la instrucci ´on.
5 Write back: si fuera necesario, se deber ´a almacenar en
memoria el resultado de la instrucci ´on.
¿Qu ´e es una computadora?
Buses
source: Prof. Marc H. Scholl - Universit ¨at Konstanz
Habitualmente, hay tres tipos de buses en un sistema:
1 Bus de datos: viajan los datos.
2 Bus de direcciones: se utiliza para indicar el
destino o fuente de los datos a mover.
3 Bus de control: se usa para sincronizar las
operaciones y para indicar qu ´e operaci ´on se realiza.
Los buses proveen la infraestructura de comunicaci ´on y coordinaci ´on que es compartida por todos los componentes del sistema.
No hay comunicaci ´on punto a punto (hay excepciones muy puntuales por dise ˜no, como las l´ıneas de interrupci ´on).
La velocidad de transmisi ´on del bus impone un l´ımite en la performance del sistema. Esto se conoce como bus bottleneck (cuello de botella del bus).
¿Qu ´e es una computadora?
Fetch en detalle
source: Prof. Scholl-Universit ¨at Konstanz
10111000 00000000 00000001 corresponde con MOV AX, 0x100 para un Pentium 4 (i = 256 en C). IP: instruction pointer.
IR: instruction register.
MAR: memory address register.
En la memoria est ´a almacenado el programa.
1 IP → MAR: el contenido del registro IP se coloca en el registro MAR.
2 IP++: se incrementa IP para que apunte a la siguiente instrucci ´on del programa.
3 (MAR) → IR: el contenido de lo referenciado por MAR se copia, a trav ´es del bus
de datos, al IR.
¿Qu ´e es una computadora?
Fetch en esquema
IP → MAR: (MAR) → IR:
Memoria
¿Qu ´e pasa con la memoria?
¿Cu ´antos de estos pasos tienen que ver con acceder a la memoria?
1 XFetch: conseguir la siguiente instrucci ´on a ejecutar. 2 Decode: a partir de un chorizo de bits (0110 1110 1100
1100) adivinar de qu ´e instrucci ´on se trata.
3 XMemory fetch: de ser necesario, se deber ´an conseguir
los datos requeridos por la instrucci ´on.
4 Execute: se ejecuta la instrucci ´on.
5 XWrite back: si fuera necesario, se deber ´a almacenar en
memoria el resultado de la instrucci ´on.
source: Computer Arquitecture: A quantitative Approach. By John L. Hennesy, David Patterson, Andrea C. Arpaci-Dusseau
Memoria
Memory Wall
source: http://www.ict- ramplas.eu
Diferencia de velocidad
Memoria
¿Qu ´e es la latencia?
Wikipedia: Latency is a time interval between the stimulation and response, or, from a more general point of view, as a time delay between the cause and the
Memoria
¿Qu ´e significa en t ´erminos reales?
Memoria
Tratando de evitar el problema
Memoria
Jerarqu´ıa de memoria
source: blog.teachbook.com.au
Si lo m ´as r ´apido son los registros... ¿Por qu ´e no estodo registros?
La platita...
Memoria
Evoluci ´on de los procesadores
Memoria Instrucciones
¿C ´omo son las instrucciones de un procesador?
Memoria Instrucciones
Programa de ejemplo
A continuaci ´on, vemos un programa escrito en un lenguaje de fantas´ıa que est ´a muy cerca de las instrucciones propias del procesador:
1 l d r0 , 0xFFAB 2 l d r1 , [ b ] 3 add r2 , r0 , r 1 ; r 2 = r 0 + r 1 4 l d r3 , [ c ] 5 mul r4 , r2 , r 3 ; r 4 = r 2 * r3 6 s t o [ b ] , r 4
ld r0, 0xFFAB: ir a la posici ´on de memoria 0xFFAB y guardar su contenido en el
registro 0, el valor que est ´a almacenado.
add r2, r0, r1: realiza la suma de lo que est ´a guardado en los registros 0 y 1, y
lo guarda en el registro 2.
mul r4, r2, r3: multiplicaci ´on, guarda el resultado en el registro 4.
Programando
¿Qu ´e es programar?
Un algoritmo es una lista finita de intrucciones, consiste de: Instrucciones que indican qu ´e hacer.
Valores con los cuales se trabaja (par ´ametros).
Variables a las cuales se les asigna un valor y a las cuales se le realizan operaciones (i.e. sumar, restar).
Los programas se escriben en un lenguaje que puede convertirse en algo que una computadora pueda entender (i.e. ejecutar).
Programando
Lenguajes de alto nivel
Se refiere a las construcciones que son relativamente f ´aciles de entender por un humano (y no a que juegan en Primera A o en la NBA)
Ejemplos de lenguajes (¡no se pueden imaginar la cantidad de lenguajes que existen o existieron!): Perl, Matlab, Java, C, C++, C#, Visual Basic, Python, Scheme, Lisp, Pascal, Fortran y ¡la lista sigue!
Hay algunos que han sido creados espec´ıficamente para cierto nicho de
aplicaci ´on, haciendo m ´as f ´acil la vida para aquellos que lo necesitan (por ejemplo
Fortran para simulaci ´on).
Este tipo de lenguajes es independiente de la m ´aquina o arquitectura en la cual funciona (en realidad, en algunos casos se usan trucos espec´ıficos para obtener mejoras en el desempe ˜no).
Desde el punto de vista te ´orico, lo que se puede computar con cualquier lenguaje de estos es “lo mismo”.
Programando
¿C ´omo se logra ejecutar un programa?
Los lenguajes de alto nivel necesitan ser traducidos a lo que una computadora entiende: lenguaje de m ´aquina. Para esto, hay dos opciones:
1 Compilador: es un programa que toma c ´odigo fuente de alto nivel y lo convierte
en lenguaje de m ´aquina.
2 Int ´erprete: es un programa que convierte cada instrucci ´on en lenguaje de alto
nivel a una serie de instrucciones de m ´aquina.
Esto hace falta porque una computadora (i.e. el procesador) solo puede procesar lenguaje de m ´aquina:
El lenguaje de m ´aquina consiste en un conjunto de instrucciones que un
procesador puede ejecutardirectamente.
Cada instrucci ´on se codifica como un patr ´on de 1’s y 0’s que el procesador (en realidad, el ingeniero que lo dise ˜na) vincula con la operaci ´on a realizar (por ejemplo: add, substract, read, store, etc.)
Programando
Algunos t ´erminos y su explicaci ´on
Varios de estos t ´erminos surgieron en la ´epoca de las primeras computadoras y a ´un se usan
Bug: error en un programa
Debug: sacar un error de un programa
cableada (tambi ´en hardcodeada): cuando una entrada o par ´ametro de un programa est ´a directamente escrito como parte del mismo (por vagancia o falta de previsi ´on). Cada vez que se quiere correr el programa con otra entrada, hay que tocar el c ´odigo (¡muy feo!).
Varios de estos aportes fueron gracias a Grace Hopper, una de las primeras programadoras.
Tambi ´en se la conoce como “Amazing Grace”: El destructor americano USS Hopper y la supercomputadora Cray XE6 “Hopper” fueron nombradas por ella.
Terminando
Conclusiones
En este curso vamos a usar Python.
Es una lenguajeinterpretado (Hay un programa traduciendo cada comando que
se introduce a un mont ´on de operaciones en lenguaje de m ´aquina). Para aprender Python (o cualquier otro lenguaje de programaci ´on), hay que perder tiempo. Hay mucha informaci ´on en Internet, pero hasta que uno no se
ensucia los dedos, la cosa no avanza.No hay recetas m ´agicas
Aprovechen a los docentes para hacernos consultas y todo aquello que nunca se atrevieron a preguntar, es el momento de hacerlo, ¡no tengan verg ¨uenza!