Skip to content

F4.1: sincronización con herencia de prioridad (mutex + semáforo)#79

Merged
guillo93 merged 2 commits into
mainfrom
f4.1-sync-priority-inheritance
Jun 3, 2026
Merged

F4.1: sincronización con herencia de prioridad (mutex + semáforo)#79
guillo93 merged 2 commits into
mainfrom
f4.1-sync-priority-inheritance

Conversation

@guillo93
Copy link
Copy Markdown
Owner

@guillo93 guillo93 commented Jun 3, 2026

Resumen

Primera unidad del roadmap F4 hacia un kernel maduro/industrial. Añade primitivas de sincronización con herencia de prioridad para acotar la inversión de prioridad.

  • Mutex con propiedad y herencia de prioridad de un nivel (el dueño hereda la prioridad efectiva del waiter más alto mientras retiene el lock; se recalcula en cada lock/unlock).
  • Semáforo contador con wait/post.
  • API bloqueante (mutex_lock/sem_wait) y no bloqueante (try_lock/try_wait).
  • Estados nuevos BlockedMutex/BlockedSem; limpieza de propiedad y máscaras de waiters en kill (release_task_sync) para evitar fugas/deadlock.
  • ABI de syscall: IDs 0x20-0x23 + hooks + trampolines SVC userland.
  • sync_selftest no bloqueante en boot (kernel) y wrappers privilegiados cpu_*.
  • Appliance F103: rechaza sync userland con Einval (sin multitarea).

Validación

  • F407 (STM32F407VG): RTT → sync selftest: PASS (mutex + semaphore).
  • F769 (STM32F769NIHx): RTT → sync selftest: PASS (mutex + semaphore).
  • 20 tests host en verde (incluye sync_tests: herencia de prioridad + conteo de semáforo).
  • clippy/doc/fmt limpios en thumbv7em y thumbv7m.

Notas de diseño

  • Herencia de un nivel (no transitiva owner→owner): limitación documentada, aceptable con MAX_TASKS=4.
  • Los tests de PI ejercen la contabilidad vía accesores *_for_test porque MockArch::switch_context es no-op (la API bloqueante haría bucle infinito en host).

🤖 Generated with Claude Code

guillo93 and others added 2 commits June 2, 2026 19:45
Añade primitivas de sincronización al scheduler con herencia de prioridad
para acotar la inversión de prioridad:

- sched.rs: MutexCb/SemCb, estados BlockedMutex/BlockedSem, prioridad base
  vs efectiva, herencia (recompute_priority) en cada lock/unlock, API
  bloqueante (switch_until_ready) y no bloqueante (try_lock/try_wait),
  limpieza de propiedad/waiters en kill (release_task_sync).
- syscall.rs: IDs 0x20-0x23 (MutexLock/Unlock, SemWait/Post), hooks,
  dispatch y trampolines SVC userland.
- rugus-kernel: hooks + wrappers privilegiados cpu_* + sem_init +
  sync_selftest (autodiagnóstico no bloqueante en boot).
- examples F407/F769: log "sync selftest: PASS" en arranque.
- appliance F103: rechaza sync userland con Einval (sin multitarea).
- host-tests: módulo sync_tests (herencia de prioridad + conteo de
  semáforo) y aserciones de dispatch.

Validado: F407 y F769 reportan "sync selftest: PASS (mutex + semaphore)"
por RTT; 20 tests host en verde; clippy/doc/fmt limpios en ambos targets.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@guillo93 guillo93 merged commit da14337 into main Jun 3, 2026
9 checks passed
@guillo93 guillo93 deleted the f4.1-sync-priority-inheritance branch June 3, 2026 00:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant