← Todas las lecciones

Planificación, núcleos y eventos · Lección 25 de 30 · unos 15 minutos

Planificación cooperativa

Alterna tareas y distingue las políticas de las instrucciones de CPU.

01 / Comprende

Comprender la idea

Una CPU ejecuta una instrucción cada vez. Un planificador elige qué tarea se ejecuta después. Las tareas cooperativas ceden el control voluntariamente; la planificación con desalojo asigna a cada tarea un quantum acotado de instrucciones. El laboratorio de sistemas muestra turnos circulares con quantum ajustable y eventos de tarea explícitos.

El reto de la máquina es un pequeño despachador cooperativo: la tarea A avanza su contador y después la tarea B avanza el suyo. CALL/RETURN expresan esos turnos. SLEEP registra un retraso solicitado; las comprobaciones síncronas no esperan, pero el laboratorio temporizado sí lo respeta.

02 / Prueba

Observar qué ocurre

El orden de salida es 1 y después 101. Ejecuta a una velocidad visible para observar la espera; usa el laboratorio de sistemas para comparar tamaños de quantum.

LOAD 1
CALL taskA
CALL taskB
HALT
taskA: PRINT
SLEEP 500
RETURN
taskB: LOAD 101
PRINT
RETURN

Usa Avanzar un paso para seguir una instrucción cada vez. Puedes modificar el ejemplo y repetirlo.

03 / Reto

Hacerlo funcionar

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.

El comprobador ejecuta el programa actual del editor en una máquina nueva para cada uno de 3 casos. Suministra entradas y memoria inicial; la salida y memoria actuales del laboratorio no deciden el resultado.

INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA:
  #
RETURN
taskB:
  #
RETURN
¿Necesitas una pista?

Cada tarea usa un registro distinto y debe ejecutar RETURN para volver al despachador.

Mostrar una solución resuelta

Lee el programa, predice el efecto de cada instrucción y después avanza paso a paso en el laboratorio.

INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA: LOAD R1
ADD 1
COPY R0 R1
PRINT
SLEEP 0
RETURN
taskB: LOAD R2
ADD 1
COPY R0 R2
PRINT
SLEEP 0
RETURN

Laboratorio de CPU con emojis

Listo · 0 ciclos

Programa con emojis

Escribe LOAD, ADD u otro código de operación y pulsa Espacio para insertar su emoji. Ctrl/⌘ + Intro ejecuta o pausa; Escape pausa; Ctrl/⌘ + ] añade sangría. Tab mueve el foco. Las etiquetas terminan en dos puntos. Los saltos usan direcciones de instrucción que empiezan en cero.

Mapa de instrucciones y puntos de interrupción (0)

Los puntos de interrupción detienen la ejecución antes de una instrucción. Ejecutar permite pasar una vez por el punto en el que se ha detenido; Avanzar un paso ejecuta esa instrucción directamente. Editar el código borra los puntos de interrupción anteriores y el estado de la máquina.

    Registros de la CPU

    R0
    0
    R1
    0
    R2
    0
    R3
    0
    R4
    0
    R5
    0
    R6
    0
    R7
    0
    Contador de programa (PC)
    0
    Puntero de pila (SP)
    255
    Indicadores
    Cero: inactivo · Negativo: inactivo · Desbordamiento: inactivo
    Espera solicitada
    0 ms
    Pilas y marcos de bucle

    SP = 255 − profundidad de datos − profundidad de llamadas. La pila está separada de la memoria.

    Pila de datos (fondo → cima)

    Vacío

    Direcciones de retorno de llamadas (fondo → cima)

    Vacío

    Marcos de bucle

    Vacío

    Salida y entrada

    Ejecuta una instrucción PRINT para ver la salida.

    Entrada en la cola: Vacío

    Memoria · 256 bytes · 0 distintos de cero

    Cada celda muestra dirección:valor. R = leído en este paso; W = escrito en este paso. Selecciona una celda para inspeccionarla o inicializarla antes de ejecutar. Usa las flechas para desplazarte, Inicio/Fin para la fila y Ctrl/⌘ + Inicio/Fin para toda la memoria.

    Reinicia antes de inicializar la memoria. Los valores guardados se ajustan al intervalo 0–255.
    Traza de ejecución · 0 entradas

    Abajo aparecen las entradas recientes. Inspecciona cualquier índice, empezando por cero, para ver una copia completa e independiente del estado anterior y posterior.

    Comprobar tu reto

    Puedes comprobarlo en cualquier momento. Todos los casos deben superar la prueba para registrar la finalización.

    El progreso usa solo almacenamiento local. Permanece en este navegador y nunca se envía a un servidor.