Skip to content

Principios de Organización de Computadores

Prólogo

Del transistor a la CPU: ¿cómo se compone un sistema informático completo? En el capítulo anterior partimos de los transistores para construir sumadores, registros, unidades aritméticas y, finalmente, el núcleo de la CPU. Pero una CPU por sí sola no basta: necesita cooperar con la memoria y los dispositivos de E/S, requiere buses que conecten los distintos componentes y un sistema de instrucciones que la impulse. En este capítulo pasaremos de la perspectiva interna de la CPU a la del sistema informático completo, profundizando en la arquitectura Von Neumann, el sistema de instrucciones, la jerarquía de memoria, los buses y los principios profesionales de E/S.

¿Qué aprenderás en este artículo?

Al terminar este capítulo, habrás adquirido:

  • Visión de sistema: comprenderás cómo colaboran la CPU, la memoria y la E/S, y dejarás de ser un aficionado al hardware aislado
  • Terminología técnica de hardware: dominarás conceptos fundamentales como ciclo de instrucción, segmentación (pipeline), CPI, tasa de aciertos de caché, entre otros
  • Mentalidad de rendimiento: entenderás los cuellos de botella en la organización de computadores y las técnicas de optimización
  • Base para estudios posteriores: sentarás las bases profesionales para sistemas operativos, arquitectura de computadores y desarrollo embebido
CapítuloContenidoConceptos clave
Capítulo 1Arquitectura Von NeumannPrograma almacenado, cinco componentes funcionales, ruta de datos
Capítulo 2Sistema de instruccionesFormato de instrucción, modos de direccionamiento, CISC vs RISC
Capítulo 3Unidad de control de la CPUUnidad de control, microoperaciones, ciclo de instrucción
Capítulo 4Jerarquía de memoriaCaché, memoria principal, memoria virtual, mecanismo de paginación
Capítulo 5Buses y E/SArbitraje de bus, DMA, mecanismo de interrupciones

0. Visión general: sistema hardware del computador

En el capítulo anterior "Del transistor a la CPU", ya entendimos cómo funciona internamente la CPU: desde la búsqueda (fetch), decodificación, ejecución hasta el write-back. Pero la CPU en sí es solo una unidad de ejecución; para que un computador sea realmente "utilizable", necesita la cooperación de una serie de componentes periféricos.

Detailed CPU Instruction Cycle Demo
CPU
Control Unit CU
PC256Program Counter
IRInstruction Register
MARMemory Address Register
MDRMemory Data Register
Arithmetic Logic Unit ALU
ACC0Accumulator
General Register File
R00
R10
R20
R30
Address Bus
Data Bus
Control Bus
Main Memory
0x100LOAD R0, [0x200]
 0x101LOAD R1, #7
 0x102ADD R0, R1
 0x103STORE [0x201], R0
Data Area
 0x51242
 0x5130
FetchFetch
DecodeDecode
ExecuteExecute
Write BackWrite Back
Step 0 / 32
Click "Clock Pulse" to step through execution, or "Auto Run" to play continuously.

Descomposición por capas: sistema hardware del computador

  • Primera capa: núcleo de la CPU Responsable de la ejecución de instrucciones, incluye la unidad de control (que emite señales de control) y la unidad aritmética (que ejecuta operaciones aritméticas y lógicas)

  • Segunda capa: banco de registros Unidad de almacenamiento de alta velocidad dentro de la CPU, incluye registros de propósito general y registros especiales (PC, IR, MAR, MDR, etc.)

  • Tercera capa: memoria principal Memoria para almacenar programas y datos, a la que la CPU accede mediante el bus de direcciones y el bus de datos

  • Cuarta capa: dispositivos de E/S Los dispositivos de entrada/salida se conectan al bus del sistema a través de controladores de E/S

  • Quinta capa: bus del sistema Canal de datos que conecta CPU, memoria y E/S, incluyendo bus de direcciones, bus de datos y bus de control


1. Arquitectura Von Neumann: la "constitución" del computador moderno

1.1 Principio de programa almacenado

En 1945, el matemático John von Neumann propuso la revolucionaria arquitectura de programa almacenado (Stored-program). Esta idea sentó las bases del computador moderno.

Concepto clave

Programa almacenado: el programa en sí es un tipo especial de dato y, como cualquier otro dato, se almacena en memoria. La CPU puede leer y ejecutar las instrucciones del programa almacenadas en memoria de la misma forma en que lee y escribe datos.

Esto significa que:

  • Computadores primitivos: el programa se implementaba mediante cableado fijo; cambiar de programa requería volver a soldar los circuitos
  • Arquitectura Von Neumann: el programa se almacena en memoria; cambiar de programa solo requiere modificar el contenido de la memoria

1.2 Los cinco componentes funcionales

La arquitectura Von Neumann divide el computador en cinco componentes fundamentales:

CPU Register FileHigh-speed storage inside the CPU
Special Registers
PC
0x00401000
Program counter
IR
0x8B450008
Instruction register
MAR
0x00401000
Memory address register
MDR
0x00000000
Memory data register
ACC
0x0000001A
Accumulator
General Purpose Registers
RAX
0x00000000
Return value
RBX
0x00000000
Base register
RCX
0x00000000
Counter register
RDX
0x00000000
Data register
RSI
0x00000000
Source index
RDI
0x00000000
Destination index
RBP
0x00000000
Base pointer
RSP
0x7FFDE000
Stack pointer
Program Status Word (PSW / FLAGS)
CF0Carry flag
PF0Parity flag
AF0Auxiliary carry
ZF0Zero flag
SF0Sign flag
OF0Overflow flag
Registers vs Memory
FeatureRegisterMemory (RAM)
LocationInside the CPUOutside the CPU
Access speedFastest (< 1ns)Slower (50-100ns)
CapacityTiny (bytes)Large (GB)
RoleHold instructions, operands, and resultsStore programs and data
ComponenteInglésFunciónComposición principal
Unidad AritméticaALU (Arithmetic Logic Unit)Ejecuta operaciones aritméticas y lógicasSumador, desplazador, comparador
Unidad de ControlCU (Control Unit)Dirige y coordina el trabajo de todos los componentesRegistro de instrucción, decodificador, generador de temporización
MemoriaMemoryAlmacena programas y datosRegistro de dirección de memoria (MAR), registro de datos de memoria (MDR)
Dispositivos de entradaInputEntrada de informaciónTeclado, ratón, escáner
Dispositivos de salidaOutputSalida de informaciónMonitor, impresora

1.3 Ruta de datos

La ruta de datos (Data Path) es el camino por el que fluyen los datos entre los distintos componentes funcionales. Dentro de la CPU, la ruta de datos conecta:

  • El banco de registros
  • La unidad aritmético-lógica (ALU)
  • El registro de datos de memoria (MDR)

La anchura de la ruta de datos (cuántos bits puede transmitir a la vez) afecta directamente al rendimiento del computador.

1.4 El cuello de botella de Von Neumann

La arquitectura Von Neumann tiene un conocido cuello de botella de rendimiento:

La velocidad de transferencia de datos entre la CPU y la memoria es muy inferior a la velocidad de procesamiento de la CPU.

Esto provoca que la CPU a menudo permanezca inactiva "esperando datos". Muchas técnicas de optimización de los computadores modernas giran en torno a este problema:

Técnica de optimizaciónPrincipio
Caché (Cache)Colocar almacenamiento de alta velocidad y pequeña capacidad cerca de la CPU
Segmentación de instrucciones (Pipelining)Mantener varias instrucciones simultáneamente en distintas etapas
SuperescalarEmitir múltiples instrucciones en un mismo ciclo de reloj
Paralelismo multinúcleoVarios núcleos de CPU comparten las tareas de cómputo

2. Sistema de instrucciones: la interfaz entre la CPU y el software

En la sección anterior aprendimos la idea central de la arquitectura Von Neumann: el programa y los datos se almacenan juntos en memoria. Pero esto plantea una pregunta clave: ¿qué aspecto tiene exactamente el "programa" almacenado en memoria? ¿Cómo lo interpreta la CPU?

La respuesta es el sistema de instrucciones (Instruction Set Architecture, ISA). Si comparamos la CPU con un servicio, el sistema de instrucciones sería su documentación de API: define todos los comandos que la CPU puede entender, el formato de cada comando y el rango de datos sobre los que puede operar. Cada línea de código que escribes acaba siendo traducida por el compilador a una secuencia de llamadas a esta "API".

2.1 Del código a la instrucción: el viaje de traducción de una línea de código

Construyamos primero una comprensión global: el código que escribes en el editor y lo que realmente ejecuta la CPU están separados por varias capas de traducción.

🔗 From Code to Instructions: One Line Through the Translation Pipeline

Click each stage to see how source code becomes CPU-executable instructions

1Source code
int a = 10 + 5;
This is high-level code written in an editor. It is easy for humans to read, but the CPU does not understand int or the + operator directly.
2Compiler emits assembly
MOV  R1, #10    ; put 10 into register R1
MOV  R2, #5     ; put 5 into register R2
ADD  R3, R1, R2 ; R3 = R1 + R2
STORE R3, [a]   ; store the result at variable a
3Assembler emits machine code
0001 0001 0000 1010  → MOV R1, #10
0001 0010 0000 0101  → MOV R2, #5
0010 0011 0001 0010  → ADD R3, R1, R2
0100 0011 1000 0000  → STORE R3, [a]
4CPU executes instructions
Clock 1: fetch → decode → execute MOV R1, #10
Clock 2: fetch → decode → execute MOV R2, #5
Clock 3: fetch → decode → execute ADD R3, R1, R2
Clock 4: fetch → decode → execute STORE R3, [a]
💡 Key idea
An instruction set is the CPU API: it defines every command the CPU understands. A compiler translates your high-level language into calls to that API. Different CPUs, such as x86 and ARM, have different instruction sets, just as different services expose different APIs.

Esta cadena de traducción es clave para entender el sistema de instrucciones:

NivelContenido¿Quién lo entiende?
Lenguaje de alto nivelint a = 10 + 5;Humanos
Lenguaje ensambladorMOV R1, #10 / ADD R3, R1, R2Humanos (con entrenamiento)
Código máquina0001 0001 0000 1010La CPU

¿Por qué entender esta cadena?

  • Cuando ves un error de compilación, sabes que el fallo ocurre en el paso "lenguaje de alto nivel → ensamblador"
  • Cuando ves un fallo en tiempo de ejecución, sabes que el problema está en la fase de ejecución de instrucciones de la CPU
  • Al entender la optimización de rendimiento, sabes qué optimizaciones aplica el compilador durante el proceso de "traducción"
  • Al elegir arquitectura de CPU (x86 vs ARM), sabes que la diferencia radica en que la "API del conjunto de instrucciones" es distinta

2.2 ¿Qué aspecto tiene una instrucción?

Sabiendo que el código se traduce a instrucciones, la siguiente pregunta es: ¿cuál es la estructura interna de una instrucción?

Cada instrucción máquina es esencialmente una cadena de dígitos binarios, pero con un formato interno estricto. Las dos partes fundamentales son:

  • Código de operación (Opcode): le dice a la CPU «qué hacer»: ¿una suma? ¿un salto? ¿leer de memoria?
  • Operando (Operand): le dice a la CPU «sobre quién actuar»: ¿qué registro? ¿qué dirección de memoria? ¿qué constante?

Igual que una frase tiene la estructura «verbo + complemento», una instrucción también tiene la estructura «operación + objeto»:

Instrucción:  ADD  R3, R1, R2
              ───  ──────────
              Opcode  Operandos
              (sumar) (R3 = R1 + R2)

Según la cantidad de operandos, el formato de instrucción se divide en cuatro tipos, de simple a complejo:

Machine Instruction FormatOpcode + operands = machine instruction
Opcode8 bits
Destination8 bits
Source 18 bits
Source 28 bits
Example instruction
01101100 00000001 00000010 00000011
Result goes to a new destination without changing sources
Three-address format
Three addresses identify the destination and two source operands separately. The result goes into the destination without modifying the sources.
Common examples
ADD R1, R2, R3R1 = R2 + R3
SUB R1, R2, R3R1 = R2 - R3
MUL R1, R2, R3R1 = R2 × R3
Common opcodes
00000000NOPNo operation
00000001MOVMove data
00000010ADDAddition
00000011SUBSubtraction
00000100MULMultiplication
00000101DIVDivision
00000110ANDLogical AND
00000111ORLogical OR
00001000NOTLogical NOT
00001001XORExclusive OR
00001010SHLShift left
00001011SHRShift right
00001100JMPUnconditional jump
00001101JEJump if equal
00001110JNEJump if not equal
00001111CALLCall subroutine
00010000RETReturn
00010001PUSHPush stack
00010010POPPop stack
00010011LOADLoad from memory
00010100STOREStore to memory
FormatoEstructuraEjemploCaso de uso
Cero direccionesSolo opcodeRET (retornar)Computadores de pila, operandos implícitos en la cima de la pila
Una direcciónOpcode + 1 direcciónINC R1 (incrementar R1)Operaciones con un solo operando
Dos direccionesOpcode + 2 direccionesMOV R1, R2Más común, transferencia de datos y operaciones
Tres direccionesOpcode + 3 direccionesADD R3, R1, R2No destruye los operandos fuente

¿Por qué hay tantos formatos?

Es un compromiso entre espacio y flexibilidad. Las instrucciones de cero direcciones son las más cortas (ahorran memoria), pero requieren operaciones de pila adicionales; las de tres direcciones son las más flexibles (no destruyen los datos fuente), pero ocupan más bits. Cada arquitectura de CPU elige una combinación diferente de formatos de instrucción.

2.3 ¿Cómo encuentra la CPU los datos? — Modos de direccionamiento

La instrucción le dice a la CPU «haz una suma», pero ¿dónde están los dos números que hay que sumar? Pueden estar directamente escritos en la instrucción, en un registro o en alguna dirección de memoria. El modo de direccionamiento es la regla que le indica a la CPU «dónde buscar los operandos».

Usemos una analogía cotidiana de "encontrar a una persona":

Modo de direccionamientoAnalogíaEjemplo de instrucciónDescripción
InmediatoLa persona está justo delante de tiMOV R1, #100El dato está escrito directamente en la instrucción, lo más rápido
Por registroLlamar al colega por la extensión internaMOV R1, R2El dato está en un registro interno de la CPU, muy rápido
DirectoSabes el número de puerta y vas directamenteMOV R1, [0x1000]La instrucción contiene la dirección de memoria
IndirectoPreguntar a recepción «¿en qué sala está Zhang San?»MOV R1, [R2]El registro contiene una dirección; hay que consultar una vez más
IndexadoCalcular la sala como «edificio 3 + piso 5»MOV R1, [R2+10]Dirección base + desplazamiento, usado para acceso a arrays
Addressing ModesHow an instruction finds operand locations
Immediate addressingImmediate Addressing
Definition
The operand is embedded directly in the instruction and is immediately available.
Instruction format
MOV R1, #100
Example
MOV R1, #100 ; R1 = 100
Immediate value 100 is stored directly in the instruction, so no register or memory lookup is needed.
Execution process
1CPU reads immediate value 100 directly from the instruction
2Write the immediate value into target register R1
3Execution completes without extra memory access
Characteristics
SpeedFast
FlexibilityLow
Addressing mode comparison
Addressing modeFormatSpeedUse case
Immediate addressingMOV R1, #100FastestConstant assignment and initialization
Register addressingMOV R1, R2FastestRegister-to-register data transfer
Direct addressingMOV R1, [100]Relatively fastAccessing global variables
Indirect addressingMOV R1, [R2]Relatively fastPointers and array traversal
Indexed addressingMOV R1, [R2 + R3]Relatively fastArray access and loops
Based addressingMOV R1, [R2 + 100]Relatively fastStruct fields and function parameters
Relative addressingJMP LABELFastestLoops and conditional branches

¿Por qué se necesitan tantos modos de direccionamiento?

Cada contexto necesita una estrategia distinta para "encontrar datos":

  • Asignación de constantes (x = 100) → direccionamiento inmediato, el dato está en la propia instrucción
  • Operaciones con variables (a + b) → direccionamiento por registro, los datos ya están cargados en registros
  • Acceso a arrays (arr[i]) → direccionamiento indexado, dirección base + desplazamiento del índice
  • Operaciones con punteros (*ptr) → direccionamiento indirecto, el registro contiene una dirección

Cuando escribes arr[i] no piensas en modos de direccionamiento, pero el compilador selecciona automáticamente el más adecuado.

2.4 El catálogo de capacidades de la CPU — Clasificación de instrucciones

Ahora que conocemos el formato de instrucción y los modos de direccionamiento, la última pregunta es: ¿qué cosas puede hacer exactamente una CPU?

Todas las instrucciones se pueden agrupar en seis grandes categorías que cubren todas las operaciones que puede realizar un computador:

TipoQué haceInstrucciones representativasEl código que escribes
Transferencia de datosMover datosMOV, LOAD, STORElet x = y, paso de parámetros a funciones
AritméticasSumar, restar, multiplicar, dividirADD, SUB, MUL, DIVa + b, count++
LógicasOperaciones a nivel de bitAND, OR, NOT, XORflags & 0xFF, comprobación de permisos
DesplazamientoDesplazar a izquierda o derechaSHL, SHRx << 2 (equivale a multiplicar por 4)
Transferencia de controlSaltos y llamadasJMP, CALL, RETif, for, llamadas a funciones
Entrada/SalidaComunicación con periféricosIN, OUTLeer teclado, escribir en pantalla

Una idea clave

Todo el código que escribes —sin importar lo compleja que sea la lógica de negocio o lo espectaculares que sean las animaciones de la interfaz— acaba descomponiéndose en combinaciones de estos seis tipos de operaciones básicas. La "inteligencia" de la CPU no reside en hacer cosas complejas, sino en ejecutar estas operaciones simples miles de millones de veces por segundo.

2.5 Dos filosofías de diseño: CISC vs RISC

El diseño del sistema de instrucciones presenta un desacuerdo fundamental: ¿debe cada instrucción ser lo más potente posible o lo más simple posible?

Esta divergencia ha generado dos grandes bandos que influyen directamente en cada dispositivo que usas hoy:

⚔️ Two Design Philosophies: CISC vs RISC

Click a comparison dimension to see the core differences between instruction set styles

Thousands of complex instructions
Instruction count
Tens to hundreds of streamlined instructions
One instruction can do many things
Single instruction
One instruction does one thing
Variable length (1-15 bytes)
Instruction length
Fixed length, often 4 bytes
Complex instructions take multiple cycles
Execution speed
Most instructions complete in one cycle
Higher
Power use
Lower
Harder to optimize because lengths vary
Pipeline
Easier to optimize because instructions are regular
Lighter because hardware does more
Compiler burden
Heavier because software optimizes more
🌍 Real-world choices
💻 Your computerx86 (CISC)Compatible with decades of software
📱 Your phoneARM (RISC)Low power consumption and longer battery life
🍎 Apple SiliconARM (RISC)High performance per watt reshaped laptops
🔬 RISC-V boardRISC-V (RISC)Open and royalty-free for IoT and education

Usemos una analogía para entenderlo:

  • CISC es como una navaja suiza: integra tijeras, abrebotellas, destornillador… muchas funciones, pero cada una no es necesariamente la mejor
  • RISC es como un juego de herramientas profesionales: cada herramienta hace una sola cosa, pero la hace rápido y bien

¿Por qué tu móvil usa ARM y tu ordenador usa x86?

  • x86 (CISC) ha dominado el mercado de PC y servidores durante 40 años, acumulando un enorme ecosistema de software. Cambiar de arquitectura implicaría recompilar todo el software
  • ARM (RISC) domina los dispositivos móviles gracias a su bajo consumo. La batería de un móvil es pequeña, cada milivatio cuenta
  • Apple Silicon ha demostrado que RISC también puede ofrecer alto rendimiento: los chips de la serie M superan a sus rivales x86 tanto en rendimiento como en consumo
  • RISC-V es una arquitectura RISC de código abierto que está emergiendo rápidamente en IoT, educación y chips de IA

Resumen: el sistema de instrucciones es el puente que conecta el software y el hardware. El código que escribes se traduce a instrucciones mediante el compilador; las instrucciones, mediante el opcode y los operandos, le dicen a la CPU qué hacer y sobre quién; los modos de direccionamiento determinan de dónde vienen los datos. Los distintos diseños de conjuntos de instrucciones (CISC/RISC) determinan las características de rendimiento y los escenarios de aplicación de la CPU.

Ahora conocemos la «estructura estática» de las instrucciones: qué aspecto tienen y qué tipos hay. La siguiente pregunta es: ¿cómo ejecuta la CPU estas instrucciones paso a paso? Ese es el trabajo de la unidad de control.


3. Unidad de control: el "centro de mando" de la CPU

3.1 Componentes de la unidad de control

La unidad de control es el "cerebro" de la CPU, encargada de coordinar el trabajo de todos los componentes según lo exigen las instrucciones:

How the Controller WorksHow control signals coordinate CPU components
Control Unit CU
Instruction Register IR
Instruction Decoder
Timing Generator
Output control signals:
PC→MAR
MEM→MDR
MDR→IR
IR→ID
ALU→ACC
ACC→MDR
PC
Program Counter
MAR
Address Register
Memory
Main Memory
MDR
Data Register
IR
Instruction Register
ID
Decoder
ALU
Arithmetic Logic Unit
ACC
Accumulator
Current microinstruction
Core controller concepts
Control signals:Electrical signals emitted by the controller to control each component on the data path.
Timing:CPU operations advance by clock ticks; each tick performs specific micro-operations.
Hardwired vs microprogrammed:Hardwired controllers are fast but complex; microprogrammed controllers are flexible but slightly slower.
ComponenteFunción
Contador de programa (PC)Almacena la dirección de la siguiente instrucción
Registro de instrucción (IR)Almacena la instrucción que se está ejecutando actualmente
Decodificador de instruccionesAnaliza el opcode y los operandos de la instrucción
Generador de temporizaciónGenera señales de pulso que controlan la temporización de cada componente
Generador de secuencia de microoperacionesProduce la serie de señales de control necesarias para ejecutar la instrucción
Program Status Word (PSW)The CPU status indicators
CF
0
Carry flag
PF
0
Parity flag
AF
0
Auxiliary carry
ZF
0
Zero flag
SF
0
Sign flag
TF
0
Trap flag
IF
1
Interrupt flag
DF
0
Direction flag
OF
0
Overflow flag
How operation results affect flags
Result:
0
CF:0PF:0AF:0ZF:0SF:0TF:0IF:1DF:0OF:0
Typical flag uses
🔀
Conditional jumps
JE, JNE, JG, JL and similar instructions decide jumps based on ZF, SF, and OF.
Arithmetic
Multi-word arithmetic uses CF for carry and OF for signed overflow.
🔄
Loop control
Loop instructions often use ZF to detect the loop ending condition.

3.2 Ciclo de instrucción

La CPU necesita pasar por un ciclo de instrucción completo para ejecutar una instrucción, que típicamente incluye:

  1. Ciclo de búsqueda (Fetch): leer la instrucción de la memoria al IR
  2. Ciclo de decodificación (Decode): interpretar el significado de la instrucción
  3. Ciclo de ejecución (Execute): realizar la operación
  4. Ciclo de acceso a memoria (Memory Access): si se requiere, acceder a la memoria
  5. Ciclo de escritura (Write Back): escribir el resultado en el registro o la memoria

3.3 Microoperaciones

Una microoperación es la operación más básica impulsada por señales de control. Por ejemplo, la fase de "búsqueda (fetch)" se puede descomponer en las siguientes microoperaciones:

PulsoMicrooperaciónSeñal de control
T1PC → MARPCout, MARin
T2MEM → MDRMEMout, MDRin
T3MDR → IRMDRout, IRin
T4PC + 1 → PCPC+1, PCin

3.4 Control cableado vs control microprogramado

CaracterísticaControl cableadoControl microprogramado
ImplementaciónCircuitos de lógica combinacionalSecuencia de microinstrucciones (firmware)
VelocidadRápidoAlgo más lento
Dificultad de diseñoComplejaRelativamente sencilla
FlexibilidadEscasa (modificar requiere rediseñar el circuito)Alta (basta con modificar el microprograma)
Aplicación típicaProcesadores RISCPrimeros procesadores CISC

4. Jerarquía de memoria: ¿por qué necesitamos caché?

4.1 Estructura jerárquica de la memoria

Los dispositivos de almacenamiento del computador forman una estructura piramidal:

Storage HierarchyFrom fastest to slowest, smallest to largest
Registers
Fastest
Smallest (KB)
Cache
Very fast
Small (MB)
Memory
Fast
Medium (GB)
Disk
Slow
Large (TB)
Network/Cloud
Slowest
Unlimited
Detailed comparison
Storage levelAccess timeTypical capacityCost
Registers< 1 nsA few KBHighest
L1 cache~1 ns64 KBVery high
L2 cache~3 ns256 KBHigh
L3 cache~10 ns8 MBMedium
Memory~100 ns8-32 GBMedium-low
SSD~100 μs256 GB-2 TBLow
HDD~10 ms1-10 TBLowest
Locality principle
Programs tend to access recently accessed locations (temporal locality) and nearby locations (spatial locality)
By exploiting locality, caches can significantly improve performance.
NivelTipo de almacenamientoTiempo de accesoCapacidad típicaUbicación
RegistrosSRAM<1nsUnos KBDentro de la CPU
Caché L1SRAM~1ns32-64KBCerca del núcleo de la CPU
Caché L2SRAM~3-10ns256KB-1MBDentro del chip de la CPU
Caché L3SRAM~10-20ns2-16MBDentro del chip / compartida
Memoria principal (RAM)DRAM~50-100ns8-64GBEn la placa base
SSDFlash~10-100μs256GB-2TBEn la placa base
HDDDisco magnético~5-10ms1-10TBEn la caja del equipo

Analogía de las diferencias de velocidad

Si comparamos el acceso de la CPU a la caché L1 con coger un papel de encima de la mesa:

  • Acceder a la memoria principal → coger el ascensor para ir a comprar papel a la tienda de abajo
  • Acceder a un SSD → conducir a otra ciudad para comprar papel
  • Acceder a un HDD → volar a otro país para comprar papel

¡La diferencia de velocidad puede alcanzar millones de veces!

4.2 Principio de la caché

La caché (Cache) es un almacenamiento rápido situado entre la CPU y la memoria principal. Su idea central se basa en dos principios de localidad:

Principios de localidad

  • Localidad temporal: si un dato acaba de ser accedido, es muy probable que vuelva a ser accedido pronto
  • Localidad espacial: si un dato es accedido, es muy probable que los datos cercanos a él también lo sean

Funcionamiento de la caché

  1. Acierto (Hit): el dato que busca la CPU está en la caché, se lee directamente
  2. Fallo (Miss): el dato no está en la caché, hay que cargarlo desde la memoria principal
Tasa de aciertos = número de aciertos / número total de accesos
Tiempo medio de acceso = tasa de aciertos × tiempo de caché + (1 - tasa de aciertos) × tiempo de memoria
Cache PrinciplesThe bridge between CPU and memory
CPU core
L1 cache
64 KB~1ns
L2 cache
256 KB~5ns
L3 cache
8 MB~15ns
Main memory
16 GB~100ns
Cache operation demo
Operation log
Why does cache work? Locality principle
⏱️
Temporal locality
Recently accessed data is likely to be accessed again.
Variables inside loops
📦
Spatial locality
After one item is accessed, nearby data is likely to be accessed.
Array traversal and sequential execution
Cache mapping methods
Each memory block maps to exactly one cache line.
SpeedFastest
Hit rateLower
Implementation complexityLowest
Hit-rate calculation
Average access time = H × Tc + (1-H) × Tm
2 ns
100 ns
90%
Average access time = 12 ns

4.3 Métodos de correspondencia de caché

MétodoPrincipioVentajasDesventajas
Correspondencia directaCada bloque de memoria solo puede ir a una posición fijaSimple y rápidoAlta tasa de conflictos
Asociativa por conjuntosCada bloque de memoria puede ir a N posiciones (N vías)Equilibrio entre velocidad y tasa de aciertosImplementación compleja
Totalmente asociativaCualquier posiciónMenor tasa de conflictosDifícil de implementar (requiere comparar todas las etiquetas)

4.4 Memoria virtual

La memoria virtual es una abstracción importante que proporciona el sistema operativo:

  • Cada proceso cree que dispone de un espacio de direcciones virtual completo
  • El sistema operativo se encarga de traducir las direcciones virtuales a direcciones físicas
  • Las páginas poco usadas se pueden expulsar al disco (espacio de intercambio)

Analogía de la memoria virtual

Imagina la memoria virtual como la gestión de habitaciones de un hotel:

  • Tú (el proceso) crees que todo el edificio es tuyo
  • En realidad, el hotel (SO) solo te asigna las habitaciones que necesitas en cada momento
  • Las habitaciones que no usas se "expulsan" al almacén (disco)
  • Las habitaciones que necesitas se pueden "traer" en cualquier momento

5. Buses y E/S: el "sistema circulatorio" del computador

5.1 Bus del sistema

El bus (Bus) es el canal de datos que conecta los distintos componentes del computador:

Computer Bus SystemAddress bus, data bus, and control bus
CPU
Control unit
ALU
Address bus32 bits
Data bus64 bits
Control busControl signal
Main memory
0x0
0x1
0x2
0x3
0x4
0x5
0x6
0x7
Operation flow
Bus concepts
Address bus
CPU sends memory addresses over a one-way path.
Data bus
Transfers actual data in both directions.
Control bus
Transfers read/write and other control signals.
Tipo de busFunciónDirecciónAnchura típica
Bus de direccionesTransmite direcciones de memoriaUnidireccional (CPU→memoria)32 bits / 64 bits
Bus de datosTransmite datosBidireccional32 bits / 64 bits
Bus de controlTransmite señales de controlBidireccionalVarias líneas de señal

5.2 Arbitraje del bus

Cuando varios dispositivos solicitan usar el bus simultáneamente, se necesita un mecanismo de arbitraje para decidir quién lo usa primero:

Método de arbitrajeDescripción
Arbitraje centralizadoUn árbitro central decide de manera unificada
Arbitraje distribuidoLos dispositivos negocian entre sí

5.3 Métodos de acceso a dispositivos de E/S

MétodoPrincipioVentajasDesventajas
Consulta por programa (Polling)La CPU sondea cíclicamente el estado de E/SSimpleBaja utilización de la CPU
Por interrupcionesEl dispositivo de E/S notifica activamente a la CPU al terminarLa CPU puede trabajar en paraleloLa gestión de interrupciones tiene sobrecarga
DMAEl dispositivo de E/S accede directamente a la memoriaLa CPU no participa en absolutoRequiere un controlador DMA
I/O Method ComparisonProgrammed I/O · Interrupt-driven I/O · DMA
Programmed I/OProgrammed I/O
Workflow
1CPU polls the I/O device status
2Device busy? Keep waiting
3Device ready, send read/write command
4CPU reads or writes data byte by byte
5Check whether transfer is complete
6If incomplete, keep polling
CPU involvementHigh
SpeedSlow
ComplexityLow
Three I/O methods compared
FeatureProgrammed I/OInterrupt-driven I/ODMA
CPU involvementInvolved throughoutOnly handles interruptsAlmost uninvolved
Data transferCPU moves each byteCPU moves each wordDevice transfers directly to memory
ProsSimple and flexible controlHigh CPU efficiencyCPU is fully freed
ConsLow CPU utilizationInterrupt overheadComplex hardware
Best forSimple or low-speed devicesLow/medium-speed devicesHigh-speed bulk transfer

5.4 Principio de DMA

DMA (Direct Memory Access, acceso directo a memoria) permite que los dispositivos de E/S intercambien datos directamente con la memoria:

How Networks ConnectThe complete path from sending to receiving
💻
Sender
192.168.1.100
📧
Mail app
📧
Application layer
Mail software creates the message content
🔐
Transport layer
TCP adds port numbers and sequence numbers
🌐
Network layer
IP adds source and destination addresses
🔌
Data link layer
Ethernet adds MAC addresses
Physical layer
Convert to electrical signals and send
🖥️
Receiver
192.168.1.200
📧
Mail app
Data encapsulation process
7Application layer
Message content: "Hello!"
6Presentation layer
Encoding: UTF-8
5Session layer
Session ID: sess_123
4Transport layer
TCP header: port 25
3Network layer
IP header: 192.168.1.100 → 192.168.1.200
2Data link layer
Ethernet frame: MAC address
1Physical layer
Bitstream: 01010101...
Network protocol stack (OSI model)
Sender
Application layer (HTTP, SMTP)
Transport layer (TCP, UDP)
Network layer (IP)
Data link layer (Ethernet)
Physical layer (electrical signals)
Receiver
Application layer (HTTP, SMTP)
Transport layer (TCP, UDP)
Network layer (IP)
Data link layer (Ethernet)
Physical layer (electrical signals)
  • Sin DMA: la CPU participa durante toda la transferencia de datos y no puede hacer otra cosa
  • Con DMA: la CPU indica al controlador DMA "de dónde a dónde transferir, cuánto transferir" y luego ejecuta otras tareas; el DMA notifica a la CPU al terminar

Analogía de DMA

Es como pedir comida a domicilio:

  • Sin DMA: vas tú mismo al supermercado a comprar, vuelves a casa, lavas, cocinas (participas en todo el proceso)
  • Con DMA: llamas por teléfono para hacer el pedido, el repartidor lo lleva directamente a la cocina (otro se encarga de todo, tú solo "recibes" al final)

5.5 Mecanismo de interrupciones

La interrupción es un mecanismo fundamental en los sistemas informáticos:

  1. Cuando un dispositivo de E/S completa una operación, envía una solicitud de interrupción a la CPU
  2. La CPU está ejecutando instrucciones; al terminar la instrucción actual, responde a la interrupción
  3. La CPU guarda el estado actual y salta a la rutina de tratamiento de interrupción
  4. Una vez procesada, restaura el estado y continúa la ejecución

6. Optimización del rendimiento de la CPU: segmentación (pipelining)

6.1 Segmentación de instrucciones

La segmentación de instrucciones (pipelining) es una técnica de paralelismo que maximiza la eficiencia de la CPU:

CPU Instruction PipelineFive stages: Fetch → Decode → Execute → Memory → Write Back
Fetch(IF)
Decode(ID)
Execute(EX)
Memory(MEM)
Write Back(WB)
ADD R1,R2,R3
SUB R4,R1,R5
LOAD R6,[R4]
STORE R6,[R7]
AND R8,R1,R6
Total cycles0
Completed instructions0
CPI0
Pipeline principle

Sequential execution: each instruction finishes before the next starts, so N instructions require N × 5 cycles.

Pipeline execution: multiple instructions occupy different stages at once; ideally CPI ≈ 1.

Principio de funcionamiento de la segmentación

Ejecución secuencial (5 instrucciones, 15 ciclos):
Instr. 1: IF→ID→EX→MEM→WB
Instr. 2:            IF→ID→EX→MEM→WB
Instr. 3:                         IF→ID→EX→MEM→WB
...

Ejecución segmentada (5 instrucciones, 9 ciclos):
Instr. 1: IF→ID→EX→MEM→WB
Instr. 2:    IF→ID→EX→MEM→WB
Instr. 3:       IF→ID→EX→MEM→WB
...

En condiciones ideales, el CPI (ciclos por instrucción) para N instrucciones ≈ 1

6.2 Riesgos de la segmentación (Hazards)

Aunque la segmentación mejora el rendimiento, también introduce problemas de riesgos (Hazards):

TipoCausaSolución
Riesgo estructuralConflicto de recursos hardwareAñadir hardware / escalonar la ejecución
Riesgo de datosUna instrucción posterior necesita el resultado de una anteriorAdelantamiento de datos (forwarding) / burbujas (bubbles) / planificación
Riesgo de controlLas instrucciones de salto modifican el flujo de ejecuciónRanura de retardo (delay slot) / predicción de saltos

7. Resumen: ¿cómo "arranca" un computador?

Recapitulemos todo el proceso usando la terminología técnica:

Al iniciar un programa, el sistema operativo carga el archivo ejecutable del disco a la memoria. La unidad de búsqueda (IF) de la CPU lee la instrucción desde la memoria al registro de instrucción (IR) a través del bus de direcciones. La unidad de control decodifica la instrucción (ID), identifica el tipo de operación y genera las señales de control correspondientes. La unidad de ejecución (EX) realiza las operaciones aritméticas y lógicas; si se necesita acceder a memoria, se hace a través del bus de datos (MEM); finalmente, el resultado se escribe (WB) en el registro o en la memoria. Todo el proceso está impulsado por el reloj, y la secuencia de microoperaciones emitida por la unidad de control coordina el trabajo ordenado de todos los componentes.


Lecturas complementarias

TemaContenido recomendado para profundizar
Arquitectura de computadores"Computer Organization and Design: The Hardware/Software Interface" - Patterson & Hennessy
Microarquitectura de CPU"Computer Systems: A Programmer's Perspective" - Bryant & O'Hallaron
Arquitectura de conjuntos de instruccionesManual de arquitectura ARMv8, Manual Intel x64
Principios de cachéProtocolos de coherencia de caché (MESI), políticas de escritura de caché
Sistemas operativosCapítulo siguiente: "Sistemas operativos"

Siguiente paso

Ahora dominas los principios profesionales de organización de computadores. A continuación puedes seguir aprendiendo: