🎓 Cómo usar este documento: Lee la explicación de cada bloque temático y responde las preguntas antes de pasar al siguiente. Las soluciones comentadas están al final.
La Unidad Central de Proceso (UCP o CPU, Central Processing Unit), también denominada procesador, se encarga del control general, ejecución y envío de las operaciones que se efectúan dentro del ordenador con el fin de realizar el tratamiento automático de la información.
| Elemento | Descripción |
|---|---|
| Objeto | Interpretar ordenadamente las instrucciones almacenadas en la memoria para ejecutarlas |
| Componentes principales | Unidad de Control (UC) + Unidad Aritmético-Lógica (ALU) + registros internos |
| Potencia determinada por | Tiempo de ciclo + ancho de banda + capacidad de memoria |
💡 Dato clave: El byte es una unidad demasiado pequeña para los cálculos de la ALU. Por eso se usa la palabra (word), formada por un número entero de bytes (1, 2, 4, 8, 16…).
CPU
├── Unidad de Control (UC)
│ ├── Registro de instrucción (RI)
│ ├── Registro contador de programas (CP)
│ ├── Registro de estado
│ ├── Reloj (generador de pulsos)
│ └── Circuito de Control (CC)
│ ├── Decodificador → identifica la instrucción en el IR
│ └── Secuenciador → genera las microórdenes necesarias
└── Unidad Aritmético-Lógica (ALU)
├── Circuito operacional (OPER) → realiza operaciones
├── Registros de entrada (RO1, RO2) → operandos
├── Registro acumulador (AC) → almacena resultados
└── Registro de estado (biestables IR) → condiciones del resultado
La UC es responsable de recibir, interpretar y ejecutar las instrucciones. Su misión en tres pasos:
| Paso | Descripción |
|---|---|
| 1. Recibir | Las instrucciones almacenadas en memoria en el orden establecido |
| 2. Identificar | De qué instrucción se trata en cada caso |
| 3. Generar | La secuencia adecuada de órdenes para el resto de elementos del ordenador |
| Registro | Nombre completo | Función |
|---|---|---|
| RI | Registro de Instrucción | Contiene la instrucción que se está ejecutando. Tiene 3 campos: CO, MD y CDE |
| CP | Contador de Programas | Contiene la dirección de memoria de la siguiente instrucción a ejecutar |
| RE | Registro de Estado | Información sobre el resultado de la operación anterior (desbordamientos, interrupciones…) |
⚠️ Dato clave: Los campos del Registro de Instrucción (RI):
- CO → Código de la operación a realizar
- MD → Modo de direccionamiento de la memoria
- CDE → Campo de dirección efectiva de la información
El elemento fundamental de la UC. Genera todas las señales de control que gobiernan el ordenador.
| Bloque | Función |
|---|---|
| Decodificador | Identifica la instrucción almacenada en el IR y determina los pasos elementales en que se descompone |
| Secuenciador | Saca y distribuye ordenadamente las señales de control a los elementos del sistema |
Entradas del CC: instrucción en curso (IR) + registro de estado + reloj del sistema + señales externas de E/S (bus de control BC).
| Concepto | Descripción |
|---|---|
| Reloj | Circuito oscilador que genera pulsos a intervalos constantes |
| Función | Sincroniza todas las operaciones elementales del computador |
| Período | Duración entre dos pulsos consecutivos → orden de nanosegundos (10⁻⁹ s) |
| Frecuencia | En MHz (millones de ciclos por segundo). Parámetro clave de velocidad |
f = 200 MHz = 200 × 10⁶ ciclos/seg
p = 1/f → período de ciclo
💡 Mnemotecnia: F = frecuencia (velocidad), P = período (duración de un ciclo). A mayor frecuencia, mayor velocidad.
Contiene los circuitos electrónicos para operaciones aritméticas (suma, resta…) y lógicas (AND, OR, NOT, XOR, comparaciones…).
| Elemento | Función |
|---|---|
| OPER (circuito operacional) | Realiza las operaciones aritméticas, lógicas y de otro tipo (rotaciones, bit…) |
| RO1 y RO2 | Registros auxiliares que contienen los dos operandos de la operación (transparentes al usuario) |
| AC (acumulador) | Almacena los resultados de las operaciones. Referenciable en programación |
| BR (batería de registros) | Registros de uso general, accesibles al usuario por programación |
| Biestables IR | Registro de estado — indica condiciones del resultado para saltos condicionales |
Ciclo de instrucción (Fetch → Decode → Execute)
1. FETCH → La CPU extrae de memoria la instrucción y la guarda en el RI.
La posición de memoria la tiene el CP (contador de programas).
2. ACTUALIZAR → Se actualiza el CP con la dirección de la siguiente instrucción.
3. DECODIFICAR → Se analiza el Código de Operación (CO) del RI.
4. DIRECCIONAR → Se determina a qué datos acceder y cómo (modo MD y campo CDE).
5. EJECUTAR → Se extraen los datos de la posición indicada por CDE,
se cargan en los registros de la CPU y se procesan.
⚠️ Dato clave: El ancho de banda representa la cantidad de información transferida por segundo entre unidades. Ejemplo: ancho de banda memoria-CPU de 133 MB/s significa que en un segundo se pueden transferir 133 millones de bytes entre ellas.
El PDF 1_01_ contiene el diagrama completo de estados de un proceso:
┌─────────────────────────────────┐
Admitted │ │ Admitted
New ──────────► Ready ─────Dispatch────► Running ──┤
▲ │ └─► Terminated (exit)
│ Event/I-O Completion │
Activate│ │ I/O or Event wait
│ ▼
Suspend&Ready ◄─Suspend── Blocked
│ │
Event│ ──Activate──►│
│ │
└─Suspend&Block
| Estado | Descripción |
|---|---|
| New | Proceso recién creado |
| Ready | Listo para ejecutarse, esperando la CPU |
| Running | En ejecución en la CPU |
| Blocked | Esperando un evento o E/S |
| Suspend & Ready | Suspendido pero listo para ejecutarse |
| Suspend & Block | Suspendido y bloqueado esperando evento |
| Terminated | Proceso finalizado |
1. ¿Cuál es la función principal del Registro Contador de Programas (CP)?
2. ¿Qué elemento del Circuito de Control (CC) identifica la instrucción almacenada en el IR y determina los pasos elementales en que se descompone?
3. ¿Cuáles son los tres campos del Registro de Instrucción (RI)?
4. La potencia de un computador está determinada principalmente por:
5. En la ALU, ¿qué registro almacena los resultados de las operaciones y puede referenciarse explícitamente en programación?
6. ¿En qué orden se ejecutan las 5 etapas del ciclo de instrucción?
7. La frecuencia del reloj del sistema se expresa en MHz. ¿Qué determina principalmente?
| Problema | Solución |
|---|---|
| Un proceso no utiliza todo su código/datos a lo largo de su vida | Cargar en memoria principal solo lo que se necesita en cada momento |
| Un programa puede ocupar más que la memoria principal disponible | Tener parte del espacio lógico del proceso en almacenamiento secundario (disco) |
💡 Principio clave — Localidad: La mayoría de los programas exhibe localidad: en cada momento, los accesos a código y datos se concentran sobre áreas pequeñas respecto a la memoria total del proceso. Esto es lo que hace funcionar la memoria virtual.
Técnicas para no tener todo el código en memoria principal
├── Ficheros para datos voluminosos
├── Recubrimientos (overlays) → técnica primitiva
├── Intercambio (swapping) → enviar al disco procesos completos bloqueados
├── Bibliotecas de carga dinámica (DLL) → cargar código compartido bajo demanda
└── MEMORIA VIRTUAL → la solución moderna y general
| Concepto | Descripción |
|---|---|
| Espacio lógico paginado | El proceso ve un espacio de direcciones dividido en páginas |
| Páginas en memoria principal | Algunas páginas están cargadas en marcos físicos de RAM |
| Páginas en disco | El resto están almacenadas en el almacenamiento secundario |
| Tabla de páginas | Estructura que indica dónde está cada página (RAM o disco) |
| Bit de validez | En la tabla de páginas, indica si la página está en memoria principal (1) o en disco (0) |
Cuando la CPU intenta acceder a una página marcada como no válida (bit de validez = 0), la MMU genera una excepción: el fallo de página.
Gestión de un fallo de página (4 pasos)
1. Buscar un marco físico libre para la página solicitada
2. Copiar del disco la página solicitada al marco elegido
3. Actualizar la tabla de páginas
(marcar como válida + anotar el marco físico)
4. Entregar el control al proceso
→ se reintenta la instrucción que provocó el fallo
⚠️ Dato importante: Mientras el SO lee la página del disco (paso 2), se puede entregar la CPU a otros procesos que estén disponibles. También hay que invalidar la entrada de TLB correspondiente.
La solución minimalista: no cargar ninguna página inicialmente. Las páginas se van cargando a medida que se necesitan, resolviendo los fallos de página uno a uno.
Cuando hay un fallo de página y todos los marcos físicos están ocupados, hay que elegir una página víctima para sustituirla.
💡 Objetivo: Minimizar la frecuencia de fallos de página eligiendo como víctima la página que menos se vaya a usar en el futuro.
| Bit | Estado | Significado |
|---|---|---|
| 0 | Limpia | No ha sido modificada → se puede descartar sin escribir en disco |
| 1 | Sucia | Ha sido modificada → hay que guardarla en disco antes de descartarla |
La MMU pone a 1 el bit de modificación cada vez que se hace una escritura sobre la página.
1. Ocurre un fallo de página
2. Se observa que no hay marcos libres
3. Se elige una página víctima
4. Si la víctima ha sido modificada (bit modificación=1) → guardarla en disco
5. Leer la nueva página del disco
6. Marcar la página víctima como inválida en la tabla de páginas
7. Actualizar la entrada de la nueva página (bit de validez + marco físico)
| Algoritmo | Descripción | Uso real |
|---|---|---|
| FIFO | Reemplaza la página que lleva más tiempo en memoria | Sencillo pero no óptimo |
| OPT / MIN | Reemplaza la página que no se usará durante más tiempo en el futuro | Óptimo pero imposible de implementar (requiere conocer el futuro) |
| LRU (Least Recently Used) | Reemplaza la página que hace más tiempo que no se usa | Muy usado, buena aproximación a OPT |
| LFU (Least Frequently Used) | Reemplaza la página usada con menor frecuencia (contador más bajo) | Costoso en hw, peor que LRU en práctica |
| NRU (Not Recently Used) | Reemplaza una página no usada recientemente | Aproximación sencilla a LRU |
| 2ª Oportunidad / CLOCK | FIFO + bit de referencia. Da una segunda oportunidad antes de victimizar | Usado en Mac OS X y Windows XP |
| Aging | Histórico de bits de referencia. Número binario de K bits | Buena aproximación a LRU |
| NFU (Not Frequently Used) | Aproximación a LFU con contador software | Más sencillo que LFU |
| WSClock | Basado en el conjunto de trabajo (WS) + bit de referencia + marcas de tiempo | Muy eficiente en la práctica |
💡 Mnemotecnia: Los más importantes en negrita: FIFO, OPT, LRU, LFU (canónicos) y 2ª oportunidad/CLOCK, Aging, WSClock (adaptados).
FIFO + bit de referencia (REF)
Usado en primeros Mac OS X y Windows XP
Cuando hay fallo de página, recorremos marcos en orden de llegada:
├── Si REF=0 → la elegimos como víctima ✓
├── Si REF=1 → le damos una 2ª oportunidad: ponemos REF=0 y seguimos
└── Si llegamos al final, volvemos al principio (estructura circular = reloj)
Caso extremo: si REF=1 en todas las páginas → equivale a FIFO
Ejemplo K=8:
11000100 → accedida frecuentemente y recientemente
01110111 → accedida hace tiempo (valor más pequeño → candidata a víctima)
💡 Concepto clave (Peter Denning, 1968-1970): Cada proceso trabaja en cada momento con unas zonas de código y datos bien delimitadas: su localidad. La localidad cambia a medida que el proceso se ejecuta.
| Concepto | Definición |
|---|---|
| Conjunto de trabajo WS(t, Δ) | Páginas accedidas por el proceso entre el instante t y t-Δ |
| Δ (ventana temporal) | Parámetro que define el "pasado reciente". Ni muy corto ni muy largo |
| Localidad | Si un proceso tiene toda su localidad en memoria principal, no genera fallos de página |
Ocurre cuando el grado de multiprogramación es excesivo: ningún proceso tiene suficientes páginas en memoria principal y se generan fallos de página continuamente.
Reacción en cadena del Thrashing:
Proceso A falla → se elige víctima una página de B
→ B falla → se elige víctima una página de A
→ Todo el sistema está paginando continuamente
→ Rendimiento cae drásticamente
| Técnica | Descripción |
|---|---|
| PFF (Page Fault Frequency) | Medir la frecuencia de fallos de página. Si es muy alta → dar más marcos. Si es muy baja → quitar marcos. Si la PFF global es muy alta → suspender un proceso (swap out) |
| Working Set | Asignar a cada proceso tantos marcos como el tamaño de su WS. Si la suma supera los marcos disponibles → swap out de algún proceso |
⚠️ Impacto de la estructura del código en los fallos de página:
// Acceso por FILAS → óptimo (accede a páginas contiguas)
for (i=0; i<M; i++)
for (j=0; j<N; j++)
A[i][j] = f(i,j);
// Acceso por COLUMNAS → genera muchos más fallos de página
for (j=0; j<N; j++)
for (i=0; i<M; i++)
A[i][j] = f(i,j);
| Factor de código | Impacto |
|---|---|
| Acceso por filas vs columnas | El acceso por filas respeta la localidad; el acceso por columnas la rompe |
| Tamaño de subrutinas/métodos | Métodos grandes generan más accesos dispersos |
| Recursividad | Puede generar muchos accesos a la pila (stack) |
| Java vs C/C++ | Java tiende a producir accesos más dispersos (menor localidad) |
Cuando el sistema está ocioso, el SO va guardando en disco las páginas modificadas (sucias) y pone a 0 su bit de modificación. Esto reduce el retardo al gestionar fallos de página futuros, ya que no habrá que escribir en disco en ese momento.
| Evolución | Impacto |
|---|---|
| La localidad de los programas ha ido disminuyendo (OOP, recolector de basura, tablas hash…) | El concepto de "conjunto de trabajo" es más débil que hace 40 años |
| Memoria virtual y caché de disco unificadas en un único sistema | Mayor eficiencia global |
| Tamaño de página variable | Mejor adaptación al WS de cada proceso |
| Mayor diferencia de velocidad entre niveles de la jerarquía de memorias | Los fallos de TLB y de página son más graves que antes |
8. ¿Cuál es el principio fundamental que hace que la memoria virtual sea eficiente?
9. ¿Qué ocurre cuando la CPU intenta acceder a una página con el bit de validez a 0?
10. ¿Cuál de los siguientes algoritmos de reemplazo es teóricamente óptimo pero imposible de implementar en la práctica?
11. En el algoritmo de la 2ª oportunidad (CLOCK), ¿qué ocurre cuando se encuentra una página con REF=1?
12. ¿Qué es el bit de modificación en la tabla de páginas?
13. ¿Qué es la hiperpaginación (thrashing)?
14. El conjunto de trabajo WS(t, Δ) de un proceso se define como:
15. ¿Por qué el acceso a una matriz por columnas genera más fallos de página que el acceso por filas?
16. ¿Cuál de las siguientes afirmaciones sobre la paginación bajo demanda (demand paging) es CORRECTA?
1 → b) El Registro Contador de Programas (CP) contiene en todo momento la dirección de memoria de la siguiente instrucción a ejecutar. Su salida está conectada al Bus de Direcciones (BA). No hay que confundirlo con el Registro de Instrucción (RI), que contiene la instrucción que se está ejecutando.
2 → c) El decodificador identifica la instrucción almacenada en el IR y determina los pasos elementales en que se descompone. El secuenciador usa esa información para generar y distribuir las señales de control. Son los dos bloques internos del Circuito de Control (CC).
3 → b) El Registro de Instrucción (RI) tiene tres campos: CO (Código de la Operación), MD (Modo de Direccionamiento) y CDE (Campo de Dirección Efectiva). El CO indica qué operación realizar, el MD cómo acceder a los datos y el CDE dónde están los datos.
4 → b) La potencia de un computador está determinada principalmente por el tiempo de ciclo (velocidad del reloj), el ancho de banda (transferencia de datos por segundo) y la capacidad de memoria. Los periféricos o el SO no son factores principales de potencia del procesador.
5 → d) El registro acumulador (AC) almacena los resultados de las operaciones de la ALU y puede referenciarse explícitamente en programación. RO1 y RO2 son los registros de los operandos (transparentes al usuario). BR es la batería de registros de uso general accesibles al programador.
6 → b) El orden correcto del ciclo de instrucción es: Fetch (extraer instrucción de memoria al RI) → Actualizar CP (apuntar a la siguiente instrucción) → Decodificar (analizar el CO) → Direccionar (determinar a qué datos acceder mediante MD y CDE) → Ejecutar (cargar datos y procesarlos).
7 → c) La frecuencia del reloj determina en parte la velocidad de funcionamiento del computador. El período de ciclo es del orden de nanosegundos. A mayor frecuencia (más MHz/GHz), menor período de ciclo y potencialmente mayor velocidad, aunque también intervienen otros factores como la arquitectura del procesador.
8 → b) La localidad es el principio que hace funcionar la memoria virtual: en cada momento los accesos a código y datos se concentran sobre áreas pequeñas respecto a la memoria total del proceso. Si esas áreas están en memoria principal, el programa puede ejecutarse con pocos fallos de página.
9 → b) Cuando la CPU intenta acceder a una página con bit de validez = 0 (no está en memoria principal), la MMU genera una excepción llamada fallo de página (page fault). Esta excepción activa una rutina del SO que se encarga de cargar la página del disco a la memoria principal.
10 → c) El algoritmo OPT/MIN es teóricamente óptimo (minimiza los fallos de página) porque reemplaza siempre la página que no se usará durante más tiempo. Es imposible de implementar en la práctica porque requiere conocer el futuro. Se usa como referencia teórica para comparar otros algoritmos.
11 → b) En el algoritmo de 2ª oportunidad (CLOCK), cuando se encuentra una página con REF=1, se le da una segunda oportunidad: se pone REF=0 y se continúa buscando la víctima. Solo se elige como víctima una página con REF=0. Si todas tienen REF=1, el algoritmo equivale a FIFO.
12 → c) El bit de modificación indica si la página ha sido escrita (modificada) desde que fue cargada en memoria. Si es 0, la página es una copia fiel del disco y puede descartarse sin escribir. Si es 1 (página "sucia"), hay que guardarla en disco antes de descartarla para no perder los cambios.
13 → b) La hiperpaginación (thrashing) ocurre cuando el sistema tiene un grado de multiprogramación excesivo: ningún proceso tiene suficientes marcos y se generan fallos de página en cadena. El sistema se pasa más tiempo gestionando fallos de página que ejecutando código de los procesos, y el rendimiento cae drásticamente.
14 → b) El conjunto de trabajo WS(t, Δ) es el conjunto de páginas accedidas por el proceso entre el instante t y t-Δ (las páginas accedidas en el "pasado reciente" definido por la ventana Δ). Si Δ tiene el tamaño adecuado, es una aproximación fiel de la localidad actual del proceso.
15 → b) Los elementos de una columna en una matriz C/C++ están almacenados en posiciones de memoria no contiguas (separadas por el tamaño de una fila), lo que significa que se encuentran en páginas diferentes. Esto rompe la localidad espacial y genera muchos más fallos de página que el acceso por filas, donde los elementos son contiguos en memoria.
16 → b) La paginación bajo demanda es la solución minimalista: no se carga ninguna página inicialmente. Las páginas se van cargando en memoria principal a medida que se necesitan, resolviendo los fallos de página según se producen. Es el enfoque más común en los sistemas operativos modernos.
| Concepto | Valor / Respuesta clave |
|---|---|
| UCP = | Unidad Central de Proceso = CPU |
| Componentes principales de la CPU | UC (Unidad de Control) + ALU |
| Registro que contiene la instrucción en ejecución | RI (Registro de Instrucción) |
| Registro que apunta a la siguiente instrucción | CP (Contador de Programas) |
| Campos del RI | CO (código op.) + MD (modo direc.) + CDE (dirección efectiva) |
| Bloques del Circuito de Control | Decodificador (identifica instrucción) + Secuenciador (genera microórdenes) |
| Registro que almacena resultados en la ALU | AC (acumulador) |
| Registros de operandos en la ALU | RO1 y RO2 (transparentes al usuario) |
| Registros de uso general accesibles al programador | BR (batería de registros) |
| Unidad de medida de la velocidad del reloj | MHz (megahercios) |
| Período de ciclo del reloj | Orden de nanosegundos (10⁻⁹ s) |
| Etapas del ciclo de instrucción | Fetch → Actualizar CP → Decodificar → Direccionar → Ejecutar |
| Principio que hace funcionar la memoria virtual | Localidad |
| Bit que indica si una página está en RAM | Bit de validez |
| Excepción al acceder a página no válida | Fallo de página (page fault) |
| Pasos del fallo de página | Buscar marco → Copiar página → Actualizar tabla → Reanudar proceso |
| No cargar páginas inicialmente | Paginación bajo demanda (demand paging) |
| Algoritmo óptimo pero no implementable | OPT / MIN |
| Algoritmo que aproxima OPT con uso histórico | LRU (Least Recently Used) |
| Algoritmo más simple (primero en llegar) | FIFO |
| Anomalía de Belady | En FIFO, más marcos puede generar más fallos de página |
| FIFO + bit de referencia | Algoritmo 2ª Oportunidad / CLOCK (Mac OS X, Windows XP) |
| Histórico de K bits de referencia | Aging |
| Bit que indica si la página ha sido modificada | Bit de modificación |
| Página sin modificar | Limpia (puede descartarse sin escribir al disco) |
| Página modificada | Sucia (hay que guardarla en disco antes de descartar) |
| Cuando no hay marcos libres y hay fallo de página | Elegir página víctima y reemplazarla |
| Thrashing = | Hiperpaginación: exceso de fallos de página por falta de marcos |
| Solución al thrashing por frecuencia | PFF (Page Fault Frequency): ajustar marcos según frecuencia de fallos |
| Conjunto de páginas recientes de un proceso | Working Set WS(t, Δ) |
| Fundador de la teoría del Working Set | Peter Denning (1968-1970) |
| Guardar páginas sucias cuando el sistema está ocioso | Limpieza anticipada (precleaning) |
| Acceso a matriz que genera menos fallos de página | Acceso por filas (respeta localidad espacial) |
| Java vs C/C++ en memoria virtual | Java genera accesos más dispersos → menor localidad |