Está en la página 1de 41

ESTRUCTURA DE COMPUTADORES

Tema 1: Introducción a la Estructura de Computadores

GRADO EN INGENIERÍA INFORMÁTICA


GRADO EN INGENIERÍA DE COMPUTADORES

Luis Rincón

Este tema trata de ciertos conceptos introductorios acerca de la Estructura de Computadores. Los
objetivos del mismo son los siguientes:
• Presentar un concepto simplificado de lo que es un computador.
• Recordar la estructura básica de un computador elemental y sus unidades funcionales.
• Ubicar la materia de Estructura de Computadores dentro de una visión global del estudio de
los computadores.
• Recordar la estructura básica de un computador elemental y sus unidades funcionales.
• Analizar los elementos fundamentales que componen los computadores.
• Analizar las fases del ciclo de instrucción.
• Comprender que la ejecución de un programa consiste en la ejecución de una secuencia de
instrucciones de máquina.
• Presentar el concepto de microprocesador.
• Conocer las funciones básicas de los sistemas operativos.
• Estudiar el proceso de arranque de un computador.
• Aprender una serie de conceptos básicos sobre medidas de rendimiento de los
computadores.

1
Índice

1. Introducción.
2. Visión simplificada de un computador.
3. Unidades funcionales de los computadores digitales.
4. Conceptos básicos sobre sistemas operativos.
5. Niveles de estudio de los computadores.
6. Medidas de rendimiento.

2
Bibliografía

[PAT] D.A. PATTERSON, J.L. HENNESSY. Computer Organization and Design, 5th
ed. Morgan Kaufmann, 2014 (o la traducción española más reciente: Estructura y
Diseño de Computadores, 4ª ed. Reverté, 2011).

[PRI] A. PRIETO, A. LLORIS, J.C. TORRES. Introducción a la Informática. 4ª


edición, McGraw-Hill, 2006.

[CER] C. CERRADA, V. FELIU. Estructura y Tecnología de Computadores I. U.N.E.D.,


1993.

[DMI] P. DE MIGUEL. Fundamentos de los Computadores. 9ª edición. Paraninfo,


2006.

[STA] W. STALLINGS. Organización y Arquitectura de Computadores. 7ª edición,


Prentice Hall, 2006.

Se recomienda leer el primer capítulo de [PAT] completo.


También es interesante leer el primer capítulo de [CER].

3
Índice

1. Introducción.
2. Visión simplificada de un computador.
3. Unidades funcionales de los computadores digitales.
4. Conceptos básicos sobre sistemas operativos.
5. Niveles de estudio de los computadores.
6. Medidas de rendimiento.

Lo primero que se hace en este apartado es dar una definición genérica de lo que es un computador,
para después introducir el concepto de información representada mediante señales de ciertas
magnitudes. Es importante la distinción entre analógico-digital y entre magnitud y señal. También se
recuerdan algunos conceptos básicos aprendidos en asignaturas previas (Fundamentos de
Computadores en el Grado en Ingeniería Informática y Tecnología de Computadores en el Grado en
Ingeniería de Computadores), y se introducen algunos términos nuevos relevantes en el estudio de
los computadores.

Bibliografía: [CER] capítulo 1 - [PRI] capítulo 1.

4
Introducción
• Un computador es una máquina flexible capaz de procesar
información.
 Procesar información = manipular la información y realizar cálculos para
resolver un problema determinado.
 Flexible = programable, adaptable para resolver diferentes problemas.
• Esta definición no hace referencia a la tecnología utilizada en su
construcción.
• Computadores analógicos: procesan información analógica.
• Computadores digitales: procesan información digital.
• Los computadores actuales son digitales, y se construyen
utilizando tecnología electrónica.

Un computador es una máquina flexible capaz de procesar información (Cerrada, Feliu). Al decir
que procesa información nos referimos a que es capaz de realizar cálculos a partir de unos ciertos
datos y de resolver determinados problemas. Al decir que es una máquina flexible nos referimos a
que es programable, es decir, que puede ser adaptada para resolver diferentes problemas sin más
que proporcionarle las instrucciones adecuadas. Esta definición, muy simple, captura la esencia de la
naturaleza de un computador, sin entrar en la tecnología con la cual está construido.
Otra definición, algo más detallada y que tampoco hace referencia a aspectos tecnológicos, presenta
un computador como una máquina capaz de aceptar unos datos de entrada, efectuar con ellos
operaciones lógicas y aritméticas, y proporcionar la información resultante a través de un medio de
salida, todo ello sin intervención de un operador humano y bajo el control de un programa de
instrucciones previamente almacenado en la propia computadora (Prieto, Lloris, Torres).
Los computadores analógicos procesan información de naturaleza analógica, y cuentan con un
panel de control que permite interconectar circuitos capaces de realizar operaciones (suma, resta,
integración, etc.) con señales analógicas. La programación consiste en cablear las salidas de algunos
de esos circuitos con las entradas de otros para formar secuencias de operaciones con dichas señales.
Apenas extendidos, su principal uso consiste en la simulación de sistemas físicos.
Los computadores digitales manipulan información digital, y permiten una flexibilidad enorme a la
hora de su programación. Son capaces de emular a los computadores analógicos y realizar
simulaciones físicas muy detalladas, pero además se puede programar de forma sencilla una gran
variedad de algoritmos para resolver problemas de muy diversa naturaleza. Gracias a esta flexibilidad
y a la sencillez de su tecnología, los computadores actuales son exclusivamente digitales, y se
construyen utilizando tecnología electrónica.

5
Introducción
• La información viene dada por los valores que toman un conjunto de
magnitudes significativas.
 Magnitudes analógicas.
 Magnitudes digitales.
• Las señales son vehículos para transmitir información que cambia: v(t),
y(x), etc.
 Señales continuas o analógicas.
 Señales digitales.
• Conversión A/D: muestreo + cuantificación.
 Muestreo: discretización del eje de abscisas (frecuencia de muestreo).
 Cuantificación: discretización del eje de ordenadas.
• Conversión D/A: bloqueo.
Digital

Analógico
Z

La información viene dada por los valores que toman un conjunto de magnitudes físicas significativas
a lo largo del tiempo. Hay dos tipos de magnitudes: analógicas y digitales. Las magnitudes
analógicas toman valores en un rango continuo (como el voltaje, la temperatura, la corriente
eléctrica, etc). Entre dos valores cualesquiera de una magnitud analógica existen infinitos valores
intermedios, como sucede con los números reales. Las magnitudes digitales tienen un rango
discreto de valores (personas en una habitación, libros en una biblioteca, etc), al igual que sucede,
por ejemplo, con los números enteros.
Las señales representan la evolución de una magnitud dada en función de otra, y relacionan dos
variables: una de ellas es la variable independiente, y la otra es la variable dependiente. Ejemplos son
V(t) (evolución del voltaje en función del tiempo) o g(h) (aceleración de la gravedad en función de la
altura). Las señales permiten transmitir información que cambia. Se inserta información en una señal
modificando su valor en función de los datos que se pretende transmitir. Utilizaremos señales
dependientes del tiempo., y las clasificaremos en:
• Señales analógicas: pueden cambiar en cualquier instante.
• Señales digitales: sólo pueden cambiar en instantes concretos, y toman valores discretos.
Es posible transformar señales analógicas en digitales y viceversa mediante procesos de conversión:
• Conversión A/D (muestreo+cuantificación): transforma una señal analógica en digital.
• Conversión D/A (bloqueo): transforma una señal digital en analógica.
La frecuencia de muestreo es la frecuencia a la cual se toman muestras de la señal analógica para
discretizarla. El muestreo discretiza el eje de abscisas de la gráfica, obteniéndose una secuencia de
puntos separados horizontalmente en función de la frecuencia de muestreo.
Para digitalizar una señal, tras el muestreo de la misma viene un proceso de cuantificación,
consistente en discretizar los valores obtenidos asignando a cada muestra un valor perteneciente a un
conjunto discreto de valores posibles. La cuantificación discretiza el eje de ordenadas de la gráfica.

6
Introducción

• En esta asignatura estudiaremos los computadores digitales.


 Manejan información binaria (0 = FALSO, 1 = VERDADERO).
• La magnitud utilizada para transmitir señales es el voltaje.
 VH, H: voltaje alto; VL, L: voltaje bajo.
• Existen dos tipos de lógica:
 Lógica positiva: VH = 1 y VL = 0
 Lógica negativa: VH = 0 y VL = 1
 Lógica mixta: mezcla de las anteriores.

Voltajes típicos TTL CMOS


VHmax 5V 5V
VHmin 2V 3,5 V
Zona de incertidumbre
VLmax 0,8 V 1V
VLmin 0V 0V

Los computadores de hoy día son digitales, y están construidos con tecnología electrónica. La
información se codifica mediante voltajes o tensiones dentro de un determinado rango. Por
simplicidad, se maneja información binaria, y por tanto se pueden representar dos valores diferentes.
El rango de voltajes se divide en tres regiones:
• Voltaje alto o nivel alto (VH, H): corresponde con la región más próxima al voltaje
máximo del circuito.
• Voltaje bajo o nivel bajo (VL, L): corresponde con la región más próxima al voltaje
mínimo del circuito (0 voltios).
• Región de incertidumbre: constituye una zona de separación de las regiones de voltaje
alto y bajo.
Es importante que las señales nunca se estabilicen con un valor de tensión que caiga dentro de la
zona de incertidumbre, porque en caso contrario, pueden ser interpretadas como H por algunos
elementos del computador y como L por otros.
La interpretación de los valores de tensión en un circuito digital se puede realizar de tres formas:
• Cuando todas las señales con valor H se interpretan como 1 y todas las señales con valor L
se interpretan como 0, se dice que utilizamos lógica positiva.
• Cuando todas las señales con valor H se interpretan como 0 y todas las señales con valor L
se interpretan como 1, se dice que utilizamos lógica negativa.
• Cuando algunas señales del circuito se interpretan por lógica positiva y otras se interpretan
por lógica negativa, se dice que utilizamos lógica mixta.

7
Introducción
Codificación de la información digital

• Bit (binary digit): unidad mínima de información. Dos valores: 0 y 1.


• Grupos de bits:
 Cuarteto o nibble: cuatro bits.
 Octeto, carácter o byte: 8 bits.
• Palabra: tamaño de referencia del computador (múltiplos de byte).
• Multiplicadores de tamaño:
Kilo (K): 210 = 1024 Mega (M): 220 = 1.048.576
Giga (G): 230 = 1.073.741.824 Tera (T): 240
Peta (P): 250 Exa (E): 260

• Nueva terminología: Kibi, Mebi, Gibi, etc.

Por cuestión de simplicidad de diseño, la información en un computador se codifica en modo binario.


Por tanto, la unidad mínima de información puede tomar uno entre dos valores distintos, y se llama
bit, bitio o dígito binario (binary digit). Un bit puede valer 0 ó 1, y a veces se asocia a los valores
lógicos falso (0) y verdadero (1).
Con un bit tenemos muy poca potencia expresiva, y para representar conceptos más complejos se
asocian en grupos de mayor tamaño. Un grupo de cuatro bits se denomina cuarteto o nibble. Un
grupo de 8 bits se denomina octeto.
Un tamaño importante es el número de bits que se utiliza para codificar un carácter alfanumérico. A
este concepto se le denomina byte, o, simplemente, carácter. En los sistemas de codificación ASCII
extendidos, un byte ocupaba 8 bits. Por ello, actualmente se suele utilizar como sinónimo de octeto.
A la precisión básica del computador se le denomina palabra. El ancho de palabra de un
computador es el tamaño tamaño de referencia del mismo, y constituye la máxima cantidad de
información accesible y tratable en paralelo por sus unidades. Se mide en múltiplos de byte.
Para representar grandes cantidades de información se utilizan multiplicadores de tamaño.
Tradicionalmente se han usado los multiplicadores propios del sistema métrico decimal (kilo, mega,
giga, etc). Pero como la información en un computador es binaria, el factor de escala no es 1.000,
sino 210, que es la potencia de 2 más cercana a 1.000. Así, 1K (kilo) = 210 = 1024, 1M (mega) = 220 =
1.048.576, 1G (giga) = 230 = 1.073.741.824, 1T (tera) = 240, 1P (peta) = 250, 1E (exa (E) = 260, etc.
Para evitar confusiones, con posterioridad se ha incorporado una nueva terminología que distingue el
uso de las potencias de 2 frente a las de 10. Así, cuando se emplean potencias de 2 usan como
prefijos kibi (KiB), mebi (MiB), gibi (GiB), etc.

8
Introducción
Sincronización mediante la señal de reloj

• Reloj (clock, CLK): señal que varía periódicamente de forma infinita.


• Ciclo de reloj o periodo de reloj (T): tiempo de una oscilación
completa.
• Frecuencia de reloj (f): número de ciclos de reloj por segundo.
 Se mide en hercios (Hz).
 f = 1 / T.
• Ciclo de trabajo (duty cycle): tiempo en nivel alto.
Pulso de Pulso de
Flanco de nivel alto nivel bajo
bajada
Nivel alto

Clk
Nivel bajo
Flanco de
subida Ciclo de reloj Ciclo de reloj
(medido entre dos (medido entre dos
flancos de subida) flancos de bajada)

La señal de reloj (clock, CLK) es una señal binaria que varía periódicamente de forma infinita.
El flanco de subida de la señal se produce cuando el nivel cambia de bajo a alto, y el flanco de
bajada es cuando el cambio es de nivel alto a nivel bajo.
El ciclo de reloj (o periodo de reloj) es el tiempo que dura una oscilación completa, y se mide por
el tiempo transcurrido entre dos flancos seguidos del mismo tipo.
La frecuencia de reloj indica el número de ciclos de reloj que se producen en una unidad de
tiempo, y se mide en hercios (Hz, ciclos por segundo).
De acuerdo con la terminología procedente del campo de tratamiento de señales, se denomina ciclo
de trabajo (duty cycle) al porcentaje de tiempo en el que una señal permanece en estado activo.
Consideraremos que el estado activo corresponde con el nivel alto. Si el ciclo de trabajo del reloj es
del 50%, se produce un flanco en cada semiciclo de reloj.
Todos los sistemas secuenciales síncronos cuentan con una o varias señales de reloj, que se utilizan
para sincronizar a todas las demás señales del sistema.

9
Índice

1. Introducción.
2. Visión simplificada de un computador.
3. Unidades funcionales de los computadores digitales.
4. Conceptos básicos sobre sistemas operativos.
5. Niveles de estudio de los computadores.
6. Medidas de rendimiento.

Aquí, se muestra una visión simplificada de un computador desde el punto de vista del software que
es capaz de ejecutar. Se introduce la distinción entre lenguajes de alto nivel y de bajo nivel, así como
el concepto de traducción.

Bibliografía: [PAT] capítulo 1.

10
Visión simplificada de un computador

Un computador es una máquina que ejecuta


programas que permiten aprovechar la capacidad at ions soft wa
plic
de proceso de su circuitería. Ap
re

• Programas de sistema. ms softwa


st e
• Programas de aplicación.

Sy

re
Hardware
Software

Applications Systems
software software

laTEX
Compilers Operating Assemblers
systems

gcc as

Virtual File I/O device


memory system drivers

Un computador actual es un sistema digital destinado a una única tarea: ejecutar programas.
Los programas de computador se dividen en dos categorías:
• Programas de aplicación: sirven para que los usuarios puedan utilizar los computadores
sin tener que preocuparse de su estructura interna. Este tipo de programas realizan tareas
complejas como procesar texto, editar o reproducir contenidos multimedia, etc.
• El software de sistema: está compuesto por una serie de programas que proporcionan
servicios útiles para explotar las capacidades de cálculo de los computadores. Actúan como
interfaz entre los programas de aplicación y la circuitería, y dentro de esta categoría nos
encontramos con el sistema operativo, los compiladores, los editores de texto, etc.

11
Visión simplificada de un computador
High-level swap(int v[], int k)
language {int temp;
La programación en lenguaje program
(in C)
temp = v[k];
v[k] = v[k+1];
ensamblador es un tanto tediosa  v[k+1] = temp;
}
LENGUAJES DE ALTO NIVEL.

C compiler

Assembly swap:
Los humanos preferimos los lenguajes language
program
muli $2, $5,4
add $2, $4,$2
simbólicos  LENGUAJE (for MIPS) lw $15, 0($2)
lw $16, 4($2)
ENSAMBLADOR. sw $16, 0($2)
sw $15, 4($2)
jr $31

Assembler

Binary machine 00000000101000010000000000011000


La circuitería de un computador sólo language 00000000100011100001100000100001
program 10001100011000100000000000000000
es capaz de comprender y manejar (for MIPS) 10001100111100100000000000000100
señales binarias  LENGUAJE 10101100111100100000000000000000
10101100011000100000000000000100
MÁQUINA. 00000011111000000000000000001000

El único lenguaje comprensible para la circuitería del computador es el lenguaje máquina. El código
máquina está formado por instrucciones que realizan tareas simples (copiar información, sumar o
restar dos cantidades numéricas, etc) codificadas en binario mediante secuencias de ceros y unos. La
programación en lenguaje máquina es muy tediosa y poco productiva para programadores humanos.
Para facilitar la escritura de programas surgieron los lenguajes de ensamble (habitualmente
denominados lenguajes ensambladores), que son lenguajes simbólicos que codifican las
instrucciones mediante nemotécnicos y permiten dar nombres a los datos. Hay una correspondencia
directa entre cada instrucción en ensamblador y la correspondiente instrucción en lenguaje máquina.
Los lenguajes máquina y ensambladores son lenguajes de bajo nivel, porque se encuentran
íntimamente ligados a la arquitectura de la máquina, y no pueden transportarse entre computadores
no compatibles entre sí.
Enfrente tenemos los lenguajes de alto nivel, que facilitan la tarea de los programadores, pues su
sintaxis es más próxima a la forma de pensar de los humanos. Son lenguajes simbólicos que permiten
realizar un control estructurado del flujo de ejecución de las operaciones del programa, así como
definir y utilizar diferentes tipos de datos. La programación en lenguajes de alto nivel es mucho más
productiva, ya que se dispone de una mayor potencia expresiva y los programas tienen menos líneas
de código. Hoy en día la práctica totalidad de los programadores trabaja con lenguajes de alto nivel.
Para ejecutar un programa no escrito en código máquina hay que realizar una traducción previa
mediante un programa traductor. Existen tres tipos de traductores:
• Ensambladores (assemblers): traducen programas escritos en lenguaje ensamblador a
código máquina, generando un fichero con código objeto.
• Compiladores: traducen programas escritos en lenguajes de alto nivel a lenguaje de bajo
nivel, generando un fichero con código ensamblador o código objeto.
• Intérpretes: traducen programas en alto nivel a bajo nivel, intercalando la traducción del
código fuente con la ejecución de las instrucciones de máquina que van generando.
12
Índice

1. Introducción.
2. Visión simplificada de un computador.
3. Unidades funcionales de los computadores digitales.
4. Conceptos básicos sobre sistemas operativos.
5. Niveles de estudio de los computadores.
6. Medidas de rendimiento.

En este apartado se recuerdan cuáles son las unidades funcionales que conforman el modelo clásico
de computador, y se describen los elementos básicos que componen las distintas unidades funcionales
de un computador sencillo. También se describe someramente la operación de un computador
sencillo.

El computador ejecuta programas, que se componen de secuencias de instrucciones y de datos que


residen en memoria principal. La ejecución de un programa consiste sencillamente en la ejecución de
la secuencia de instrucciones máquina que lo componen. La ejecución de una instrucción (ciclo de
instrucción) se estructura en una serie de fases, cada una de las cuales a su vez se divide en una
secuencia de microinstrucciones u operaciones elementales en el computador.

Bibliografía: [CER] capítulos 1 y 7 - [PRI] capítulos 1 y 7 - [PAT] capítulo 1 y apéndice C - [DMI] –


[STA]

13
Unidades funcionales de los computadores
Periféricos
MICROPROCESADOR:
UCP completa en un único chip
Exterior
Computador

CPU

UNIDAD
UNIDAD DE
MEMORIA ENTRADA /
ARITMÉTICO -
LÓGICA
CONTROL PRINCIPAL SALIDA

Bus de control

Bus de datos

Bus de direcciones

En 1945, John Von Neumann publicó un borrador de un informe describiendo las unidades funcionales
que conformaran un computador de programa almacenado (“arquitectura Von Neumann”):
1. Unidad de control. Se encarga de generar las señales necesarias (señales de control)
para activar los restantes elementos del computador para que lleven a cabo ordenadamente
las operaciones necesarias para ejecutar las instrucciones de los programas.
2. Unidad de proceso. Realiza las operaciones de proceso, que pueden ser cálculos de tipo
aritmético (suma, resta) o lógico (OR, AND y NOT bit a bit).
3. Unidad de memoria (memoria principal o memoria central). Es la parte del
computador que se usa para almacenar (grabar, escribir) y después recuperar (leer) los
datos e instrucciones que conforman los programas.
4. Unidad de entrada. A través de ella se conectan los dispositivos externos utilizados para
introducir información en el computador (periféricos de entrada).
5. Unidad de salida. A través de ella se conectan los dispositivos externos utilizados para
presentar los resultados calculados por los programas.
6. Unidad de interconexión. Está formada por todos los enlaces que conectan las distintas
unidades del computador.
En la actualidad se habla únicamente de 4 unidades: la unidad central de proceso (UCP) o
procesador (formada por el conjunto unidad de control + unidad de proceso), la memoria
principal (contiene el programa que está en ejecución, incluyendo sus instrucciones y sus datos), la
unidad de entrada/salida (E/S) (conecta el computador con los periféricos y con las líneas de
comunicaciones con el exterior) y los buses (que interconectan los distintos componentes
estructurales que forman el computador).

14
Instrucciones en el computador

• El computador ejecuta programas escritos en código máquina.

• Programas en código máquina: secuencias de instrucciones


codificadas en binario almacenadas en memoria principal junto con
sus datos.

• Instrucción = operación + operandos fuente + operandos destino.


– Operaciones sencillas (mover dato, sumar, restar, etc).
– Datos en memoria principal o registros de la UCP.

• La circuitería del computador es capaz de:


– Localizar y acceder a los datos involucrados en la instrucción.
– Ejecutar la operación indicada en la instrucción.
– Localizar y leer la siguiente instrucción de la secuencia.

Como ya se ha indicado, los computadores sólo saben ejecutar instrucciones que forman parte de un
programa que está almacenado en memoria principal. Estas instrucciones están codificadas en
binario, y se van ejecutando en secuencia una detrás de otra.
Las instrucciones constan de:
• Un código de operación indicando la instrucción que queremos realizar.
• Uno o varios operandos fuente, que indican la ubicación de los datos de entrada que
vamos a utilizar para realizar la operación.
• Un operando destino, que indica la ubicación en la que se va a guardar el resultado
obtenido tras realizar la operación.
Las operaciones realizadas son bastante sencillas, y consisten en copiar información desde un
operando fuente hasta un operando destino, sumar o restar dos operandos fuente y un operando
destino, etc.
Los operandos de las instrucciones se ubican físicamente en elementos hardware tales como la
memoria principal o ciertos registros que se encuentran en la UCP. Estos registros permiten un
acceso rápido a datos que consideraremos como temporales, y aceleran la ejecución de las
instrucciones.
La circuitería del computador está diseñada para ejecutar programas, y se encarga de:
• Localizar y acceder a los datos involucrados en la instrucción.
• Ejecutar la operación indicada en la instrucción.
• Localizar y leer la siguiente instrucción de la secuencia, y a continuación interpretarla.
Todo ello lo realiza el computador mediante la acción coordinada de sus componentes estructurales y
bajo el gobierno de la unidad de control.

15
Elementos del computador
Memoria principal

• Memoria principal, memoria interna o


RAM: contiene el programa en ejecución
con sus datos.
 Formada por posiciones de memoria.
 Dirección de memoria: identifica cada
posición.
 Contenido: información almacenada.
• Unidad direccionable: unidad mínima con
dirección propia.
• Palabra de memoria: información
accedida en cada lectura o escritura.
• Capacidad de almacenamiento de la memoria RAM: unos pocos GBs.
• Tiempo de acceso a la memoria
 Tiempo consumido en acceder al contenido de una palabra de memoria.
 Puede ser distinto para lectura y escritura.
 Se mide en fracciones de segundo.
 Tiempo de acceso de la RAM: del orden de varios nanosegundos (ns): 1ns = 10-9 s.
• La RAM es lenta en relación a la velocidad del procesador.

La memoria principal del computador (también llamada memoria central o memoria interna)
contiene las instrucciones y los datos de los programas que se encuentran en ejecución en un
momento dado. Está compuesta por un gran número de posiciones de memoria, cada una de las
cuales puede almacenar una información binaria de una cierta anchura. El ancho mínimo típico de una
posición de memoria es de 8 bits.
Cada posición de memoria tiene asociados:
• Una dirección de memoria, que es una cantidad numérica fija en binario puro (positiva)
que identifica a la posición de memoria a la que se pretende acceder. Cada posición de
memoria tiene su propia dirección, que es distinta de las direcciones de las demás.
• Un contenido de memoria, que es la información binaria almacenada, y que puede ser
leída o modificada a voluntad mediante la ejecución de instrucciones.
Se denomina unidad direccionable de memoria a la unidad de tamaño mínimo con dirección
propia. Normalmente, la unidad direccionable en las memorias principales es el octeto o byte. Por otra
parte, la palabra de memoria es la información accedida en cada operación de lectura o escritura.
El ancho de palabra de memoria es de una o varias posiciones de memoria, que se encontrarán
en direcciones consecutivas.
La memoria principal de los computadores actuales se denomina RAM (random access memory,
memoria de acceso aleatorio), y tiene una capacidad de almacenamiento del orden de unos
pocos Gbytes. La RAM es volátil, es decir, su contenido se pierde cuando se interrumpe la
alimentación del circuito. También suele haber una pequeña parte no volátil denominada ROM (read
only memory, memoria de sólo lectura).
El tiempo de acceso a memoria es el tiempo consumido en acceder al contenido de una palabra
de la misma. Los tiempos de acceso para lectura y escritura pueden ser diferentes, y se miden en
fracciones de segundo. Actualmente el tiempo de acceso a las memorias RAM es del orden de
nanosegundos (ns: 1ns = 10-9 s), siendo mucho más lento que la frecuencia de reloj del procesador.
16
Elementos del computador: UCP
Registros

• La memoria principal del computador es grande, y el acceso a la información


que contiene es lento en relación a la velocidad de funcionamiento de la UCP.
 Frecuencia de trabajo del procesador: frecuencia del reloj de la UCP.
 Los microprocesadores modernos tienen frecuencias de varios GHz.
 Si frecuencia=1 GHz  tiempo de ciclo=1 ns.

• Para acceder más rápidamente a los operandos de las instrucciones, los datos
residentes en memoria se copian en registros de la UCP.
 Registro: conjunto de biestables que funcionan al unísono compartiendo las
señales de control y el reloj.
 Los registros están ubicados dentro de la UCP.
 El acceso a un registro es muy rápido.

• Tipos de registros:
 Registros de propósito general (GPR): agrupados en bancos.
 Registros de propósito específico: PC, IR, etc.

PC IR

Las instrucciones y los datos de los programas residen en RAM. Por tanto, al ejecutar un programa se
accede muchas veces a la RAM, que es lenta en relación a la velocidad del procesador. Para acelerar
la ejecución de las instrucciones, los datos se pueden ubicar en los registros de la UCP. El acceso a
los registros es muy rápido, ya que están formados por biestables. Los registros de la UCP que
pueden ser de dos tipos: registros de propósito general (GPR, general purpose registers) y
registros de propósito específico (SPR, specific purpose registers).
Cada GPR puede contener un dato o una dirección, y son visibles para los programadores de bajo
nivel, que los usan como operandos de las instrucciones. Los GPR se agrupan en bancos de
registros de entre 8 y 128 registros. En lenguaje máquina, cada registro del banco se identifica
mediante un código binario que coincide con el ordinal del registro (00…0, 00…01, etc), mientras que
en lenguaje ensamblador, a cada registro le corresponde un nombre simbólico ($0, $1, etc).
Los SPR tienen funciones concretas. Suelen ser transparentes (no visibles) para el programador,
que no puede usarlos como operandos en las instrucciones. Los más comunes son:
• Contador de programa (PC, program counter): puntero que contiene la dirección de
la próxima instrucción del programa.
• Registro de instrucción (IR, instruction register): contiene los bits de la instrucción
que se encuentra actualmente en proceso de ejecución.
• Registro de estado (PSW, program status word, o SR, status register): contiene
información acerca de la situación actual del procesador y del último resultado obtenido en
la UAL (flags).
• Registro de direcciones de memoria (MAR, memory address register): contiene la
dirección de memoria a la que se va a acceder para leer o escribir.
• Registro de datos de memoria (MDR, memory data register, o MBR, memory
buffer register): contiene la información que acabamos de leer en memoria o que vamos a
escribir en memoria.
17
Elementos del computador: UCP
Circuitos de cálculo y camino de datos

• Operadores: realizan las operaciones aritméticas, lógicas, etc.


 Operadores de propósito específico: una única operación.
 Operadores de propósito general: pueden realizar varias operaciones.
 UNIDAD ARITMÉTICO-LÓGICA (UAL o ALU, arithmetic and logic
unit): operador de propósito general existente en todos los computadores.

Camino de datos
(ruta de datos):
elementos de cálculo +
registros +
elementos de interconexión.

La unidad de proceso contiene una serie de circuitos de cálculo (operadores) que realizan las
operaciones aritméticas, lógicas, desplazamientos, rotaciones, etc., requeridas para ejecutar las
instrucciones de los programas. Los operadores reciben uno o varios operandos fuente, y
proporcionan un resultado. Podemos hablar de operadores de dos tipos:
• Operadores de propósito específico: realizan una única operación. Ejemplos:
sumadores, restadores, desplazadores, etc.
• Operadores de propósito general: son capaces de llevar a cabo varias operaciones.
Incorporan unas entradas de control que permiten seleccionar la operación.
La UNIDAD ARITMÉTICO-LÓGICA (UAL o ALU, arithmetic and logic unit) es un operador de
propósito general existente en todos los computadores, y realiza las operaciones más básicas (suma,
resta, operaciones lógicas, comparaciones, etc) utilizando operandos representados en coma fija
(binario puro o complemento a 2). Además, el computador suele contar con operadores de
propósito específico que realizan otras operaciones, tales como desplazadores, incrementadores, etc.,
también con operandos en coma fija.
Los computadores actuales cuentan además con operadores que trabajan con datos expresados en
notación científica binaria (coma flotante). Por razones históricas, estos circuitos se denominan
coprocesadores de coma flotante. Estos circuitos no se encuentran incluidos en la UAL porque
son mucho más complejos que ella, y realizan sumas, restas, productos, divisiones, raíces cuadradas
y otras operaciones más complejas (trigonométricas, logaritmos, exponenciales, etc).
Los operadores tienen asociados registros de propósito general o específico en los que residen los
operandos fuente y donde se graban los resultados. El circuito formado por los operadores, los
registros y los elementos que los interconectan recibe el nombre de camino de datos o ruta de
datos del computador.

18
Elementos del computador: UCP
Unidad de control

• La unidad de control (UC) es la unidad funcional que organiza y


coordina a los restantes elementos del computador.
 Para ello utiliza las señales de control.
 La UC es parte de la UCP (UCP = UC + camino de datos interno con
registros, UAL, operadores adicionales, multiplexores y enlaces).
IR

Señales de control
internas para la CPU
Bus de control

Indicadores de estado
Señales de control
hacia el bus Unidad de
Señales de control
control
desde el bus Reloj (Clk)

La unidad de control (UC) es la unidad funcional que gobierna y coordina a las demás unidades
funcionales del computador. Esta tarea la realiza mediante la activación en instantes determinados de
una serie de señales de control, que indican a los restantes elementos del computador cuándo
deben actuar y qué operación deben realizar.
La unidad de control dirige y temporiza la ejecución de los programas instrucción por instrucción. Para
ejecutar cada instrucción, la unidad de control lleva a cabo una secuencia ordenada de pasos que
componen el ciclo de instrucción.
La primera etapa del ciclo de instrucción consiste en la etapa de lectura de la instrucción (fetch)
que inicialmente se encuentra almacenada en memoria principal.
Una vez leída una instrucción, la unidad de control la interpreta o decodifica (decode) para saber qué
instrucción es y qué señales de control tiene que generar. Dependiendo de cómo se haya realizado el
diseño, a partir de ahora la instrucción puede tardar varios ciclos de reloj en completarse, y la unidad
de control irá generando las señales pertinentes en el instante adecuado.
A continuación, es preciso leer los operandos fuente, que pueden encontrarse en registros o en
memoria.
Una vez leídos los operandos fuente, se puede proceder a la fase de ejecución de la instrucción
propiamente dicha, consistente en realizar la operación requerida mediante los circuitos de cálculo.
Cuando el cálculo se ha realizado, se procede a su escritura en el operando destino.
La unidad de control también debe ocuparse de atender a los dispositivos periféricos y de resolver
situaciones particulares derivadas de la ejecución de las instrucciones (por ejemplo, cuando se realiza
una división y el divisor vale 0, o cuando hay desbordamiento en alguna operación aritmética).
Después, la unidad de control genera un acceso a memoria para buscar la siguiente instrucción del
programa, y de este modo el ciclo de instrucción se repite una y otra vez de forma indefinida.
19
Elementos del computador
Entrada / salida y periféricos

Periféricos
Dirección

Control
Datos

• Sistema de entrada / salida (E/S): se encarga de conectar la UCP


con una gran variedad de dispositivos periféricos.

• Módulo de E/S o controlador de E/S: interfaz entre los dispositivos


y el computador.

Los periféricos son dispositivos de muy diversa naturaleza que permiten al computador comunicarse
con el mundo exterior. Sin los periféricos, el computador no tendría utilidad práctica, ya que no podría
comunicar los resultados de sus cálculos, y, por tanto, no serviría de nada el proceso realizado.
Existen tres tipos de periféricos:
• Periféricos de entrada: se emplean para introducir datos al computador.
• Periféricos de salida: sirven para que el computador comunique datos al exterior.
• Periféricos de entrada/salida: sirven para ambas cosas.
Los periféricos definen el tipo de computador ante el que nos encontramos (servidor, PC de
sobremesa, tablet, etc), ya que establecen las vías de intercambio de información entre el
computador y su entorno, así como el modo en que puede ser utilizado.
Dado que los périféricos son muy variados, los computadores cuentan con módulos de E/S,
controladores de E/S o procesadores de E/S, que actúan como interfaz entre el dispositivo
propiamente dicho y el computador. Estos elementos son necesarios debido a lo siguiente:
• La gran variedad de periféricos hace inviable que la CPU pueda entender a todos.
• La velocidad de operación de los periféricos y la CPU y la memoria es muy distinta, y no es
razonable adaptar el bus a la velocidad del elemento más lento.
Cada módulo de E/S sirve como interfaz con uno o varios periféricos de un cierto tipo a través de
enlaces dedicados de datos, y se comunica con el resto del sistema a través de buses. Los
módulos de E/S cuentan con una o varias direcciones que permiten a la UCP identificarlos y así
acceder a los periféricos que tiene conectados.

20
Elementos del computador
Buses

UCP MEM MEM E/S E/S

Control
Buses

Datos

Dirección

• Enlace: permite transmitir información entre dos o más elementos.


 Enlaces dedicados y enlaces compartidos (buses).
• Uso de los buses:
 Bus de datos, bus de direcciones y bus de control.
 Bus multiplexado.
 Bus del sistema: conjunto de los tres.
• Anchura de los buses:
 Bus paralelo y bus serie.
• Sincronismo de los buses:
 Bus síncrono bus asíncrono.

Los enlaces son caminos que permiten transmitir información entre dos ó más elementos. Podemos
tener enlaces dedicados, que conectan dos elementos concretos, o buses, que son canales de
comunicación compartidos que pueden conectar múltiples elementos.
Desde el punto de vista de la información transmitida, hay tres tipos de buses:
• Bus de datos: la información que viaja por ellos está formada por datos.
• Bus de direcciones: a través de ellos la unidad de control transmite direcciones de
memoria o de periféricos. En lo tocante a la memoria, el ancho del bus de direcciones da el
tamaño máximo de la memoria principal (m bits de dirección ↔ 2m bytes de tamaño).
• Bus de control: por el viajan las señales de control utilizadas por la unidad de control.
También existen los buses multiplexados, que por sus hilos transmiten a veces direcciones y a
veces datos. Se usan para reducir costes, aunque son más lentos porque no permiten transmitir
direcciones y datos simultáneamente.
En cuando a la anchura de los buses, tenemos:
• Bus paralelo: constan de varios hilos, y por cada uno de ellos se puede transmitir un bit.
• Bus serie: los bits se transmiten por un único hilo uno detrás de otro.
En cuanto al modo de transferencia, nos encontramos con los buses síncronos, que están
gobernados por una señal de reloj, y buses asíncronos, cuyo funcionamiento no depende de ningún
reloj, sino que en ellos la transferencia de los datos está regulada por un protocolo consistente en el
intercambio de ciertas señales preestablecidas entre emisor y receptor.

21
Elementos del computador
Memoria secundaria

• La memoria secundaria o memoria masiva está compuesta por diferentes


dispositivos periféricos de almacenamiento de información de alta capacidad
(gigabytes, terabytes).

• Dispositivos de memoria secundaria más comunes:


 Discos duros.
 Memorias flash.
 Cintas magnéticas.
 CDROM, DVD, Blu-Ray.

• Tiempo de acceso a la memoria secundaria: es muy superior al tiempo de acceso


a la memoria principal o a los registros (miles o millones de veces más lenta).
• Memoria principal: del orden de nanosegundos (1 ns = 10-9 s).
• Discos: del orden de milisegundos (1 ms = 10-3 s) ó microsegundos (1 s = 10-6 s).

La memoria secundaria o memoria masiva es un elemento fundamental en los computadores


actuales, y está compuesta por uno o varios periféricos de almacenamiento empleados para
almacenar grandes cantidades de información.
La tecnología ha permitido construir a lo largo del tiempo múltiples tipos de periféricos de
almacenamiento. Actualmente, los más utilizados son los discos duros, las memorias flash, las
cintas magnéticas y los discos ópticos (CD, DVD, Blu-Ray). Algunos de estos periféricos son
extraíbles (y, por tanto, más lentos) y otros se encuentran integrados dentro de la estructura interna
del computador (y, por ello, son más rápidos).
La evolución tecnológica ha permitido a lo largo del tiempo mejorar tanto la capacidad de
almacenamiento como el tiempo de acceso a estos tipos de periféricos. Sin embargo, siguen siendo
notablemente más lentos que las memorias internas de los computadores, y, por supuesto, mucho
más lentos que la UCP.

22
Elementos del computador
Funcionamiento

• Un computador ejecuta programas.


• Programa: instrucciones + datos almacenados en memoria principal.
• Ejecutar un programa: ejecutar sus instrucciones en secuencia.
• La ejecución de una instrucción se denomina ciclo de instrucción.
• Fases del ciclo de instrucción: formadas por una o varias operaciones
básicas.
1. Lectura: leer la instrucción (que está en memoria).
2. Decodificación: interpretar la instrucción.
3. Ejecución: llevar a cabo los pasos que requiere
4. Ciclo de interrupción: revisar si algún periférico precisa atención por parte de la UCP.
• Una operación básica típicamente dura un ciclo de reloj.
 Algunas operaciones básicas pueden durar unos pocos ciclos.

El computador se dedica exclusivamente a ejecutar programas. Un programa se compone de:


• Una secuencia de instrucciones que se ejecutan una detrás de otra.
• Un conjunto de datos utilizados por las instrucciones para realizar cálculos.
En la arquitectura Von Neumann, un programa se encuentra listo para ser ejecutado cuando sus
instrucciones se encuentran almacenadas consecutivamente en memoria principal junto con sus
datos. Entonces, para ejecutar el programa el computador debe ejecutar sus instrucciones una por
una y en orden (hoy en día existen técnicas que permiten a los computadores ejecutar varias
instrucciones en paralelo e incluso en desorden bajo ciertas condiciones).
La unidad funcional del computador que gobierna y coordina a las demás es la unidad de control
(UC): por tanto, es la UC quien se encarga de organizar la ejecución de las instrucciones
una a una. El ciclo de instrucción es la secuencia de etapas (fases) que genera la UC por cada
instrucción ejecutada. Las fases del ciclo de instrucción están formadas por varias operaciones
básicas, cada una de las cuales puede durar uno o varios ciclos, y que son las siguientes:
1. Lectura de la instrucción (fetch): la instrucción se encuentra en memoria y conocemos
su dirección porque está contenida en el PC; hay que leer la instrucción y cargarla en el IR,
que se encuentra asociado a la UC.
2. Decodificación (decode): la UC toma la instrucción cargada en el IR y averigua cuál es a
partir de su codificación en binario.
3. Ejecución (execution): la UC genera las señales de control necesarias para coordinar a las
restantes unidades funcionales con objeto de realizar las acciones necesarias para ejecutar
la instrucción (incluye la lectura de operandos fuente, posiblemente la realización de un
cálculo, y el almacenamiento del resultado).
4. Ciclo de interrupción (interrupt cycle): la UC comprueba si algún periférico tiene
necesidad de ser atendido, lo cual avisa generando una interrupción, que finalmente
desencadenará la ejecución de una rutina de tratamiento de la interrupción (RTI).
23
Índice

1. Introducción.
2. Visión simplificada de un computador.
3. Unidades funcionales de los computadores digitales.
4. Conceptos básicos sobre sistemas operativos.
5. Niveles de estudio de los computadores.
6. Medidas de rendimiento.

En este apartado se presentan algunos conceptos sobre sistemas operativos. No se pretende realizar
un estudio en profundidad de los mismos, sino introducir conceptos que resultarán necesarios a lo
largo del desarrollo de la asignatura. En particular, se hace algo más de énfasis en el concepto de
proceso, y en los servicios ofrecidos por el sistema operativo a los programas de usuario.

Para terminar, se describen los pasos que se llevan a cabo al arrancar el computador.

Bibliografía: [PRI] capítulo 13 - [DMI] capítulos 7, 14 y 15.

24
Conceptos básicos sobre sistemas operativos
Definición y funciones

• Sistema operativo (SO): programa que hace de intermediario entre


los programas de usuario y el hardware del computador.
• Funciones del SO:
 Comunicación con los periféricos.
 Administración de recursos.
 Coordinación de procesos simultáneos (multitarea).
 Gestión de memoria.
 Gestión de programas y datos.
 Gestión de comunicaciones y redes.
• Recursos hardware del SO:
 Niveles de protección: nivel privilegiado o núcleo frente a nivel de
usuario.
 Recursos específicos para a programas con modo de ejecución
privilegiado: instrucciones privilegiadas, registros especiales, etc.
• Proceso: programa en ejecución.
 Código máquina del programa, datos, contenido de los registros, pila,
estructuras del SO asociadas, memoria asignada, etc.
• Monoprogramación frente a multiprogramación.

El sistema operativo (SO) es un programa que actúa como intermediario entre el usuario y los
programas que ejecuta, por un lado, y el hardware, por otro. El SO tiene como objetivos ejecutar los
programas de usuario, hacer que el computador sea cómo de usar y gestionar y aprovechar los
recursos del computador de forma eficiente.
Entre las funciones del SO se cuentan facilitar el uso del computador y la comunicación con el
usuario, facilita a los programadores la utilización de los recursos hardware desde sus propios
programas, administrar los recursos hardware (UCP, memoria y periféricos). gestionar el intercambio
de información entre la UCP y los periféricos, establecer mecanismos de protección de los recursos,
gestionar las comunicaciones por red, etc.
Para ello, el hardware debe proporcionar ciertos mecanismos que faciliten al SO su labor. Para
empezar, deben existir niveles de protección a la hora de ejecutar los programas. Existe un modo
privilegiado o núcleo, y otro para el nivel de usuario. Cuando un programa ejecuta en modo
privilegiado, tiene acceso privativo a diferentes recursos no disponibles para los programas que
ejecutan en modo usuario, y que facilitan al SO la realización de sus tareas de administración y
gestión. Entre esos recursos privilegiados tenemos instrucciones privilegiadas, registros especiales,
circuitos especiales de gestión de memoria y entrada/salida, tablas, buffers, etc.
El SO no habla de programas, sino de procesos. Un proceso es un programa en ejecución, y está
formado por las instrucciones y datos del programa, el contenido de los registros, la pila (asociada
con la ejecución de subprogramas), el heap (espacio para memoria dinámica), y las estructuras
asociadas al proceso mantenidas por el propio SO (el bloque de control de procesos o PCB).
Hay dos tipos de SO:
• SO monoprogramados: en ellos el SO sólo permite la ejecución de un proceso, y hasta
que termina no puede comenzar la ejecución de otro.
• SO multiprogramados o multitarea: cuando permite la ejecución “simultánea” de varios
procesos, repartiendo el tiempo de UCP y el espacio de memoria entre ellos.
25
Conceptos básicos sobre sistemas operativos
Gestión de memoria y E/S

• El SO reparte la memoria principal entre los procesos.


 Mecanismos de protección y compartición de memoria.
• Memoria virtual: proporciona a cada proceso la ilusión de
que tiene la memoria del sistema toda para él.
 Gestionada por el SO.
 Soportada por dispositivos de memoria secundaria (discos duros).
• El SO tiene acceso exclusivo a los periféricos.
• El SO ofrece servicios a los programas de usuario para:
 Acceder a periféricos.
 Solicitar espacio para memoria dinámica.
 Conocer la fecha y la hora actuales.
 Etc.
• Llamada a un servicio del SO: instrucción syscall.

El SO se encarga de gestionar el espacio de memoria principal y de repartirla entre los distintos


procesos, estableciendo mecanismos de protección para que unos procesos no accedan a zonas de
memoria asignadas a otros procesos, interfiriendo así en su ejecución. El SO también establece
mecanismos de compartición de memoria entre varios procesos en el caso de que éstos lo soliciten de
forma explícita.
La mayoría de los SSOO cuentan con un mecanismo de memoria virtual, consistente en separar los
espacios de memoria de los procesos de forma que cada proceso crea que dispone de acceso a una
cantidad de memoria RAM mayor que la que realmente tiene asignada. Con la técnica de memoria
virtual, cada proceso actúa como si tuviese para sí la máxima cantidad de memoria que puede
direccionar, lo cual implica incluso que se puede poner a disposición del proceso un espacio de
memoria más grande que la memoria física. En realidad, existe una zona de almacenamiento en
memoria secundaria (zona de swap, residente en disco duro) que contiene la copia real de la
memoria de los procesos en ejecución. Sin embargo, en un momento dado, en RAM sólo están las
partes de las instrucciones y los datos que los procesos están utilizando.
El acceso a los periféricos es exclusivo del SO. Los programas de usuario no pueden acceder
directamente a los periféricos, pero sin embargo habitualmente sí necesitarán utilizarlos, ya que su
ejecución puede implicar tareas como leer o escribir archivos residentes en disco, acceder al teclado o
a la pantalla, imprimir documentos, usar dispositivos multimedia, conectarse con otros computadores
a través de una red, etc. Para que los programas de usuario puedan realizar estas tareas, el SO ofrece
un catálogo de servicios que los programas no privilegiados pueden invocar a través de una
instrucción específica (trap, syscall, etc). Cuando un programa de usuario utiliza alguna de estas
instrucciones se dice que realiza una llamada al sistema. El SO recoge la llamada, realiza las
operaciones necesarias con el periférico en cuestión, y devuelve el resultado de la operación al
programa de usuario. El SO también ofrece servicios que no implican el acceso a periféricos, como
por ejemplo pedir espacio para memoria dinámica, solicitar la fecha y la hora actual, etc.
26
Arranque del computador

• Memoria y registros actuales: tecnología de semiconductores


(volátil).
 Al arrancar el computador, la RAM y el PC contienen basura.
• Solución
 Generar reset que inicie RAM y registros (PC, PSW, etc).
 Arrancar en modo núcleo (PSW).
 NOP: instrucción con todos sus bits a 0.
 PC inicial apunta a ROM con programa cargador que trae el SO desde
el disco.
 A partir de ahí el SO se encarga de todo.
• Monitor ROM: especie de SO rudimentario propio de sistemas
empotrados sencillos.

Los circuitos fabricados con semiconductores son volátiles. Por ello, al encender el computador los
registros y la memoria quedan con un valor indeterminado (“basura”). Entonces, si el computador se
pone a ejecutar instrucciones a partir del lugar apuntado por el PC, las consecuencias serán
impredecibles. Como el primer programa que se debe cargar en memoria es el sistema operativo, que
se encuentra en una unidad de almacenamiento (disco, flash, etc), lo primero que hay que hacer al
arrancar es buscarlo y cargarlo en memoria. Por tanto:
• Al encender el computador, es preciso generar una señal de reset que proporcione un valor
determinado a la memoria y los registros, y entre ellos al PC y al PSW.
• El procesador arrancará en modo de ejecución privilegiado o núcleo, lo cual se consigue
poniendo un valor adecuado en el PSW.
• Al diseñar el procesador, se establecerá que el código binario de instrucción con todos sus
bits a 0 corresponde con la instrucción NOP (No Operation), cuya ejecución es inocua.
• El PC inicialmente apuntará a una zona de memoria ROM no volátil que contenga un
programa cargador (bootstrap) sencillo que realizaría un test del computador, y cargaría en
memoria principal el código del SO, trayéndolo desde una unidad de almacenamiento
auxiliar.
Una vez cargado el SO, éste toma el control del computador, inicia los procesos y tareas necesarios y
queda a la espera de arrancar los procesos que el usuario especifique.
En los sistemas sencillos que no tienen SO (como por ejemplo muchos sistemas empotrados), a
menudo el programa que arranca el computador no es un cargador, sino un monitor ROM. Este
monitor ROM ofrece servicios básicos similares a los del SO, pero más rudimentarios, y se encarga de
cargar información en memoria principal, visualizar y modificar sus contenidos, iniciar la ejecución de
instrucciones a partir de una posición determinada, transmitir y recibir información a través de un
puerto de comunicaciones, ofrecer funcionalidades para desarrollar programas (ensamblaje y
desensamblaje, ejecución paso a paso, establecimiento de puntos de ruptura, visualización y
modificación de los registros y la memoria), etc.
27
Índice

1. Introducción.
2. Visión simplificada de un computador.
3. Unidades funcionales de los computadores digitales.
4. Conceptos básicos sobre sistemas operativos.
5. Niveles de estudio de los computadores.
6. Medidas de rendimiento.

En este apartado se presenta una descomposición de los computadores en niveles de estudio. Esta
descomposición en niveles es útil a la hora de abordar el estudio de un computador desde diferentes
puntos de vista, con objeto de cubrir plenamente todos los aspectos relacionados con el mismo.
También se introduce el concepto de arquitectura del repertorio de instrucciones,
absolutamente básico a lo largo de toda la asignatura.

Bibliografía: [CER] capítulo 2 - [PRI] capítulo 1.

28
Niveles de estudio de los computadores
Usuarios y programas de aplicaciones

Nivel de máquina simbólica


(compiladores, editores, intérprete de LC)

Software

Nivel de máquina operativa


(sistema operativo)

Arquitectura

Nivel de máquina convencional


(lenguajes máquina y ensamblador)

Nivel de micromáquina
(microprogramación)

Hardware

Tecnología Nivel de lógica digital

Nivel de dispositivos y circuitos electrónicos

Los computadores son máquinas complejas, lo cual aconseja abordar su diseño y su estudio desde
varios niveles de abstracción jerárquicos. Cada nivel ofrece al nivel inmediatamente superior un
conjunto de primitivas que conforman un modelo sencillo que oculta la complejidad de los detalles, y
se apoya en las primitivas ofrecidas por el nivel inmediatamente inferior.
El estudio de los computadores se puede realizar de arriba a abajo, comenzando con el sistema
como un todo y estudiando cada una de sus partes, o de abajo a arriba, empezando por las
componentes más básicas hacia las partes más complejas.
Analizando el computador de abajo a arriba, nos encontramos con el nivel de dispositivos y
circuitos electrónicos, que se encarga del estudio de los componentes más básicos (resistencias,
condensadores, uniones P-N, transistores, etc). Por encima nos encontramos con el nivel de lógica
digital, que maneja puertas lógicas, biestables y otros dispositivos lógicos que conforman los módulos
básicos del sistema digital que es el computador. El tercer nivel es el nivel de micromáquina o
microprogramación, que se encarga del estudio de la interconexión de los componentes básicos
que forman la ruta de datos del computador. A continuación tenemos el nivel de máquina
convencional, que es el primer nivel visible del computador, puesto que está formado por los
lenguajes máquina y ensamblador. Por encima se encuentra el nivel de máquina operativa, cuyo
principal componente es el sistema operativo, y por último nos encontramos con el nivel de
máquina simbólica, en el cual tenemos los compiladores, los intérpretes, los editores y los
restantes programas básicos del computador. A partir de ahí tenemos al usuario y sus programas de
aplicación, más sofisticados y que permiten la explotación del sistema.
La Arquitectura y Tecnología de Computadores (ATC) es una disciplina que trata sobre todo lo
relacionado con el diseño, fabricación, configuración y explotación de computadores de cualquier tipo,
y engloba todos los niveles anteriormente descritos.

29
Una abstracción fundamental

• Una de las abstracciones más importantes en un computador está


constituida por la interfaz entre la circuitería y el nivel más bajo de
la programación: la ARQUITECTURA DEL REPERTORIO DE
INSTRUCCIONES (ISA: instruction set architecture), también
conocida como la ARQUITECTURA DE LA MÁQUINA.
 Gracias a ella queda oculta la realización (materialización)
concreta de un computador.
• La ISA permite materializaciones distintas (con diferentes
rendimientos y costes) que serán capaces de ejecutar de forma
correcta programas idénticos en código máquina.
• Concepto fundamental: mantener compatibilidad a nivel de
lenguaje máquina entre diferentes realizaciones de una misma
arquitectura.
 Permite amortizar los costes del desarrollo e implantación de
una arquitectura concreta.

De los niveles anteriormente explicados, los tres superiores corresponden con lo que se conoce como
la arquitectura el computador, y los dos inferiores corresponden con su tecnología. El nivel de
micromáquina constituye la frontera entre ambos, y en él se organizan los componentes básicos del
computador de modo que den soporte a los niveles “visibles” de la arquitectura. Por ello, este nivel a
veces es conocido como nivel de organización, y se ocupa de todo aquello que es transparente al
programador, como por ejemplo las señales de control, los interfaces entre computador y periféricos,
la tecnología de memoria, etc.
La arquitectura del computador corresponde con todos aquellos atributos del computador que son
visibles para el programador y que tienen impacto en la ejecución lógica de los programas. Entre ellos
se encuentran el repertorio y el formato de las instrucciones de máquina, el formato de los datos que
utilizan, los mecanismos de entrada/salida, los modos de direccionamiento utilizados para acceder a
los datos, el mapa de memoria, etc.
La ARQUITECTURA DEL REPERTORIO DE INSTRUCCIONES (ISA: instruction set architecture),
también conocida como la ARQUITECTURA DE LA MÁQUINA, constituye una de las abstracciones más
importantes en el computador. La ISA oculta la realización concreta (organización) del computador,
permitiendo materializaciones distintas que serán capaces de ejecutar de forma correcta programas
idénticos en código máquina, de modo que los fabricantes pueden construir familias de
computadores compatibles entre sí, pero que pueden presentar diferentes organizaciones que
proporcionarán distintas prestaciones y tendrán distintos precios.
El concepto de compatibilidad es fundamental en las familias de computadores. El hecho de que
diferentes realizaciones de una misma arquitectura sean compatibles permite amortizar los costes del
desarrollo e implantación de una arquitectura concreta. Las arquitecturas están diseñadas para
sobrevivir durante muchos años, mientras que las materializaciones (la organización) cambian con la
evolución de la tecnología.

30
Índice

1. Introducción.
2. Visión simplificada de un computador.
3. Unidades funcionales de los computadores digitales.
4. Conceptos básicos sobre sistemas operativos.
5. Niveles de estudio de los computadores.
6. Medidas de rendimiento.

En este apartado se realiza una introducción a las medidas para cálculo del rendimiento en los
computadores.
En primer lugar se presenta el concepto de rendimiento desde los puntos de vista del tiempo de
ejecución y de la productividad.
A partir de aquí, el estudio del rendimiento se realiza utilizando el tiempo de ejecución. Se introduce
el concepto de CPI (ciclos por instrucción), recalcando que esta medida se calcula de forma dinámica,
es decir, realizando el recuento de las instrucciones ejecutadas. Este concepto se ilustra con un
ejemplo.
Seguidamente se explican las diferentes alternativas de diseño que pueden utilizarse (alto
rendimiento, bajo coste, equilibrio coste/rendimiento).
A continuación se estudia la ley de Amdahl, que persigue evaluar el impacto en el rendimiento que
supone incorporar una mejora a un diseño existente, y se introduce el concepto de speedup.
Nuevamente se incluye con un ejemplo para aclarar conceptos.
Después se discute sobre los tipos de programas utilizados para medir el rendimiento.
El apartado termina con la introducción de ciertas métricas para comparar el rendimiento de
diferentes máquinas, indicando las ventajas e inconvenientes de su utilización.

Bibliografía: [PAT] capítulo 1.

31
Medidas de rendimiento en los computadores
• Rendimiento como:
– Tiempo de ejecución: velocidad (tiempo) de ejecución.
– Productividad: número de tareas completadas en la unidad de tiempo.
1
• Rendimiento como tiempo de ejecución: 𝑅
𝑇 .

• Tiempo de reloj, tiempo de respuesta o tiempo transcurrido:


tiempo desde que se lanza una tarea hasta que se completa.

• Tiempo de ejecución de UCP o tiempo de ejecución: tiempo


consumido por la UCP en ejecutar el programa.
– Tiempo de ejecución de UCP = Tiempo de ejecución de UCP de usuario +
tiempo de ejecución de UCP del sistema.

• Rendimiento de UCP: recíproco del tiempo de ejecución.


• Comparación de rendimientos: la máquina X es n veces más rápida
que la máquina Y si:
𝑅
𝑛
𝑅

El rendimiento es un concepto fundamental en los computadores. Cuando usamos un computador,


nos interesa que tenga un buen rendimiento a la hora de cumplir con las tareas que ejecutamos en
él. Pero el concepto de rendimiento depende de para qué se esté utilizando el computador.

A menudo cuando se habla de rendimiento nos estamos refiriendo al tiempo que tardan en ejecutarse
los programas, conocido como tiempo de ejecución. Nos interesa que el tiempo de ejecución sea
bajo, en cuyo caso diremos que el computador tiene un rendimiento alto. Así, en este caso, se
entiende como rendimiento al inverso del tiempo de ejecución. El tiempo se puede medir en
ciclos de reloj o en segundos o fracciones de segundo.

El tiempo de reloj, tiempo de respuesta o tiempo transcurrido es el tiempo que tarda en


completarse una tarea, incluyendo operaciones de E/S y del SO. En sistemas multiprogramados,
incluye la ejecución de otros procesos, por lo que depende de la carga de trabajo del sistema. El
tiempo de respuesta es el tiempo que el usuario permanece esperando a que la tarea se realice.

El tiempo de ejecución de UCP, o simplemente tiempo de ejecución, es el tiempo que el


procesador tarda en ejecutar una tarea completa, sin incluir el tiempo de E/S o el tiempo consumido
por otros procesos. Este tiempo se divide en tiempo de UCP de usuario (tiempo consumido por las
instrucciones del proceso) y tiempo de UCP del sistema (tiempo consumido por las tareas
ejecutadas por el SO imputables al proceso concreto).

Otras veces lo que interesa es realizar el máximo número de tareas en un tiempo determinado. En
este caso estamos hablando de productividad, y ésta se calcula como el cociente entre el número
de tareas completadas dividido por el tiempo empleado en ello.

Para comparar el rendimiento de dos máquinas calcularemos el cociente de sus rendimientos. Una
máquina es n veces más rápida que otra si el cociente entre sus rendimientos da como resultado n.
32
Tiempo de ejecución y CPI
• Tiempo de ejecución de UCP para un programa:
𝐶𝑖𝑐𝑙𝑜𝑠 𝑈𝐶𝑃
𝑇𝑖𝑒𝑚𝑝𝑜 𝑈𝐶𝑃 𝐶𝑖𝑐𝑙𝑜𝑠 𝑈𝐶𝑃 𝑃𝑒𝑟𝑖𝑜𝑑𝑜 𝑑𝑒 𝑟𝑒𝑙𝑜𝑗
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑑𝑒 𝑟𝑒𝑙𝑜𝑗

• CPI: ciclos de reloj por instrucción.


• CPIi: número de ciclos de reloj que dura cada instrucción de tipo i.
• Ci: recuento (número) de instrucciones ejecutadas del tipo i.

• Entonces:
𝐶𝑖𝑐𝑙𝑜𝑠 𝑈𝐶𝑃 𝐶𝑃𝐼 𝐶

• CPI medio: media de ciclos de reloj por instrucción.


𝐶𝑖𝑐𝑙𝑜𝑠 𝑈𝐶𝑃
𝐶𝑃𝐼 𝐶𝑃𝐼
𝑁ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑖𝑛𝑠𝑡𝑟𝑢𝑐𝑐𝑖𝑜𝑛𝑒𝑠

El tiempo de ejecución de UCP para un programa se puede obtener multiplicando el número de ciclos
de UCP que consume por la duración del ciclo de reloj.

Por su parte, el número de ciclos de reloj depende de las instrucciones ejecutadas y su duración. Se
dice que el CPI de una instrucción es el número de ciclos de reloj que consumen la totalidad de las
fases que la componen. En general, instrucciones diferentes tendrán CPIs diferentes. El CPI de un
programa se calcula de forma dinámica, es decir, teniendo el cuenta el número de instrucciones
ejecutadas (recuento de instrucciones).

Para un cierto programa se puede calcular su CPI medio, sin más que dividir el número total de
ciclos de UCP entre el número total de instrucciones ejecutadas.

33
Tiempo de ejecución y CPI: ejemplo

Supongamos una máquina con 3 tipos de instrucciones: T1 (5 ciclos),


T2 (4 ciclos) y T3 (2 ciclos). Un programa que se ejecuta en esa
máquina tiene 50 instrucciones de tipo T1, 40 de tipo T2 y 10 de tipo
T3. ¿Cuál es su CPI medio? ¿Cuál es su tiempo de ejecución, si la
frecuencia de reloj es 500 MHz?

• Cálculo del CPI medio:

50 5 40 4 10 2 430
𝐶𝑃𝐼 𝐶𝑃𝐼 4,3
50 40 10 100

• Cálculo del tiempo de ejecución:

430
𝑇𝑖𝑒𝑚𝑝𝑜 𝑈𝐶𝑃 8,6 10 𝑠
500 10

34
Alternativas de diseño
• Diseño de alto rendimiento:
– Se pretende obtener rendimiento elevado.
– El coste es secundario.

• Diseño de bajo coste:


– Se busca fabricar equipos baratos.
– El rendimiento es secundario (siempre que cumpla unos mínimos).

• Diseño de coste / rendimiento:


– Se busca el equilibrio entre coste y rendimiento.
– Se mejora el rendimiento en lo posible, pero manteniendo un coste
razonable.

• Medida: rendimiento dividido por coste. 𝐾


– Se busca maximizar esta relación.

• Arte del diseño de computadores: determinar de forma precisa cómo


las alternativas influyen en el coste y el rendimiento.

Diseñar para obtener un gran rendimiento sin tener en cuenta los costes es poco realista. Ambos
parámetros, rendimiento y coste, deben estar equilibrados. Existe un campo de diseño de alto
rendimiento, que persigue alcanzar un rendimiento muy elevado como objetivo principal, dejando el
coste en segundo plano. En este segmento nos encontramos los supercomputadores. En el extremo
opuesto está el diseño de bajo coste, donde lo importante es conseguir un diseño asequible, y
considerando el rendimiento como un aspecto secundario. Entre estos dos extremos está el diseño
de coste/rendimiento, en el que los diseñadores persiguen equilibrar los dos factores.

Resumiendo, el rendimiento de un sistema, medido como tiempo de ejecución, depende de:


• El número de instrucciones ejecutadas en los programas (recuento de instrucciones).
• El número de ciclos de reloj que tarda cada instrucción (CPI).
• La duración del ciclo de reloj.

Las decisiones de diseño tienen efecto sobre estos tres parámetros clave, e implican un coste
determinado en el sistema final. A menudo, lo más complicado es determinar el coste de las
diferentes características del diseño, ya que cuestiones como el valor de los componentes
seleccionados, el ensamblaje de la máquina, los gastos de I+D, las ventas, el marketing y los
márgenes de beneficio tienen mucha influencia sobre el mismo.

El arte del diseño de computadores implica ser capaz de determinar de forma precisa cómo las
decisiones de diseño influyen sobre el coste y el rendimiento, y el objetivo es encontrar el equilibrio
entre ambos, teniendo en cuenta el segmento de mercado hacia el que se enfoca el diseño y los
requisitos de los potenciales clientes que pueden estar en disposición de adquirir los equipos.

35
Mejoras en el rendimiento: ley de Amdahl (I)
• Al mejorar un aspecto parcial de la máquina, se producirá un aumento
del rendimiento (speedup).
– El speedup se calcula comparando el rendimiento de la máquina original (sin
incorporar mejoras) y la máquina con las mejoras incorporadas.
ó
𝑆𝑝𝑒𝑒𝑑𝑢𝑝
ó

• El impacto de la mejora sobre el rendimiento global del sistema depende del


tiempo en que la mejora puede aplicarse, y está limitado por el mismo.
– Tiempo no afectado por la mejora: tiempo original de tareas que no se mejoran.
– Tiempo afectado por la mejora: tiempo original de la tarea que se pretende mejorar.
– Tiempo mejorado: tiempo que tarda la tarea mejorada después de aplicar la mejora.
Tiempo no afectado Tiempo afectado
Tiempo inicial sin mejora

Tiempo final mejorado


Tiempo
Tiempo no afectado
mejorado

𝑇𝑖𝑒𝑚𝑝𝑜 𝑖𝑛𝑖𝑐𝑖𝑎𝑙 𝑜𝑟𝑖𝑔𝑖𝑛𝑎𝑙 𝑠𝑖𝑛 𝑚𝑒𝑗𝑜𝑟𝑎 𝑇𝑖𝑒𝑚𝑝𝑜 𝑛𝑜 𝑎𝑓𝑒𝑐𝑡𝑎𝑑𝑜 𝑇𝑖𝑒𝑚𝑝𝑜 𝑎𝑓𝑒𝑐𝑡𝑎𝑑𝑜


𝑇𝑖𝑒𝑚𝑝𝑜 𝑓𝑖𝑛𝑎𝑙 𝑐𝑜𝑛 𝑚𝑒𝑗𝑜𝑟𝑎 𝑇𝑖𝑒𝑚𝑝𝑜 𝑛𝑜 𝑎𝑓𝑒𝑐𝑡𝑎𝑑𝑜 𝑇𝑖𝑒𝑚𝑝𝑜 𝑚𝑒𝑗𝑜𝑟𝑎𝑑𝑜

Al diseñar una máquina se calculan o estiman el rendimiento y el coste de la misma. Cuando se


considera incorporar alguna modificación en el diseño para mejorar el rendimiento, es necesario medir
el impacto de dicha mejora sobre ambos parámetros.

Centrándonos en el rendimiento, el incremento del mismo tras incorporar la mejora en el diseño se


denomina speedup, y se calcula como el cociente entre el rendimiento de la máquina con la mejora
incorporada y el de la máquina original (sin incorporar la mejora).

Es preciso tener en cuenta que la mejora incorporada normalmente afectará a aspectos parciales de
la máquina, mientras que habrá otros aspectos de la misma que permanecerán inalterados. Por tanto,
el impacto de la mejora incorporada será mayor cuanto mayor sea el tiempo en que esta mejora
pueda aplicarse, es decir, cuanto más se utilice el aspecto mejorado dentro de la ejecución de los
programas.

Así, el tiempo inicial sin mejora (Tosm) es el tiempo que tarda la máquina original (sin incorporar la
mejora) en ejecutar un cierto programa. Este tiempo se calcula como la suma del tiempo no
afectado por la mejora (tiempo original de las tareas que siguen durando lo mismo porque la mejora
no les afecta) más el tiempo afectado por la mejora (tiempo original que tardan las tareas cuyo
tiempo de ejecución se verá afectado por la incorporación de la mejora).

El tiempo final mejorado es el tiempo que tardaría la máquina mejorada en ejecutar el mismo
programa. Este tiempo se calcula como la suma del tiempo no afectado por la mejora (que es el
mismo de antes) más el tiempo mejorado (que es el tiempo que tarda la tarea mejorada en la
máquina mejorada).

El speedup será el cociente entre el tiempo inicial sin mejora y el tiempo final mejorado.

36
Mejoras en el rendimiento: ley de Amdahl (II)
• Supongamos que:
– Tosm: tiempo de ejecución inicial original total (sin aplicar la mejora).
– fm: fracción del tiempo total original que es susceptible de ser mejorada (en
porcentaje o en tanto por 1).
– Am: cantidad de la mejora (cuántas veces más rápido se ejecuta la tarea
parcial una vez mejorada frente a lo que tardaba sin mejorar).
Tiempo no afectado Tiempo afectado
Tiempo inicial sin mejora

Tiempo final mejorado


Tiempo
Tiempo no afectado
mejorado

𝑇𝑖𝑒𝑚𝑝𝑜 𝑎𝑓𝑒𝑐𝑡𝑎𝑑𝑜 𝑝𝑜𝑟 𝑙𝑎 𝑚𝑒𝑗𝑜𝑟𝑎 𝑇 𝑓

𝑇𝑖𝑒𝑚𝑝𝑜 𝑛𝑜 𝑎𝑓𝑒𝑐𝑡𝑎𝑑𝑜 𝑝𝑜𝑟 𝑙𝑎 𝑚𝑒𝑗𝑜𝑟𝑎 𝑇 1 𝑓

𝑇𝑖𝑒𝑚𝑝𝑜 𝑎𝑓𝑒𝑐𝑡𝑎𝑑𝑜 𝑝𝑜𝑟 𝑙𝑎 𝑚𝑒𝑗𝑜𝑟𝑎 𝑇 𝑓


𝑇𝑖𝑒𝑚𝑝𝑜 𝑚𝑒𝑗𝑜𝑟𝑎𝑑𝑜
𝐴 𝐴

Llamaremos fracción de mejora (fm) a la fracción del tiempo total en la máquina original que tarda
la tarea susceptible de ser mejorada. La fracción de mejora fm se calcula como el cociente entre el
tiempo afectado y el tiempo inicial sin mejora Tosm.

La cantidad de la mejora o aceleración de la mejora (Am) expresa cuánto más rápida es la


ejecución de la tarea mejorada, y es el cociente entre el tiempo afectado y el tiempo mejorado.
Indica cuántas veces más rápida es la tarea mejorada frente a la tarea afectada sin incorporar la
mejora.

Con todo ello, es evidente que:


• El tiempo no afectado por la mejora es Tosm x (1-fm).
• El tiempo afectado por la mejora es Tosm x fm.
• El tiempo mejorado es el cociente entre el tiempo afectado por la mejora y la cantidad
de la mejora.

37
Mejoras en el rendimiento: ley de Amdahl (III)
• Cálculo de la mejora de rendimiento (speedup):
𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑒𝑗𝑒𝑐𝑢𝑐𝑖ó𝑛 𝑜𝑟𝑖𝑔𝑖𝑛𝑎𝑙 𝑠𝑖𝑛 𝑖𝑛𝑐𝑜𝑟𝑝𝑜𝑟𝑎𝑟 𝑙𝑎 𝑚𝑒𝑗𝑜𝑟𝑎
𝑆𝑝𝑒𝑒𝑑𝑢𝑝
𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑒𝑗𝑒𝑐𝑢𝑐𝑖ó𝑛 𝑓𝑖𝑛𝑎𝑙 𝑐𝑜𝑛 𝑚𝑒𝑗𝑜𝑟𝑎
Tiempo no afectado Tiempo afectado
Tiempo inicial sin mejora

Tiempo final mejorado


Tiempo
Tiempo no afectado
mejorado

𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑒𝑗𝑒𝑐𝑢𝑐𝑖ó𝑛 𝑜𝑟𝑖𝑔𝑖𝑛𝑎𝑙 𝑠𝑖𝑛 𝑖𝑛𝑐𝑜𝑟𝑝𝑜𝑟𝑎𝑟 𝑙𝑎 𝑚𝑒𝑗𝑜𝑟𝑎


𝑆𝑝𝑒𝑒𝑑𝑢𝑝
𝑇𝑖𝑒𝑚𝑝𝑜 𝑛𝑜 𝑎𝑓𝑒𝑐𝑡𝑎𝑑𝑜 𝑝𝑜𝑟 𝑙𝑎 𝑚𝑒𝑗𝑜𝑟𝑎 𝑇𝑖𝑒𝑚𝑝𝑜 𝑚𝑒𝑗𝑜𝑟𝑎𝑑𝑜

𝑇
𝑆𝑝𝑒𝑒𝑑𝑢𝑝
𝑇 𝑓
𝑇 1 𝑓
𝐴

1
𝑆𝑝𝑒𝑒𝑑𝑢𝑝
𝑓
1 𝑓
𝐴

Incorporando las relaciones anteriores a la ecuación de cálculo del speedup, se ve que éste depende
tanto de la fracción de mejora fm como de la cantidad de la mejora Am. Cuanto mayores sean éstas,
mayor será el incremento de speedup.

Una mejora puede repercutir en un aumento del rendimiento que puede compensar el aumento de
coste al incorporarla. Si el incremento del speedup es mayor que el incremento de coste, puede
merecer la pena incorporar la mejora. En caso contrario, sólo sería justificable incorporarla casos de
diseño de alto rendimiento.

38
Mejoras en el rendimiento: ley de Amdahl (IV)
Supongamos que en la máquina del ejemplo anterior se incorpora una
mejora de modo que las instrucciones de tipo T2 pasan a ejecutarse en 2
ciclos. ¿Cuál es la mejora de rendimiento global obtenida?
• Las instrucciones de tipo T2 tardaban 4 ciclos, y ahora pasan a tardar 2.
Cálculo de la cantidad de la mejora: Am = 4 / 2 = 2
• El tiempo afectado por la mejora es el tiempo que tardaban originalmente las 40
instrucciones de tipo T2 que se ejecutan en el programa de prueba.
Tiempo afectado por la mejora = 4 x 40 = 160 ciclos
• La fracción de mejora es el cociente entre el tiempo original para la tarea que
vamos a mejorar dividido por el tiempo de ejecución total original.
Cálculo de la fracción de mejora: fm = 160 / 430 = 0,372
• Por tanto: 1
𝑆𝑝𝑒𝑒𝑑𝑢𝑝 1,229
0,372
1 0,372
2
Se obtiene una mejora de rendimiento global
de 1,229 (del 122,9%)

39
Comparación y resumen del rendimiento
• Carga de trabajo de un sistema: conjunto de programas ejecutados en el
mismo a lo largo del día.

• Programas de prueba (benchmarks): programas pequeños específicamente


escogidos para medir el rendimiento.

• Pruebas sintéticas: programas artificiales específicamente construidos para


intentar englobar las características de un conjunto de programas.

• Es mejor medir con programas reales de la carga de trabajo del sistema.

• Comparación de los rendimentos relativos de 𝑅 𝑇 .


𝑛
dos máquinas X e Y respecto de un programa: 𝑅 𝑇 .

• El tiempo de ejecución puede ser la media aritmética 1


del tiempo de ejecución de los programas que forman 𝑀𝐴 𝑡𝑖𝑒𝑚𝑝𝑜
𝑛
la carga de trabajo del sistema:
• La media aritmética se podría ponderar en función de la frecuencia de uso de
cada programa.

La carga de trabajo de un sistema la constituye el conjunto de programas que habitualmente se


ejecutan en el mismo.
De cara a medir el rendimiento de una máquina, lo mejor es medir los tiempos de ejecución de los
programas que conforman la carga de trabajo, ya que son los más utilizados. Pero resulta imposible
determinar cuál va a ser la carga de trabajo del sistema antes de venderlo, dado que cada cliente lo
utilizará para cosas diferentes. Una posible solución sería medir los rendimientos de los programas
más habituales, y medir el rendimiento para cada cliente calculando la media aritmética de los
tiempos de ejecución de los programas que conforman su propia carga de trabajo, mejor aún si se
pondera en función del número de veces que se ejecute cada programa. Esta estimación
personalizada del rendimiento se realiza solamente por parte del fabricante cuando vende sistemas de
alto coste.
Sin embargo, de cara al gran público, lo habitual es que se utilicen índices más o menos
estandarizados a partir de una serie de programas de prueba (benchmarks) seleccionados. Estos
programas suelen ser pequeños, y suelen ser implementaciones de algoritmos conocidos de uso más
o menos habitual. La ventaja es que estos benchmarks son fáciles de estandarizar, pero un
inconveniente es que se pueden prestar a fraudes, puesto que puede haber compiladores que
incorporen optimizaciones específicas al compilar los benchmarks, e incluso se pueden incluir
mejoras específicas en la circuitería que optimicen ciertos fragmentos pequeños de código.
Otra opción es utilizar pruebas sintéticas, que son programas artificiales específicamente
construidos para intentar englobar las características de un conjunto de programas de uso general. El
inconveniente es que estos programas son irreales, y además se pueden prestar a optimizaciones
fraudulentas, como en el caso anterior.
Lo mejor es realizar pruebas con programas reales (utilizados regularmente, o bien programas
típicos), sobre todo si la máquina está ya funcionando, garantizando en lo posible la reproducibilidad
de las medidas.
40
Medidas para evaluar el rendimiento
Otras medidas de evaluación del rendimiento

• MIPS: millones de instrucciones ejecutadas por segundo.


𝑁ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑖𝑛𝑠𝑡𝑟𝑢𝑐𝑐𝑖𝑜𝑛𝑒𝑠
𝑀𝐼𝑃𝑆
𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑒𝑗𝑒𝑐𝑢𝑐𝑖ó𝑛 10

• MIPS relativos: MIPS normalizados respecto de una máquina de


referencia.
𝑇𝑖𝑒𝑚𝑝𝑜 𝑒𝑛 𝑚á𝑞𝑢𝑖𝑛𝑎 𝑑𝑒 𝑟𝑒𝑓𝑒𝑟𝑒𝑛𝑐𝑖𝑎
𝑀𝐼𝑃𝑆 𝑟𝑒𝑙𝑎𝑡𝑖𝑣𝑜𝑠 𝑀𝐼𝑃𝑆 𝑟𝑒𝑓𝑒𝑟𝑒𝑛𝑐𝑖𝑎
𝑇𝑖𝑒𝑚𝑝𝑜 𝑒𝑛 𝑙𝑎 𝑚á𝑞𝑢𝑖𝑛𝑎

• Más medidas de rendimiento:


– MIPS de pico: velocidad máxima de ejecución de instrucciones.
– MFLOPS: millones de operaciones de coma flotante por segundo.
– MOPS: millones de operaciones por segundo.

A menudo los vendedores y los compradores necesitan un único número para evaluar el rendimiento
de una máquina. Este número resume el rendimiento del conjunto de programas de prueba
seleccionado, en términos que pueden ser comprensibles para el cliente, a veces engañosamente.
Una medida atractiva son los MIPS (millones de instrucciones ejecutadas por segundo). Pero esta
estrategia presenta varios problemas:
• Los MIPS varían entre diferentes programas de un mismo computador.
• No pueden compararse máquinas con repertorios de instrucciones distintos usando los MIPS.
• A veces hay instrucciones de larga duración que realizan tareas complejas (por ejemplo,
copiar una secuencia de bytes de una zona de memoria a otra), y que son muy lentas. Las
máquinas que no cuenten con dichas instrucciones deben emularlas mediante un fragmento
de código. Entonces, las máquinas del primer caso, que realizan la tarea por hardware, serán
más rápidas que las que la realizan por software, pero éstas últimas darán más MIPS.
¡Entonces los MIPS pueden variar inversamente al rendimiento!
Para evitar el problema anterior se inventaron los MIPS relativos, que dan los MIPS normalizados
respecto de una máquina de referencia. Esto puede dar una idea del cociente de tiempos de
ejecución entre la máquina analizada y la máquina de referencia, pero da una idea falsa de los MIPS.
Otra medida del rendimiento son los MIPS de pico, que dan la velocidad máxima de ejecución de
instrucciones. Esta se alcanza utilizando sólo las instrucciones más rápidas, pero esto es totalmente
absurdo (imagínese un programa cuyas instrucciones son todas iguales).
Las máquinas pensadas para cálculo científico usan el sistema de numeración en coma flotante, que
es como la notación científica (con mantisa, base y exponente), pero expresada en binario. En este
caso, una medida interesante son los MFLOPS (millones de operaciones de coma flotante por
segundo). El problema surge porque no todas las operaciones de coma flotante duran igual. De aquí
vienen los MOPS (millones de operaciones por segundo), en los que las operaciones están
normalizadas según un sistema de equivalencia.
41

También podría gustarte