Download UNIDAD 1: Introducción a la arquitectura de computadoras. 1.1

Document related concepts
no text concepts found
Transcript
UNIDAD 1: Introducción a la arquitectura de computadoras.
1.1 Introducción
La tecnología de computadoras ha progresado increíblemente en los últimos cincuenta
años. En 1945 no había computadoras con programa almacenado. Hoy, con menos de mil
dólares es posible comprar una computadora personal con más prestaciones, más memoria
principal y más memoria en disco que una computadora que en 1965 costaba un millón de
dólares.
Desde 1985 ha habido una media-docena de nuevas máquinas cuya introducción aparentaba
revolucionar la industria de la informática; sin embargo estas revoluciones sólo fueron
ilusorias, porque alguien más construyó una computadora con un mejor rendimiento.
Los avances en la industria de la computación han producido una nueva revolución, la
revolución de la información que se sitúa a la par con la revolución industrial o con la
revolución agrícola.
Si la industria del transporte hubiera evolucionado al paso que la industria de la
computación, por ejemplo, hoy podríamos viajar de costa a costa en 5 segundos por 50
centavos.
Algunas aplicaciones que hace algunas décadas resultaban como parte de la ficción, hoy en
día forman parte de nuestra vida diaria, por ejemplo:
•
Cajeros automáticos: Una computadora puesta en las paredes de los bancos, para
distribuir y colectar efectivo, era un concepto ridículo en los 1950’s, cuando la
computadora más barata costaba al menos $500, 000.00 dólares y era del tamaño de un
automóvil.
•
Computadoras en los automóviles: El control por computadora en los automóviles fue
absurdo hasta la década de los 1980’s, cuando los microprocesadores mejoraron
dramáticamente en precio y rendimiento. Actualmente, las computadoras reducen la
contaminación y mejoran la eficiencia del combustible a través del control de inyectores
e incrementan la seguridad por medio de los controles de velocidad y el inflado de
bolsas de aire que protegen a los ocupantes en caso de accidentes.
•
Computadoras portátiles: Esto sólo podía ocurrir en sueños, sin embargo los avances en
los sistemas de cómputo permiten llevar las computadoras prácticamente a cualquier
sitio.
•
El proyecto del genoma humano: El costo del equipo de cómputo necesario para
monitorear las secuencias de DNA humano fue de algunos millones de dólares. Es poco
probable que alguien hubiera considerado este proyecto si el costo fuera de 10 a 100
veces más alto, como ocurría hace 15 o 25 años.
•
Internet: Actualmente el Internet esta transformando nuestra sociedad, entre sus usos
están la distribución de noticias, compras desde catálogos en línea, planeación de
vacaciones, envío de flores, encontrar a otros que compartan los mismos intereses, etc.
Claramente los avances en la tecnología de las computadoras afectan casi todos los
aspectos de nuestra sociedad. Los avances en hardware han permitido a los programadores
crear software increíblemente útil. Algunas aplicaciones que son ficción para el mañana
son: La sociedad sin efectivo, autopistas inteligentes y el cómputo auténticamente ubicuo:
no llevar computadoras por que ellas estarán disponibles en donde sea.
En la década de los 1960’s y 1970’s, una restricción primaria sobre el rendimiento del
cómputo fue el tamaño de la memoria de las computadoras. Los programadores obedecían a
un credo simple: Al minimizar el espacio de memoria se hacen programas más rápidos. En
la última década, los avances en el diseño de las computadoras y en la tecnología de las
memorias han reducido la importancia de la memoria pequeña.
Los programadores interesados en el rendimiento ahora necesitan entender los tópicos que
han reemplazado al modelo simple de memoria de los 1960’s: La naturaleza jerárquica de
las memorias y la naturaleza paralela de los procesadores. Los programadores que busquen
construir versiones competitivas de compiladores, sistemas operativos, bases de datos, etc.,
deberán contar con conocimientos de la organización de las computadoras.
1.2 Abstracciones en software
Tanto en Hardware como en software encontramos abstracciones, es decir, un conjunto de
capas jerárquicas donde la capa de un nivel mas bajo oculta detalles a la capa siguiente.
El principio de abstracción es la forma en que los diseñadores de hardware y software se las
arreglan con la complejidad de los sistemas de cómputo.
Para entender las abstracciones existentes en software, primeramente explicaremos lo que
hay debajo de un programa.
Para “hablarle” a una máquina electrónica, sería necesario enviarle señales eléctricas. Las
señales que las máquinas entienden fácilmente son “encendido” y “apagado”, de modo que
el alfabeto de las máquinas solo se forma por dos letras. Así como las 27 letras del alfabeto
español no nos limitan cuanto puede ser escrito, con las dos letras del alfabeto de las
computadoras no les establece un límite de lo que se puede hacer con ellas. Los dos
símbolos para estas dos letras son los números 0 y 1, por lo que comúnmente consideramos
como el lenguaje de las máquinas a los números en base 2, o números binarios. A cada
“letra” la referimos como un dígito binario o bit.
Las computadoras son esclavas de nuestros comandos; y el nombre de un comando
individual se denomina instrucción. Las instrucciones son una secuencia de bits que la
computadora entiende, pueden ser pensadas como números. Por ejemplo, los bits:
1000110010100000
Le dicen a una computadora que sume dos números. Un fundamento del cómputo es el uso
de números para instrucciones y datos, esto se revisará con mayor detalle en la Unidad 2.
La programación de computadoras con números binarios es bastante tediosa y expuesta a
errores, por lo que fue necesaria la invención de nuevas notaciones más cercanas a la forma
de pensar de los humanos. Las primeras notaciones se trasladaban a binario a mano, pero
los pioneros de la computación se preguntaron ¿Por qué no utilizar a la máquina para
programar a la máquina?, Pronto se crearon programas encargados de trasladar de notación
simbólica a binario. Al primero de estos programas se le denominó ensamblador. Por
ejemplo, para sumar dos números el programador escribía en notación simbólica:
add A, B
y el ensamblador lo trasladaría a
1000110010100000
El nombre acuñado para este lenguaje simbólico, aún usado actualmente, es lenguaje
ensamblador.
Sin embargo el lenguaje ensamblador aún se encuentra lejos de la forma de pensamiento
humano, y aunque es fácilmente entendible para los profesionistas dedicados a la
computación, no es un lenguaje que permita a los físicos expresar el comportamiento de un
fluido o a los contadores organizar sus libros de balances. El lenguaje ensamblador requiere
que el programador escriba una línea por cada instrucción que la máquina ejecutará,
forzando al programador a pensar como la máquina.
Una simple pregunta se hicieron los pioneros de la computación: Si fue posible construir un
programa que traslade de notación simbólica a instrucciones binarias, para simplificar la
programación ¿Qué impide la creación de un programa que traduzca de un lenguaje más
cercano al pensamiento humano a lenguaje ensamblador?, la respuesta fue: Nada. A estos
programas se les conoce como compiladores y a los lenguajes que ellos compilan se les
conoce como lenguajes de programación de alto nivel. En un lenguaje de alto nivel el
programador escribiría la expresión:
A+B
El compilador debería compilar la instrucción a lenguaje ensamblador:
add A, B
Y el ensamblador lo traduciría a :
1000110010100000
En la figura 1 se muestra la relación entre estos programas y lenguajes.
Fig. 1 – Programa en C compilado al Lenguaje ensamblador y después ensamblado a lenguaje de máquina
binaria.
Los lenguajes de programación de alto nivel ofrecen diferentes beneficios: Primero,
permiten al programador pensar en un lenguaje mas natural, usando palabras en ingles y
notación algebraica. Más aún, los lenguajes se han diseñado de acuerdo a su uso inherente,
así Fortran fue creado para cómputo científico, Cobol para procesamiento de datos de
negocios, Lisp para manipulación simbólica, etc.
La segunda ventaja es que se mejora la productividad del programador, por que para
expresar una idea se escriben menos líneas en un lenguaje de alto nivel, en lugar de
expresar la idea en lenguaje ensamblador.
La ventaja final es que estos lenguajes de programación permiten a los programas ser
independientes de la computadora en la cual fueron escritos, dado que los compiladores y
ensambladores pueden trasladar los programas en lenguajes de alto nivel a instrucciones
binarias de cualquier máquina.
Estas tres ventajas son tan fuertes que actualmente poca programación se escribe en
lenguaje ensamblador. Cuando un programador escribe un programa en un lenguaje de alto
nivel, puede olvidarse de lo que hay por debajo, es decir, puede ignorar la notación del
lenguaje ensamblador, y mejor aún, puede ignorar el código binario, en otras palabras, esta
utilizando una abstracción.
Como era natural, los programadores notaron que el reutilizar al software es más eficiente
que iniciar con un programa desde cero. De aquí que los programadores hagan uso de
varias rutinas que se encuentran en diferentes librerías. Una de las primeras librerías
contenía rutinas de entrada y salida de datos, la cual incluía, por ejemplo, rutinas para
controlar impresoras, que aseguraban que la impresora tuviera papel antes de iniciar la
impresión. Tal software controlaba dispositivos de entrada y salida como discos
magnéticos, cintas magnéticas y pantallas de video.
Pronto se descubrió que los programas se ejecutaban en forma eficiente si existía otro
programa encargado de supervisar su ejecución. Cuando terminaba una tarea, el programa
supervisor iniciaba con la siguiente, evitando pérdidas de tiempo. Estos programas
supervisores también incluían librerías con rutinas de entrada/salida, y son la base de los
sistemas operativos actuales. Los sistemas operativos son programas que manejan los
recursos de una computadora para el beneficio de los programas que corren en esa
máquina.
Puede notarse que desde el momento que se carga al sistema operativo, el usuario de
computadoras trabaja sobre una abstracción, puesto que todos sus programas trabajan sobre
una plataforma establecida, de la cual el programador puede ignorar los detalles que hay
por debajo.
Otra abstracción la encontramos en la clasificación del software. El software se clasifica
por su uso, al software que proporciona servicios que son comúnmente útiles se le llama
Software de Sistema, los sistemas operativos, compiladores y ensambladores son ejemplos
de software de sistemas; son programas de interés para los programadores. En contraste, al
software dedicado a resolver problemas específicos de los usuarios se le denomina Software
de Aplicación. Por ejemplo, editores de textos, programas de dibujos, etc. En la figura 2 se
muestra al software organizado como capas jerárquicas, mostrando el ámbito donde cada
capa se desenvuelve. El usuario de computadoras sólo se concreta en aplicaciones e ignora
al software del sistema. Mientras que el programador puede abarcar las dos capas más altas
e ignorar lo que hay en el hardware. Por lo tanto, nuevamente tenemos abstracciones.
Fig. 2 – Una vista simplificada del Hardware y Software como capas jerárquicas
Fig. 3 – Un ejemplo de la clasificación del Software.
La vista simplificada del software por capas genera algunos conflictos, por ejemplo en el
caso de los compiladores, los compiladores son utilizados para producir programas, tanto
aplicaciones como software de sistema. Sin embargo, cuando una aplicación se esta
ejecutando, ya no requiere del compilador. Por lo que el software de aplicaciones no puede
estar como una capa monolítica ubicada sobre el software de sistemas. Para ello se han
dado otro tipo de clasificaciones, como la que se muestra en la figura 3, no obstante, en esta
nueva clasificación para el software también se encuentran abstracciones.
1.3 Abstracciones en hardware
En hardware también encontramos abstracciones, un usuario de computadoras se olvida de
las partes que componen a la computadora y la utiliza como un sistema conjunto, como una
herramienta que le ayudará a resolver problemas diversos. En la figura 4 mostramos a una
computadora típica de escritorio con sus diferentes elementos: Teclado, ratón, pantalla,
bocinas y el gabinete, que internamente contiene mas hardware.
Fig. 4 – Computadora típica de escritorio.
Sin embargo usuarios mas avanzados podrían abrir el gabinete, para encontrar mas
elementos de hardware: La tarjeta madre (una tarjeta verde con diferentes elementos
conectados), el disco duro, la unidad de disco flexible, la unidad de disco compacto, la
fuente de alimentación y los cables de conexiones.
El ensamblador de computadoras puede olvidarse de lo que contiene cada uno de estos
elementos y utilizarlos para ensamblar una computadora, es decir, el ensamblador de
computadoras trabaja sobre otro conjunto de abstracciones.
Pero podríamos ir observando con mayor detalle a los elementos que están dentro del
gabinete, por ejemplo a la tarjeta madre, ésta contiene diferentes elementos: Al procesador
(o CPU), la DRAM, la ROM, puertos, etc. En la figura 5 se muestra la organización típica
de una tarjeta madre de una PC.
Fig. 5 – Tarjeta madre de una PC.
El procesador es la parte activa de la tarjeta madre, sigue las instrucciones de un programa
al pie de la letra. Suma números, prueba números, activa señales de dispositivos de I/O, etc.
Los programas se almacenan en memoria secundaria (disco magnético o disco compacto) y
para su ejecución deben ser transferidos a memoria principal (la DRAM).
No es el objetivo de esta sección explicar detalladamente el funcionamiento de los
elementos que integran a la tarjeta madre, pero basta explorar un poco para encontrar mas
detalles de funcionamiento, es decir, revisar un nivel jerárquico mas bajo.
Como muestra, exploremos un poco al procesador (típicamente conocido como CPU). El
procesador Pentium de Intel contiene las unidades funcionales siguientes: El camino de los
datos -para enteros y punto flotante-, el control, la memoria caché –para instrucciones y
datos-, y el control de los saltos. En la figura 6 se muestra la distribución es estos bloques
funcionales.
El área del chip es de 91 mm2 y contiene cerca de 3.3 millones de transistores; la memoria
caché ocupa al menos 1 millón de transistores.
Fig. 6 – Dentro del procesador Intel Pentium.
Es conveniente notar que al hacer referencia a los bloques funcionales y no a las
compuertas lógicas, o directamente al número de transistores, se están utilizando más
abstracciones.
Los circuitos integrados son una de las abstracciones mas importantes de la electrónica, por
debajo de un circuito integrado se oculta todo el proceso que requiere para su fabricación,
desde que se toma una barra de silicio hasta que se empaquetan los chips. En la figura 6 se
muestra en forma representativa el proceso de manufactura de los chips.
Y aún llegando al silicio encontramos algunas abstracciones que nos ocultan las
propiedades físicas de este elemento o bien de las impurezas que se le agregan para formar
los diferentes materiales.
En conclusión, el desarrollo de hardware y software está lleno de abstracciones; y entre
todas ellas existe una que es de interés para este curso (y en general para los desarrolladores
de computadoras). La abstracción de interés es aquella en la que el hardware se relaciona
con el software de bajo nivel y se denomina: Arquitectura de un repertorio de instrucciones
o simplemente Arquitectura de una computadora.
La arquitectura establece los principios sobre los cuales se diseña una computadora: Su
repertorio de instrucciones, el tamaño de los datos, el número de registros, etc. Y sobre una
misma arquitectura se estudiarán diferentes implementaciones que pueden variar en costo y
rendimiento, pero que ejecutan el mismo software.
Fig. 7 – Proceso de manufactura de los circuitos integrados.
Además, como una abstracción, se representa a una computadora con cinco componentes
clásicos: Entradas, salidas, memoria, camino de los datos y control, por lo general los
últimos dos componentes se combinan y se les denomina procesador.
Esta representación se muestra en la figura 8 y es una representación estándar,
independientemente de la tecnología. Los diferentes elementos de una computadora actual
o del pasado, caen dentro de alguna de estas categorías.
Entrada
Control
Camino
de los
datos
Memoria
Salida
Procesador
Fig. 8 – Cinco componentes clásicos de una computadora.
TAREA 1
1.- Si la industria del transporte hubiera evolucionado al paso que la industria de la
computación ¿Cuál sería el costo aproximado de un automóvil y cual sería su velocidad
máxima?, investigar en Internet el costo y velocidad aproximada del primer automóvil y de
la primera computadora electrónica (en la computadora consideremos el número de
instrucciones por segundo) y de acuerdo a las características de las nuevas computadoras
estimar las características que se deberían tener en el automóvil.
2.- Explica con tus propias palabras que es una abstracción, y en un par de objetos de la
vida diaria: automóvil, casa, televisión, etc., ilustra el uso de abstracciones.
Los siguientes ejercicios se tomaron directamente del texto (se sugiere revisarlo para
responder adecuadamente):
3. Encontrar la palabra o frase de la lista siguiente que mejor corresponda a la descripción
de las siguientes preguntas. Utilizar en la respuesta las letras a la izquierda de las palabras.
Cada respuesta debe utilizarse sólo una vez.
a)
b)
c)
d)
e)
f)
g)
h)
i)
j)
k)
l)
m)
n)
abstracción
ensamblador
número binario
bit
caché
CPU (unidad central de proceso)
chip
compilador
familia de computadores
control
camino de datos
defecto
dado
DRAM (memoria dinámica de
acceso aleatorio)
o) implementación
p) instrucción
q) arquitectura del repertorio de
instrucciones
r) circuito integrado
s) memoria
t) sistema operativo
u) procesador
v) semiconductor
w) supercomputador
x) transistor
y) VLSI (circuito integrado de muy
alta escala)
z) aprovechamiento (yield)
[ ]. Abstracción especifica que el hardware proporciona al software de bajo nivel.
[ ]. Parte activa del computador que sigue las instrucciones del programa al pie de la letra:
suma números, examina números, etc.
[ ]. Otro nombre para procesador.
[ ]. Aproximación al diseño hardware o software. El sistema está formado por capas
jerárquicas, en las que cada capa de nivel inferior oculta detalles de la capa de nivel
superior.
[ ]. Número en base 2.
[ ]. Dígito binario.
[ ]. Colección de implementaciones de la misma arquitectura del repertorio de
instrucciones que están disponibles a la vez y varían en precio y rendimiento.
[ ]. Componente del procesador que realiza operaciones aritméticas.
[ ]. Componente del procesador que indica al camino de datos, memoria y dispositivos de
E/S lo que deben hacer de acuerdo con las instrucciones del programa.
[ ]. Hardware que obedece la abstracción de la arquitectura del repertorio de instrucciones.
[ ]. Máquina de alto rendimiento que cuesta más de un millón de dólares.
[ ]. Orden individual para un computador.
[ ]. Circuito integrado normalmente utilizado para construir la memoria principal.
[ ]. Integra desde docenas hasta cientos de transistores en un solo chip.
[ ]. Integra desde cientos de miles hasta millones de transistores en un solo chip.
[ ]. Localización de los programas cuando se están ejecutando, también contiene los datos
que necesitan.
[ ]. Defecto microscópico en una oblea.
[ ]. Apodo para un dado o circuito integrado.
[ ]. Conmutador «on-off» controlado por electricidad.
[ ]. Porcentaje de dados buenos del número total de dados de la oblea.
[ ]. Programa que gestiona los recursos del computador en beneficio de los programas que
corren en esa máquina.
[ ]. Programa que traduce una versión simbólica de una instrucción a la versión binaria.
[ ]. Programa que traduce una notación de más alto nivel al lenguaje ensamblador.
[ ]. Componente rectangular que se obtiene al trocear una oblea.
[ ]. Memoria pequeña rápida que actúa como buffer para la memoria principal.
[ ]. Sustancia que no conduce bien la electricidad.
4. Utilizando las categorías de la tabla siguiente, clasificar los siguientes ejemplos.
Utilizar en la respuesta las letras a la izquierda de las palabras. De forma distinta al
ejercicio anterior, las respuestas de la tabla pueden utilizarse más de una vez.
a)
b)
c)
d)
e)
f)
g)
h)
i)
j)
software de aplicaciones
lenguaje de programación de alto
nivel
dispositivo de entrada
circuito integrado
mini computadora
dispositivo de salida
computador personal
semiconductor
supercomputador
software del sistema
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
].
].
].
].
].
].
].
].
].
].
].
].
].
].
].
].
].
].
Apple 11.
Ensamblador.
Compilador.
Cray 1.
DRAM.
Fortran.
IBM PC.
Teclado.
Microprocesador.
Ratón.
Sistema operativo.
Pascal.
PDP-8.
Impresora.
Pantalla de tubo de rayos catódicos.
Silicio.
Hoja electrónica.
Editor de textos.