25. Planificación cooperativa
Alterna tareas y distingue las políticas de las instrucciones de CPU.
Abrir esta lección →
1. Predecir y trazar
Antes de ejecutar el programa de prueba, predice su salida y traza las tres primeras instrucciones ejecutadas. Sigue los registros, indicadores o memoria relevantes. Después avanza paso a paso para comparar.
LOAD 1
CALL taskA
CALL taskB
HALT
taskA: PRINT
SLEEP 500
RETURN
taskB: LOAD 101
PRINT
RETURN
Añadir entradas a la cola: Ninguno
Inicializar memoria: Todos los bytes empiezan en cero
2. Construir y comprobar
Lee un número de rondas entre 0 y 3. Inicia el contador de A en 0 y el de B en 100. En cada ronda, llama a A para incrementar e imprimir su contador y después a B para incrementar e imprimir el suyo.
Tipos de instrucción requeridos: INPUT, LOOP, CALL, RETURN
Programa inicial
INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA:
#
RETURN
taskB:
#
RETURN
Tu programa y notas
3. Explicar la máquina
¿Alternar con CALL/RETURN equivale a planificación con desalojo de hardware?
26. Repartir trabajo entre núcleos
Divide trabajos independientes y combina sus resultados.
Abrir esta lección →
1. Predecir y trazar
Antes de ejecutar el programa de prueba, predice su salida y traza las tres primeras instrucciones ejecutadas. Sigue los registros, indicadores o memoria relevantes. Después avanza paso a paso para comparar.
STORE 1 0
STORE 2 1
STORE 3 2
STORE 4 3
LOAD [0]
MUL R0
COPY R0 R1
LOAD [2]
MUL R0
ADD R1
PRINT
HALT
Añadir entradas a la cola: Ninguno
Inicializar memoria: 0: 1, 1: 2, 2: 3, 3: 4
2. Construir y comprobar
Hay cuatro valores de trabajo inicializados en la memoria 0–3. La tarea par calcula valor[0]² + valor[2]² y la impar valor[1]² + valor[3]². Llama a ambas. Imprime el total par, el impar y el combinado, en ese orden.
Tipos de instrucción requeridos: CALL, MUL, LOAD, ADD
Programa inicial
CALL evenWorker
PRINT
CALL oddWorker
PRINT
LOAD R1
ADD R2
PRINT
HALT
evenWorker:
#
RETURN
oddWorker:
#
RETURN
Tu programa y notas
3. Explicar la máquina
¿Calcular dos totales de forma secuencial demuestra ejecución paralela?
27. Interrupciones y manejadores
Atiende un evento y restaura el valor de la tarea interrumpida.
Abrir esta lección →
1. Predecir y trazar
Antes de ejecutar el programa de prueba, predice su salida y traza las tres primeras instrucciones ejecutadas. Sigue los registros, indicadores o memoria relevantes. Después avanza paso a paso para comparar.
STORE 4 240
LOAD 17
CALL handler
PRINT
LOAD [241]
PRINT
HALT
handler: PUSH
LOAD [240]
ADD 1
STORE 241
POP
RETURN
Añadir entradas a la cola: Ninguno
Inicializar memoria: Todos los bytes empiezan en cero
2. Construir y comprobar
Lee un entero de la tarea principal y después un byte de evento. Guarda el evento en la dirección 240. Llama a un manejador que escriba evento + 1 en la memoria de bytes 241 conservando R0 mediante PUSH/POP. Imprime el valor principal restaurado y después el resultado del evento guardado.
Tipos de instrucción requeridos: INPUT, PUSH, POP, CALL, STORE
Programa inicial
INPUT
COPY R0 R1
INPUT
STORE 240
LOAD R1
CALL handler
PRINT
LOAD [241]
PRINT
HALT
handler:
#
RETURN
Tu programa y notas
3. Explicar la máquina
¿Qué debe restaurar un manejador antes de reanudar la tarea principal?