feat(renaser): Fase 11 — el reloj del sistema como capacidad de host
El userspace gana un sentido del tiempo: hasta ahora una app solo sabía cuántas veces la habían llamado, no cuánto tiempo había pasado. - Capacidad `sys_tiempo_mono() -> u64` — la décima función del host: los milisegundos monótonos desde el arranque. `reloj` expone la cuenta del PIT (100 Hz) como `milisegundos()`; `env` la inyecta. Lectura pura, no toca la memoria del módulo, jamás retrocede. - App nueva `pulso` (`apps/pulso/`, wasm32): un compás visual cuya escena es una función PURA de `sys_tiempo_mono` — sin estado entre fotogramas—. Dos instancias laten al unísono nazcan cuando nazcan. - `GENESIS` crece de 5 a 6 apps; `pulso` es la maestra del escritorio. Verificado en QEMU (sendkey): la barra de `pulso` avanza con el tiempo de pared; un segundo `pulso` lanzado con Alt+N ~15 s después aparece sincronizado con el primero — el compás se rige por el reloj absoluto, no por una cuenta de fotogramas. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -13,7 +13,8 @@
|
||||
// * sys_object_raiz — leer la raiz del grafo;
|
||||
// * sys_object_fijar_raiz — coronar un objeto como raiz;
|
||||
// * sys_estado_cargar — leer el estado persistido de la app (Fase 7c);
|
||||
// * sys_estado_guardar — anclar el estado persistido de la app (Fase 7c).
|
||||
// * sys_estado_guardar — anclar el estado persistido de la app (Fase 7c);
|
||||
// * sys_tiempo_mono — leer el reloj monotono del sistema (Fase 11).
|
||||
//
|
||||
// GUARDARRAIL: el kernel valida MATEMATICAMENTE todo puntero que el modulo le
|
||||
// entrega contra los limites reales de su memoria lineal. No se confia en que
|
||||
@@ -442,5 +443,19 @@ pub(crate) fn enlazar_capacidades(
|
||||
},
|
||||
)?;
|
||||
|
||||
// --- CAPACIDAD 10 :: sys_tiempo_mono() -> u64 ---
|
||||
// El reloj MONOTONO del sistema: milisegundos transcurridos desde el
|
||||
// arranque. Le da al userspace un sentido del tiempo independiente del
|
||||
// ritmo de los fotogramas — una app sabe CUANTO ha pasado, no solo CUANTAS
|
||||
// veces la han llamado—. Jamas retrocede. No toca la memoria del modulo:
|
||||
// es una lectura pura, sin puntero que validar.
|
||||
enlazador.func_wrap(
|
||||
"renaser",
|
||||
"sys_tiempo_mono",
|
||||
|_caller: Caller<'_, ContextoCapacidades>| -> u64 {
|
||||
crate::async_system::reloj::milisegundos()
|
||||
},
|
||||
)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user