From e2272c0ed3c87ef53fd5ea5c9e6fd52d4790dcb8 Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 22 May 2026 14:37:14 +0000 Subject: [PATCH] feat: integra renaser (kernel SASOS bare-metal) al monorepo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit renaser —kernel asíncrono de espacio de direcciones único, no-POSIX, `no_std` x86_64— entra al monorepo como su PROPIO workspace de Cargo, no fusionado: usa toolchain nightly, target `x86_64-unknown-none` y `panic = "abort"`, incompatibles con los perfiles globales de brahman. - `renaser/` — copia del proyecto (sin su `.git`; el repo original conserva su historia standalone). Workspace propio con su `rust-toolchain.toml` y `.cargo/`. - `exclude = ["renaser"]` en el workspace de brahman: Cargo lo trata como ajeno. - El kernel de renaser path-depende `mirada-layout` cruzando la frontera de workspace — primer núcleo compartido. Semilla de la Fase 8 (compositor): geometría de teselado compartida, framebuffer nativo de renaser; smithay se queda en el lado Linux. Verificado: `cargo build -p boot` compila kernel + imagen UEFI con mirada-layout enlazado para bare-metal. Co-Authored-By: Claude Opus 4.7 --- Cargo.toml | 7 + renaser/.cargo/config.toml | 19 + renaser/.gitignore | 24 + renaser/ARCHITECTURE.md | 173 +++ renaser/CHANGELOG.md | 457 +++++++ renaser/CLAUDE.md | 88 ++ renaser/Cargo.lock | 1178 +++++++++++++++++++ renaser/Cargo.toml | 89 ++ renaser/DIARIO.md | 226 ++++ renaser/README.md | 48 + renaser/ROADMAP.md | 108 ++ renaser/apps/cronista/Cargo.lock | 7 + renaser/apps/cronista/Cargo.toml | 31 + renaser/apps/cronista/src/lib.rs | 234 ++++ renaser/apps/discola/Cargo.lock | 7 + renaser/apps/discola/Cargo.toml | 30 + renaser/apps/discola/src/lib.rs | 46 + renaser/apps/glotona/Cargo.lock | 7 + renaser/apps/glotona/Cargo.toml | 30 + renaser/apps/glotona/src/lib.rs | 39 + renaser/apps/hello_wasm/Cargo.lock | 7 + renaser/apps/hello_wasm/Cargo.toml | 28 + renaser/apps/hello_wasm/src/lib.rs | 140 +++ renaser/boot/Cargo.toml | 27 + renaser/boot/src/main.rs | 172 +++ renaser/kernel/Cargo.toml | 68 ++ renaser/kernel/assets/app.wasm | Bin 0 -> 1232 bytes renaser/kernel/assets/cronista.wasm | Bin 0 -> 1649 bytes renaser/kernel/assets/discola.wasm | Bin 0 -> 394 bytes renaser/kernel/assets/font.ttf | Bin 0 -> 1435180 bytes renaser/kernel/assets/glotona.wasm | Bin 0 -> 376 bytes renaser/kernel/src/almacen.rs | 292 +++++ renaser/kernel/src/async_system/executor.rs | 103 ++ renaser/kernel/src/async_system/mod.rs | 16 + renaser/kernel/src/async_system/reloj.rs | 101 ++ renaser/kernel/src/async_system/task.rs | 45 + renaser/kernel/src/async_system/teclado.rs | 76 ++ renaser/kernel/src/async_system/waker.rs | 55 + renaser/kernel/src/baliza.rs | 128 ++ renaser/kernel/src/consola.rs | 186 +++ renaser/kernel/src/drivers/disco.rs | 562 +++++++++ renaser/kernel/src/drivers/mod.rs | 15 + renaser/kernel/src/drivers/pci.rs | 76 ++ renaser/kernel/src/gdt.rs | 80 ++ renaser/kernel/src/grafico.rs | 325 +++++ renaser/kernel/src/interrupts.rs | 148 +++ renaser/kernel/src/main.rs | 342 ++++++ renaser/kernel/src/memory/allocator.rs | 42 + renaser/kernel/src/memory/mod.rs | 11 + renaser/kernel/src/pic.rs | 147 +++ renaser/kernel/src/sync.rs | 29 + renaser/kernel/src/texto.rs | 36 + renaser/kernel/src/wasm/env.rs | 349 ++++++ renaser/kernel/src/wasm/mod.rs | 200 ++++ renaser/rust-toolchain.toml | 14 + 55 files changed, 6668 insertions(+) create mode 100644 renaser/.cargo/config.toml create mode 100644 renaser/.gitignore create mode 100644 renaser/ARCHITECTURE.md create mode 100644 renaser/CHANGELOG.md create mode 100644 renaser/CLAUDE.md create mode 100644 renaser/Cargo.lock create mode 100644 renaser/Cargo.toml create mode 100644 renaser/DIARIO.md create mode 100644 renaser/README.md create mode 100644 renaser/ROADMAP.md create mode 100644 renaser/apps/cronista/Cargo.lock create mode 100644 renaser/apps/cronista/Cargo.toml create mode 100644 renaser/apps/cronista/src/lib.rs create mode 100644 renaser/apps/discola/Cargo.lock create mode 100644 renaser/apps/discola/Cargo.toml create mode 100644 renaser/apps/discola/src/lib.rs create mode 100644 renaser/apps/glotona/Cargo.lock create mode 100644 renaser/apps/glotona/Cargo.toml create mode 100644 renaser/apps/glotona/src/lib.rs create mode 100644 renaser/apps/hello_wasm/Cargo.lock create mode 100644 renaser/apps/hello_wasm/Cargo.toml create mode 100644 renaser/apps/hello_wasm/src/lib.rs create mode 100644 renaser/boot/Cargo.toml create mode 100644 renaser/boot/src/main.rs create mode 100644 renaser/kernel/Cargo.toml create mode 100755 renaser/kernel/assets/app.wasm create mode 100755 renaser/kernel/assets/cronista.wasm create mode 100755 renaser/kernel/assets/discola.wasm create mode 100644 renaser/kernel/assets/font.ttf create mode 100755 renaser/kernel/assets/glotona.wasm create mode 100644 renaser/kernel/src/almacen.rs create mode 100644 renaser/kernel/src/async_system/executor.rs create mode 100644 renaser/kernel/src/async_system/mod.rs create mode 100644 renaser/kernel/src/async_system/reloj.rs create mode 100644 renaser/kernel/src/async_system/task.rs create mode 100644 renaser/kernel/src/async_system/teclado.rs create mode 100644 renaser/kernel/src/async_system/waker.rs create mode 100644 renaser/kernel/src/baliza.rs create mode 100644 renaser/kernel/src/consola.rs create mode 100644 renaser/kernel/src/drivers/disco.rs create mode 100644 renaser/kernel/src/drivers/mod.rs create mode 100644 renaser/kernel/src/drivers/pci.rs create mode 100644 renaser/kernel/src/gdt.rs create mode 100644 renaser/kernel/src/grafico.rs create mode 100644 renaser/kernel/src/interrupts.rs create mode 100644 renaser/kernel/src/main.rs create mode 100644 renaser/kernel/src/memory/allocator.rs create mode 100644 renaser/kernel/src/memory/mod.rs create mode 100644 renaser/kernel/src/pic.rs create mode 100644 renaser/kernel/src/sync.rs create mode 100644 renaser/kernel/src/texto.rs create mode 100644 renaser/kernel/src/wasm/env.rs create mode 100644 renaser/kernel/src/wasm/mod.rs create mode 100644 renaser/rust-toolchain.toml diff --git a/Cargo.toml b/Cargo.toml index f4ed048..5209af0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -302,6 +302,13 @@ members = [ "crates/apps/charka", ] +# renaser — el SO bare-metal SASOS. Vive en el mismo repo pero es su +# PROPIO workspace de Cargo: usa toolchain nightly, target +# `x86_64-unknown-none` y `panic = "abort"`, incompatibles con los +# perfiles globales de este workspace. Cargo lo trata como ajeno; los +# crates compartidos se referencian por `path` cruzando la frontera. +exclude = ["renaser"] + [workspace.package] version = "0.1.0" edition = "2021" diff --git a/renaser/.cargo/config.toml b/renaser/.cargo/config.toml new file mode 100644 index 0000000..e7ab80c --- /dev/null +++ b/renaser/.cargo/config.toml @@ -0,0 +1,19 @@ +# ============================================================================= +# renaser :: configuracion de cargo +# ----------------------------------------------------------------------------- +# El kernel se compila contra el target NATIVO precompilado `x86_64-unknown-none` +# (bare-metal, soft-float, sin SSE). No hay JSON propio ni `build-std`: cero +# burocracia del compilador, aislamiento de arquitectura sin friccion. +# ============================================================================= + +[unstable] +# Dependencias de artefacto (RFC 3028): permiten que el miembro `boot` ordene a +# cargo compilar el kernel para `x86_64-unknown-none` de forma automatica y +# reciba la ruta de su ELF. Sigue siendo una funcion inestable (nightly). +bindeps = true + +[alias] +# Compila unicamente el kernel, en aislamiento de arquitectura. +kernel = "build -p kernel --target x86_64-unknown-none" +# Construye la imagen UEFI y abre QEMU (equivale a `cargo run -p boot`). +qemu = "run -p boot" diff --git a/renaser/.gitignore b/renaser/.gitignore new file mode 100644 index 0000000..39e8e2a --- /dev/null +++ b/renaser/.gitignore @@ -0,0 +1,24 @@ +# ============================================================================= +# renaser :: archivos que NO se versionan +# ============================================================================= + +# Artefactos de compilacion de Rust — kernel, boot y apps WASM. +/target +/kernel/target +/apps/*/target + +# Bloqueo de dependencias del kernel: se genera al compilarlo en aislamiento. +# La verdad de versiones la fija el Cargo.lock raiz — el kernel es dependencia +# de artefacto de `boot` y se resuelve con el. +/kernel/Cargo.lock + +# Ajustes locales del entorno de desarrollo (personales, no compartidos). +/.claude/settings.local.json + +# Capturas temporales de QEMU. +*.ppm +*.png.tmp + +# Borrador de trabajo local — puede contener notas y credenciales; nunca se +# versiona. (Fue subido por error y purgado del historial; ver el README.) +/renaser.txt diff --git a/renaser/ARCHITECTURE.md b/renaser/ARCHITECTURE.md new file mode 100644 index 0000000..acf60fa --- /dev/null +++ b/renaser/ARCHITECTURE.md @@ -0,0 +1,173 @@ +# renaser — Arquitectura + +Este documento describe la arquitectura del kernel `renaser` subsistema a +subsistema. Para el estado por fases, ver `ROADMAP.md`. + +## 1. Filosofía + +renaser es un **SASOS** — *Single Address Space Operating System*. No hay un +espacio de direcciones por proceso ni cambios de contexto de hardware: todo el +sistema —kernel y aplicaciones— comparte una única RAM plana. + +El aislamiento NO lo da la MMU ni los anillos de privilegio de la CPU. Lo da el +**software**: las aplicaciones se distribuyen como bytecode WebAssembly y se +ejecutan dentro de un intérprete que acota matemáticamente cada acceso a +memoria. Una aplicación solo puede hacer aquello para lo que el kernel le haya +inyectado una *capacidad* (una función de host). Lo que no está importado no +tiene camino físico que recorrer. + +La interfaz es **visual desde el primer microsegundo**. No hay TTY; el texto se +rasteriza como gráfico vectorial. "El texto es un caso particular del dibujo." + +## 2. La cadena de arranque + +``` +Firmware UEFI → crate `bootloader` 0.11 → kernel::_start → kernel_main +``` + +El miembro `boot/` (que corre en el **anfitrión**) toma el ELF del kernel, +lo fusiona con el cargador `bootloader` 0.11 en una imagen de disco UEFI GPT y +la lanza en QEMU con el firmware OVMF. El cargador deja la CPU en modo largo de +64 bits, mapea el kernel y le entrega una `BootInfo` con el framebuffer GOP. + +## 3. Estructura del espacio de trabajo + +El workspace tiene **un solo miembro**, `boot`. El `kernel` y las `apps` están +**excluidos** a propósito: + +- El kernel es `#![no_std] #![no_main]` y define su propio `_start`. Si fuese + miembro del workspace, `cargo build` intentaría compilarlo para el anfitrión + y fallaría por un símbolo `_start` duplicado con el `crt0` del sistema. +- Por eso el kernel se construye **solo** como *dependencia de artefacto* + (RFC 3028) de `boot`, que le fija el target `x86_64-unknown-none`. +- Las apps WASM tienen su propio target (`wasm32-unknown-unknown`) y se + compilan aparte. + +El kernel usa el target **nativo precompilado** `x86_64-unknown-none`: sin +target JSON propio, sin `build-std`. Soft-float y sin SSE, para que las +interrupciones no corrompan registros de punto flotante. + +## 4. Subsistemas del kernel + +### `grafico` — el sustrato visual +`Color` (RGB de 24 bits, independiente del hardware), `Pantalla` (el +framebuffer GOP físico, envuelto en seguridad) y `Lienzo` (el búfer intermedio +en RAM). Toda composición ocurre en el `Lienzo`; `Pantalla::presentar` lo +vuelca de un solo gesto con escrituras volátiles — **doble búfer**, sin +desgarros. `codificar` traduce un `Color` al formato nativo del framebuffer. + +### `consola` — la superficie de texto e imagen +Une `Lienzo` + `Pantalla` + una pluma de escritura. Rasteriza glifos con +`fontdue` y los funde sobre el lienzo mezclando por cobertura (anti-aliasing). +También vuelca fotogramas crudos del userspace WASM. Es global, tras un `Mutex`. + +### `baliza` — la red de seguridad visual +Publica de forma atómica y sin cerrojos los datos mínimos del framebuffer. Los +manejadores `#[panic_handler]` y `#[alloc_error_handler]` los usan para pintar +una franja de advertencia —**roja** si el sistema colapsa, **naranja** si el +heap se agota— escribiendo directo sobre el silicio, sin confiar en el heap ni +en estructura dinámica alguna. + +### `gdt` — cimientos del manejo de fallos +GDT propia con segmentos de código y datos del kernel, y un TSS cuyo único +cometido es alojar un **stack de emergencia** (IST) para el doble fallo: ni un +desbordamiento de la pila del kernel impide su diagnóstico. + +### `interrupts` — la tabla de reflejos +IDT con manejadores de excepción de CPU (breakpoint recuperable; el resto, +fatales → `panic!`) e interrupciones de hardware. El doble fallo se atiende +sobre el stack de emergencia del TSS. + +### `pic` — el latido del hardware +Remapea el par 8259 (PIC) fuera del rango de las excepciones de CPU y programa +el temporizador de intervalos (PIT). El teclado (IRQ1) deposita scancodes en +una cola lock-free. `desenmascarar` abre una línea de IRQ concreta —la del +disco, descubierta en tiempo de ejecución (Fase 6.2)—. + +### `drivers` — el hardware que el kernel conquista (Fases 6.1, 6.2) +A diferencia del framebuffer o el temporizador —que el firmware sirve en +bandeja—, el disco hay que DESCUBRIRLO y reclamarlo. +- `pci` — `CamPuertos`: acceso al espacio de configuración del bus PCI por el + mecanismo #1 (puertos `0xCF8`/`0xCFC`); `linea_irq` lee la IRQ del dispositivo. +- `disco` — el disco virtio-blk. Un asignador de marcos por **mapa de bits** + —con liberación real— reparte páginas físicas para el DMA; `KernelHal` + implementa el `trait Hal` de `virtio-drivers` (traducción de direcciones, + memoria rebote para el DMA); el `VirtIOBlk` se monta una vez y persiste tras + un `Mutex`. La E/S de bloques es **asíncrona** (Fase 6.2): `EsperaDisco` es un + `Future` que envía la petición por la API no bloqueante de `virtio-drivers`, + cede la CPU y se reanuda con la IRQ del disco (`atender_irq`). `bloquear_en` + conduce ese `Future` desde los contextos síncronos durmiendo la CPU con + `hlt`; sobre él, `leer_sectores`/`escribir_sectores` sirven al grafo de + objetos. La IRQ del disco se enruta por el PIC 8259, no por el IOAPIC. + +### `almacen` — el grafo de objetos direccionado por contenido (Fase 6.1c) +renaser no tiene un sistema de archivos plano POSIX: tiene un DAG de objetos. +Un `Objeto` es una carga útil de bytes y una lista de aristas (hashes de +hijos). La identidad de un objeto es el hash BLAKE3 de su forma serializada +(`postcard`) — de ahí integridad (un objeto se verifica al leerlo) y +deduplicación (contenido idéntico, un solo registro). El disco es un **log**: +el sector 0 es el superbloque (magia, versión, cursor, raíz); tras él se anexan +los registros de objetos. Un índice hash→sector se reconstruye al arrancar +recorriendo el log. Las capacidades `sys_object_*` exponen el grafo al +userspace. + +### `memory` — el heap dinámico +`linked_list_allocator` como `#[global_allocator]` sobre una región estática de +64 MiB en `.bss`. Desbloquea `alloc::*` — `Box`, `Vec`, `BTreeMap`, `Arc`. + +### `async_system` — el reactor cooperativo +- `task` — `Task`: un `Future` anclado (`Pin>`) con `TaskId`. +- `executor` — el `Executor`: censo de tareas, cola de listas, y un `hlt` + controlado cuando no hay trabajo. +- `waker` — un `Waker` que reinyecta el `TaskId` en la cola al despertar. +- `teclado` — los canales de scancodes. Cada app abre el suyo; la IRQ1 **difunde** + cada scancode a todos, de modo que varias apps reciben la entrada en paralelo. +- `reloj` — convierte la IRQ0 (PIT, 100 Hz) en el `Future` `EsperaFrame`, que se + resuelve en el siguiente pulso. Es el **compás de los fotogramas**: una tarea + WASM hace su trabajo de un fotograma y `.await`-ea el siguiente. + +Las interrupciones de hardware no conmutan el contexto de la CPU: **despiertan +tareas**. El kernel avanza cooperativamente. + +### `texto` — tipografía vectorial +Empotra un `.ttf` en el binario (`include_bytes!`) y lo rasteriza con `fontdue` +glifo a glifo, bajo demanda. + +### `wasm` — el escudo de aislamiento +- `mod` — el runtime y la `AplicacionWasm`: una instancia **persistente** entre + fotogramas (`Store` + `TypedFunc<(), ()>` + región). El ABI del userspace es + `init()` (una vez) y `tick()` (un fotograma, y retorna). Dos guardarraíles + acotan a cada app: el **temporal** —un presupuesto de **combustible** (`fuel`) + por `tick`; agotarlo la desaloja (baliza púrpura)— y el **espacial** —un techo + de memoria lineal vía `Store::limiter`; rebasarlo la desaloja (baliza + amarilla)—. En ambos casos `wasmi` lanza una trampa, el kernel recupera el + mando y el sistema no sufre. El `Drop` de `AplicacionWasm` reconcilia el ciclo + de vida: da de baja su canal de teclado. +- `env` — la **matriz de capacidades**: las funciones de host que el módulo + WASM puede invocar. Hoy son siete: + - `sys_render_frame(ptr, len)` — compone un fotograma dentro de la **región** + de pantalla asignada a la app. El kernel valida **matemáticamente** que + `[ptr, ptr+len)` cae dentro de la memoria lineal del módulo, y que el + tamaño es el de la región, antes de leer un byte; si no, aborta la app. + - `sys_get_scancode()` — entrega, sin bloquear, el siguiente scancode del + canal de teclado **propio** de la app. + - `sys_object_put` / `sys_object_datos` / `sys_object_hijo` / + `sys_object_raiz` / `sys_object_fijar_raiz` — el acceso al grafo de objetos + persistente (ver `almacen`): grabar un objeto, leer su carga útil, recorrer + sus aristas, y leer o fijar la raíz del DAG. Cada puntero que la app + entrega se valida contra su memoria lineal, igual que en `sys_render_frame`. + +Todo puntero inválido aborta la app —es su culpa: el `Error` se traduce en una +trampa de WASM, la app se desaloja y el resto del sistema sigue—. Un fallo del +almacenamiento, en cambio, no es culpa de la app: se le devuelve un código de +error que ella decide cómo afrontar. + +## 5. Restricciones de ingeniería + +- **Escrituras volátiles** obligatorias para framebuffer y MMIO. +- **`unsafe`** confinado en células mínimas, cada una con un contrato + `SEGURIDAD:` y envuelta en una abstracción segura. `unsafe_op_in_unsafe_fn` + está en `deny`. +- **Alineación**: 16 bytes para estructuras genéricas; 4096 (página) para + buffers de asignador y el lienzo de respaldo. +- **`no_std` estricto**: `core` + `alloc`; nada de `std`. diff --git a/renaser/CHANGELOG.md b/renaser/CHANGELOG.md new file mode 100644 index 0000000..db1b321 --- /dev/null +++ b/renaser/CHANGELOG.md @@ -0,0 +1,457 @@ +# Registro de cambios — renaser + +Registro técnico detallado, fase a fase, en orden cronológico. Formato +inspirado en *Keep a Changelog*. Para la crónica en lenguaje llano, ver +`DIARIO.md`; para el estado y los planes, `ROADMAP.md`. + +--- + +## Fase 1 — El primer microsegundo — 2026-05-21 + +### Infraestructura +- Espacio de trabajo Cargo, `kernel/Cargo.toml`, `.cargo/config.toml`, + `rust-toolchain.toml`. +- Target inicial: especificación JSON propia `x86_64-renaser.json` — PIC, + soft-float, sin SSE, enlazador `lld`. + +### Añadido +- `kernel/src/main.rs`: punto de entrada con el macro `entry_point!` de + `bootloader_api` 0.11. +- Adopción y verificación con seguridad de tipos del framebuffer GOP (ancho, + alto, formato de píxel, *stride*). +- Lienzo intermedio estático de 8 MiB en `.bss`, alineado a página: la técnica + de doble búfer para evitar parpadeos. +- `#[panic_handler]` que dibuja una franja roja directamente sobre el + framebuffer mediante escrituras volátiles. +- Dependencias: `bootloader_api` 0.11, `x86_64` 0.15, `embedded-graphics` 0.8. + +### Notas +- Corrección clave: `bootloader` (constructor de imagen, lado anfitrión) no es + `bootloader_api` (la API `no_std` que consume el kernel). + +--- + +## Fase 1.5 — Empaquetado y arranque — 2026-05-21 + +### Cambiado +- Migración del target del kernel: de la JSON propia `x86_64-renaser.json` al + target nativo precompilado `x86_64-unknown-none`. Elimina `build-std` y la + burocracia de compilador asociada. + +### Añadido +- Miembro `boot/`: orquestador de anfitrión. Dependencia de artefacto + (RFC 3028) sobre el kernel; construcción de la imagen de disco UEFI con + `bootloader::UefiBoot`; lanzador de QEMU. + +### Toolchain +- Instalación de la toolchain nightly (la máquina solo tenía la estable). + +### Corregido +- Los nightly recientes exigen `-Zjson-target-spec` para usar specs JSON + (resuelto al migrar al target nativo). +- Sintaxis del acelerador de QEMU: `-machine q35,accel=kvm:tcg`. + +### Verificado +- Arranque en QEMU: superficie índigo limpia a 1280×800. +- Baliza de pánico (franja roja) confirmada inyectando un pánico de prueba. + +--- + +## Fase 2.0 — Cimientos del manejo de fallos — 2026-05-21 + +### Añadido +- `kernel/src/gdt.rs`: GDT propia, TSS y un stack de emergencia (IST) + reservado para el manejador de doble fallo. +- `kernel/src/interrupts.rs`: IDT con manejadores de excepción de CPU. El + breakpoint (#BP) es recuperable; #UD, #DE, #GP, #PF y #DF son fatales y + encienden la baliza. +- `#![feature(abi_x86_interrupt)]`. + +### Corregido +- La GDT debe recargar los registros SS/DS/ES con un segmento de datos del + kernel: el cargador deja `SS = 0x10`, valor que en la GDT nueva pasa a ser el + descriptor del TSS; el primer `iretq` de una rutina de excepción provocaba un + #GP. Diagnosticado con la traza `-d int` de QEMU. + +### Verificado +- Excepción `int3` atrapada y superada; línea-latido teal dibujada como prueba. + +--- + +## Fase 2.1 — Interrupciones de hardware — 2026-05-21 + +### Añadido +- `kernel/src/pic.rs`: remapeo del par 8259 (PIC) fuera del rango de las + excepciones (vectores 0x20+); programación del temporizador PIT a 100 Hz; + IRQ1 de teclado. +- Bucle de render en `kernel_main`, despertado por el temporizador, en + sustitución del `hlt` estático. + +### Verificado +- La línea-latido se anima (temporizador en marcha); las pulsaciones de teclado + inyectadas cambian el cuadro-eco (teclado en marcha). + +--- + +## Fase 3 — Memoria dinámica y reactor asíncrono — 2026-05-21 + +### Añadido +- `kernel/src/memory/`: `linked_list_allocator` como `#[global_allocator]` + sobre una región estática en `.bss`. +- `#[alloc_error_handler]`: franja naranja de agotamiento de memoria. + `#![feature(alloc_error_handler)]`. +- `kernel/src/async_system/`: reactor cooperativo — `Executor`, `Task`/`TaskId`, + `Waker` (vía `alloc::task::Wake`) y `ScancodeStream`. +- `kernel/src/texto.rs`: rasterización de tipografía vectorial con `fontdue`; + TTF Adwaita Mono empotrada con `include_bytes!`. +- Dependencias: `linked_list_allocator` 0.10, `spin` 0.9, `crossbeam-queue` + 0.3, `futures-util` 0.3, `fontdue` 0.9. + +### Cambiado +- Heap ampliado de 16 MiB a 64 MiB: `fontdue`, al analizar una tipografía real, + agotaba los 16 MiB iniciales. El `#[alloc_error_handler]` lo delató pintando + la franja naranja — el guardarraíl funcionó en silicio real. + +### Corregido +- El modo `no_std` de `fontdue` está condicionado a su feature `hashbrown`; sin + ella recae en `std`. Se fija `default-features = false, features = ["hashbrown"]`. + +### Verificado +- Rótulo de bienvenida rasterizado al arranque; el texto tecleado aparece en vivo. + +--- + +## Fase 4 — El escudo de aislamiento WASM — 2026-05-21 + +### Añadido +- `kernel/src/wasm/`: intérprete `wasmi` 1.0.9 en modo `no_std`. `env.rs` + define la matriz de capacidades — exactamente dos funciones de host: + `sys_render_frame(ptr, len)`, con validación infranqueable de los límites de + la memoria lineal, y `sys_get_scancode()`. +- `apps/hello_wasm/`: primera aplicación del userspace — módulo + `wasm32-unknown-unknown` (cdylib), un cuadrado móvil dirigido por teclado. Se + empotra en el kernel con `include_bytes!`. +- Dependencia: `wasmi` 1.0. + +### Cambiado +- El kernel se EXCLUYE del espacio de trabajo (`exclude = ["kernel", "apps"]`): + al añadir `wasmi`, `cargo build` intentaba compilar el kernel para el + anfitrión y fallaba por un símbolo `_start` duplicado. El kernel pasa a + construirse únicamente como dependencia de artefacto de `boot`. + +### Corregido +- `wasmi` `no_std` necesita `default-features = false, features = ["hash-collections"]`. +- `wasmi` 1.0.9 usa `Linker::instantiate_and_start` (no existe `instantiate`). + +### Verificado +- La aplicación WASM pinta su propia superficie y responde a las pulsaciones de + teclado inyectadas, sin más vía hacia el kernel que las dos capacidades. + +--- + +## Mantenimiento — Estructura, documentación e integración — 2026-05-21 + +### Cambiado +- Refactorización: `main.rs` dividido de 692 a ~155 líneas. Se extraen los + módulos `sync.rs`, `grafico.rs`, `consola.rs` y `baliza.rs`. Sin cambios de + comportamiento (verificado en QEMU). + +### Añadido +- Documentación: `CLAUDE.md`, `README.md`, `ARCHITECTURE.md`, `ROADMAP.md`, + `CHANGELOG.md` y `DIARIO.md`. +- Integración con git: repositorio inicializado, remoto `origin` en Gitea, + `.gitignore`. + +### Seguridad +- `renaser.txt` —un borrador de trabajo que contenía una credencial— se subió + por error en el commit inicial. Se purgó de todo el historial con + `git filter-branch` y se reescribió el remoto con `push --force`. La + credencial expuesta debe rotarse. + +--- + +## Fase 5 — Multitarea cooperativa, guardarrail de fuel y reloj — 2026-05-22 + +Unificación de la Fase 3 (reactor) y la Fase 4 (WASM): el userspace deja de ser +una sola app que monopoliza la CPU y pasa a ser un conjunto de aplicaciones +cooperativas, aisladas también en el TIEMPO. + +### Añadido +- `kernel/src/async_system/reloj.rs`: convierte la IRQ0 (PIT, 100 Hz) en una + primitiva asíncrona. `CONTADOR_PULSOS` (`AtomicU64`) y `EsperaFrame`, un + `Future` que se resuelve en el siguiente pulso — la unidad de cesión + cooperativa del userspace. Censo de wakers tras `Mutex`, drenado por la IRQ0. +- `kernel/src/wasm`: ABI de fotograma. `AplicacionWasm` —instancia PERSISTENTE + entre fotogramas (`Store` + `TypedFunc<(), ()>` + región)— sustituye al + `wasm::ejecutar` de fuego-y-olvido. El módulo del userspace exporta ahora + `init()` (una vez) y `tick()` (un fotograma, y retorna). +- Escudo de combustible: `Engine` con `Config::consume_fuel(true)` y + `CompilationMode::Eager` (el `fuel` mide solo ejecución). Presupuesto recargado + antes de cada `tick` — `FUEL_ARRANQUE` (20 M) y `FUEL_FOTOGRAMA` (2 M). +- `kernel/src/wasm/env.rs`: capacidad `sys_render_frame` con **regiones de + dibujo** — cada fotograma se compone desplazado por el `(offset_x, offset_y)` + de la app; un tamaño ajeno a la región se rechaza. Canal de teclado **por + aplicación**: la IRQ1 difunde cada scancode a TODOS los canales, de modo que + varias apps reciben la entrada en paralelo sin robársela. +- `kernel/src/grafico.rs`: `RegionPantalla` y `Color::DESALOJO` (púrpura). +- `apps/discola/`: aplicación WASM construida para portarse mal — su `tick` es + un bucle cerrado. Demuestra el guardarrail de fuel en vivo. + +### Cambiado +- `apps/hello_wasm`: migrada al ABI `init`/`tick`; su lienzo se dimensiona a la + región (480×560). El estado del cuadrado persiste en su memoria lineal. +- `interrupts.rs`: la IRQ0 avanza el `reloj`; la IRQ1 difunde a los canales. +- `consola.rs`: `volcar_marco` compone en una sub-región; `pintar_desalojo` + tatúa la baliza púrpura. +- Contención de fallos: el subsistema WASM ya no usa `.expect()`. Toda falla + —carga, instanciación, desbordamiento, agotamiento de fuel— se devuelve como + `Result`; la tarea desaloja la app (baliza púrpura) y el kernel sigue vivo. + +### Verificado +- QEMU: tres apps concurrentes. Dos instancias de `hello_wasm` (mismo bytecode, + regiones izquierda y derecha) renderizan y responden a W/A/S/D **en paralelo**, + con movimiento idéntico. La app díscola es desalojada en su primer fotograma + por agotamiento de combustible: su región queda púrpura y el sistema —kernel y + apps vecinas— no sufre un solo sobresalto. + +--- + +## Fase 6.0 — Cuotas de memoria y ciclo de vida del userspace — 2026-05-22 + +El aislamiento de las aplicaciones, que la Fase 5 hizo temporal (combustible), +se completa ahora en la dimensión espacial (memoria) y se cierra la fuga de +recursos del ciclo de vida. + +### Añadido +- Techo de memoria lineal por aplicación: `4 MiB`. `wasm/mod.rs` construye un + `StoreLimits` (`StoreLimitsBuilder::memory_size` + `trap_on_grow_failure`) y lo + liga al `Store` con `Store::limiter`. Un `memory.grow` que rebase la cuota se + convierte en trampa; el kernel la captura y desaloja la app. +- `FallaApp::SinMemoria` y `Color::DESALOJO_MEMORIA` (amarillo pálido). El + desalojo distingue la causa por color: púrpura (tiempo/aborto), amarillo + (memoria). La clasificación es robusta — `Error::as_trap_code()` da un código + público y unívoco: `TrapCode::GrowthOperationLimited`. +- `Drop` para `AplicacionWasm`: al morir una app desalojada, su canal de teclado + se da de baja del censo de difusión de la IRQ1 — cierra la fuga señalada en la + Fase 5. `async_system::teclado` se reorganiza en `crear_canal` / + `registrar_canal` / `cerrar_canal`; el canal se inscribe al FINAL de la carga, + de modo que una carga fallida no deja canales huérfanos. +- `apps/glotona/`: aplicación WASM construida para devorar memoria — su `tick` + invoca `memory.grow` sin freno. Demuestra el guardarrail espacial en vivo. + +### Verificado +- QEMU: cuatro apps concurrentes. Las dos `hello_wasm` renderizan y responden al + teclado en paralelo; la app díscola es desalojada por combustible (franja + púrpura) y la app glotona por cuota de memoria (franja amarilla), ambas en su + primer fotograma, sin que el kernel ni las apps honradas se inmuten. + +--- + +## Fase 6.1a — Sonda PCI y disco de pruebas — 2026-05-22 + +Primer paso de la estrategia incremental hacia el almacenamiento: derribar el +muro del descubrimiento de hardware antes de diseñar nada encima. + +### Añadido +- `kernel/src/drivers/`: nuevo subsistema de drivers. `pci.rs` enumera el bus + PCI por fuerza bruta mediante el mecanismo de configuración #1 —puertos de E/S + `0xCF8` (dirección) y `0xCFC` (datos)—; recorre buses y dispositivos leyendo + el Vendor/Device ID, y localiza el disco virtio-blk (vendor `0x1AF4`, device + `0x1001`/`0x1042`), devolviendo su ubicación y sus seis BARs. +- `kernel_main`: tras fundar la consola, sondea el bus PCI y deja constancia + visual del hallazgo. + +### Cambiado +- `boot/src/main.rs`: forja un disco de pruebas `target/disk.img` (fichero + disperso de 32 MiB; se respeta si ya existe) y lo adjunta a QEMU como + `virtio-blk-pci`. **Corrección de plataforma:** la máquina `q35` es x86_64 y + exige la transmisión PCI; `virtio-blk-device` (su gemelo MMIO) es de ARM. + +### Verificado +- QEMU: el kernel enumera el bus y reporta en pantalla + `virtio-blk en bus 0 dev 3 :: BAR0 E/S 0x6000` — un dispositivo virtio-blk + transicional (device `0x1001`), con su BAR0 en espacio de E/S. El muro del + descubrimiento PCI queda derribado; las cuatro apps del userspace siguen + operando sin alteración. + +--- + +## Fase 6.1b — HAL, DMA y lectura del sector 0 — 2026-05-22 + +Segundo paso del sustrato de almacenamiento: el diálogo real con el disco. El +kernel monta el dispositivo virtio-blk y lee su primer sector por DMA. + +### Añadido +- Dependencia `virtio-drivers` 1.13 (`no_std`, `default-features = false`, + feature `alloc`). +- `kernel/src/drivers/disco.rs`: + - **Asignador de marcos** «bump» — reparte páginas físicas de 4 KiB para el + DMA, tomadas de la mayor región de RAM libre que el cargador reporta. No + libera: suficiente para una sonda (la gestión fina llegará con el grafo). + - **`KernelHal`** — implementa el `trait Hal` de `virtio-drivers`. `dma_alloc` + entrega marcos físicos a cero; `mmio_phys_to_virt` traduce los BARs (el + cargador mapea ≥ 4 GiB de memoria física, que cubre todo MMIO de PCI); + `share`/`unshare` usan un buffer rebote para que cualquier región del kernel + pueda viajar al dispositivo. + - **`montar_y_leer_sector0`** — enumera el bus, habilita E/S + memoria + + bus-master, monta el `PciTransport` y el `VirtIOBlk`, y lee el sector 0 por + **sondeo** del *used ring* (sin depender aún de interrupciones). +- `kernel/src/drivers/pci.rs`: reescrito como `CamPuertos`, la implementación de + `ConfigurationAccess` de `virtio-drivers` sobre los puertos `0xCF8`/`0xCFC`. +- `kernel_main` captura `physical_memory_offset` y la región de RAM de + `BootInfo`, funda el subsistema de disco y reporta el resultado de la sonda. + +### Cambiado +- `boot/src/main.rs`: al forjar el disco de pruebas graba una firma + (`renaser-6.1b`) en su sector 0 — el testigo del viaje de ida y vuelta. + +### Verificado +- QEMU: el kernel reporta `virtio-blk :: bus 0 dev 3 :: 65536 sectores :: + s0=renaser-6.1b`. La firma grabada por el anfitrión se lee de vuelta intacta: + descubrimiento PCI, transporte, DMA y transferencia funcionan de punta a + punta. Las cuatro apps del userspace siguen operando sin alteración. + +--- + +## Fase 6.1c — El grafo de objetos direccionado por contenido — 2026-05-22 + +Tercer y último paso del sustrato de almacenamiento. El disco deja de ser un +dispositivo que se sondea y pasa a ser una MEMORIA QUE PERDURA: un grafo +dirigido acíclico de objetos direccionados por contenido — no un sistema de +archivos plano POSIX. + +### Añadido +- `kernel/src/almacen.rs` — el grafo de objetos: + - **Objeto** — una carga útil de bytes (`datos`) y una lista de aristas + (`hijos`: hashes de otros objetos). Las aristas hacen del almacén un DAG. + - **Direccionamiento por contenido** — la identidad de un objeto es el hash + BLAKE3 de su forma serializada. De ello se siguen dos propiedades que un + sistema de archivos jamás regala: INTEGRIDAD (el contenido leído se + rehashea y se verifica contra el hash pedido) y DEDUPLICACIÓN (contenido + idéntico produce el mismo hash; se almacena una sola vez). + - **Disco como log** — el sector 0 es el superbloque (magia `RENASGRF`, + versión, cursor del log y hash de la raíz); tras él se anexan los registros + de objetos, `[longitud u32 LE][payload postcard][relleno a cero]`. Un + índice en memoria (hash -> sector) se reconstruye al arrancar recorriendo + el log de cabo a rabo. + - API: `init` —monta el disco, lee o forja el superbloque, reconstruye el + índice—, `almacenar`, `recuperar`, `raiz` y `fijar_raiz`. +- Cinco capacidades nuevas del host en `wasm/env.rs` — `sys_object_put`, + `sys_object_datos`, `sys_object_hijo`, `sys_object_raiz` y + `sys_object_fijar_raiz` —, con la misma validación infranqueable de límites + de la memoria lineal que `sys_render_frame`. Distinguen dos clases de fallo: + un puntero inválido ABORTA la app —es su culpa, se traduce en trampa—; un + fallo del almacenamiento le devuelve un código de error negativo —no lo es—. +- `apps/cronista/` — la primera aplicación del userspace que escribe en el + almacenamiento PERSISTENTE. En cada arranque consulta la raíz del grafo, + graba un objeto nuevo —`datos`: el número de arranque; `hijos`: la raíz + anterior, el eslabón del DAG— y lo corona como raíz. Pinta una celda por + arranque registrado y un testigo de integridad que recorre la cadena entera. +- Dependencias: `serde` 1 y `postcard` 1 (serialización binaria compacta, el + formato que viaja al disco) y `blake3` 1 (la función hash). Las tres `no_std`. + +### Cambiado +- `kernel/src/drivers/disco.rs` reescrito para un sustrato PERMANENTE: + - El asignador de marcos «bump» de la Fase 6.1b cede el paso a uno de MAPA DE + BITS con liberación real. `dma_dealloc` y `unshare` devuelven los marcos a + la arena: un almacén vivo, con su trasiego incesante de DMA, ya no la agota. + - El `VirtIOBlk` deja de montarse y destruirse en cada llamada: se monta UNA + vez y queda tras un `Mutex` global. `leer_sectores` / `escribir_sectores` + exponen la E/S de bloques — el disco deja de ser de solo lectura. Se retira + `montar_y_leer_sector0`, la sonda de un solo uso de la Fase 6.1b. +- `boot/src/main.rs`: el disco de pruebas pasa a ser el disco de objetos. Ya + no se le graba una firma — se forja virgen, a cero, y el kernel lo formatea + la primera vez que no halle el superbloque. +- `main.rs`: `informar_disco` (la sonda de la Fase 6.1b) se sustituye por + `informar_almacen`, que funda el grafo. El userspace pasa de cuatro a cinco + apps; las regiones de discola y glotona se reajustan para alojar a cronista. + +### Notas +- **blake3 forzado a escalar.** El target del kernel corre sin SSE; un camino + SIMD de blake3 activado por detección en tiempo de ejecución ejecutaría + instrucciones que la CPU, sin `CR4.OSFXSR`, rechazaría con un #UD. Se fija + blake3 con `pure` + los cuatro `no_*` (`sse2`, `sse41`, `avx2`, `avx512`): + implementación puramente escalar, sin SIMD ni ensamblador. + +### Verificado +- QEMU, TRES arranques consecutivos sobre el mismo disco persistente: la app + cronista pinta 1, luego 2, luego 3 celdas — la cuenta de arranques sobrevive + a los reinicios porque vive en el grafo, en el disco, no en la RAM. El + testigo de integridad queda VERDE en los tres: el DAG entero se recorre, de + la raíz al primer eslabón, y su profundidad cuadra con la cuenta. El + superbloque en disco confirma la magia `RENASGRF`, versión 1, cursor 4 y la + raíz del tercer arranque; el registro del primer arranque guarda `datos = 1` + y cero hijos. Las otras cuatro apps siguen su curso sin alteración — las dos + `hello_wasm` renderizando, discola desalojada en púrpura, glotona en amarillo. + +--- + +## Fase 6.2 — E/S de disco asíncrona por interrupción — 2026-05-22 + +La Fase 6.1 hizo hablar al disco, pero por SONDEO: el procesador se quedaba en +espera activa vigilando el *used ring* de virtio, incapaz de atender nada más. +La 6.2 libera el planificador cooperativo — la E/S de bloques pasa a ser +REACTIVA, guiada por la interrupción física del dispositivo. + +### Añadido +- `EsperaDisco` (`drivers/disco.rs`): una transferencia de bloques expresada + como `Future` nativo. Posee sus buferes DMA —`BlkReq`, `BlkResp` y los datos, + en el heap para una dirección estable—; su `poll` envía la petición por la + API NO BLOQUEANTE de `virtio-drivers` (`read_blocks_nb`/`write_blocks_nb`), + consulta el *used ring* (`peek_used`) y, si la transferencia sigue en vuelo, + inscribe el waker y cede. `leer_bloques`/`escribir_bloques` lo construyen. +- La IRQ del disco: `montar` descubre la línea de IRQ legada del dispositivo + (registro «Interrupt Line», offset 0x3C del espacio de configuración PCI), + registra un manejador en la IDT y abre la línea en el PIC. + `interrupts::irq_disco` → `disco::atender_irq` reconoce la interrupción en el + dispositivo —leer su registro ISR baja la línea INTx— y despierta, vía un + waker de ranura única, a la tarea que aguardaba el bloque. +- `bloquear_en` — el puente para los contextos SÍNCRONOS (el arranque, las + capacidades WASM, que no pueden `.await`): lleva un `Future` de disco hasta + su final durmiendo la CPU con `hlt` —la despiertan la IRQ del disco o el + temporizador, como red de seguridad—; jamás en espera activa con el sistema + ya en marcha. +- `pic::desenmascarar` / `pic::vector_irq`: abrir una línea concreta del par + 8259 (con su cascada, si vive en el esclavo) y mapear línea → vector de IDT. +- `pci::linea_irq`: leer el registro «Interrupt Line» de un dispositivo. +- `tarea_sonda_disco` (`main.rs`): una tarea del reactor que lee el sector 0 de + forma asíncrona — la prueba viva de que la IRQ conduce la E/S sin detener a + las aplicaciones. + +### Cambiado +- `leer_sectores`/`escribir_sectores` se reescriben sobre la maquinaria + asíncrona (`bloquear_en` + `EsperaDisco`). El `almacen` y las capacidades + `sys_object_*` NO cambian una línea: heredan la E/S por interrupción de + forma transparente — la espera de disco deja de quemar ciclos en sondeo. +- El `VirtIOBlk` pide al dispositivo que emita interrupciones al completar cada + petición (`enable_interrupts`). + +### Decisiones de ingeniería +- **PIC, no IOAPIC.** El kernel corre íntegramente sobre el par 8259 (`pic.rs`) + y la crate `x86_64` no ofrece abstracción de APIC. Las IRQ legadas de PCI de + la máquina `q35` se enrutan por el 8259: basta leer la línea que el firmware + UEFI ya asignó y abrirla. Migrar al IOAPIC habría exigido levantar LAPIC + + IOAPIC + parseo de tablas ACPI — un subsistema entero, desproporcionado para + el objetivo. El resultado funcional es idéntico: E/S conducida por la + interrupción física. +- **Las capacidades WASM no `.await`-ean.** El intérprete `wasmi` ejecuta las + funciones de host de forma SÍNCRONA: no hay manera de suspender un módulo a + mitad de una llamada de host. Por eso `sys_object_*` no se vuelven + asíncronas; usan `bloquear_en`, que duerme la CPU con `hlt` en lugar de + sondear. El verdadero solapamiento E/S ↔ render lo aprovechan las TAREAS del + reactor (`tarea_sonda_disco` hoy; la carga dinámica de módulos, mañana). +- Una IRQ legada de PCI es de NIVEL: el manejador reconoce primero al + dispositivo —lo que baja su línea— y sólo después cierra el EOI del PIC; el + orden inverso reavivaría la interrupción en bucle. +- Todo acceso al disco toma su `Mutex` con las interrupciones desactivadas + (`without_interrupts`): la IRQ del disco jamás encuentra el cerrojo ocupado, + lo que hace imposible el interbloqueo por interrupción. + +### Verificado +- QEMU: el disco virtio-blk se enruta a la IRQ 11. La `tarea_sonda_disco` + reporta «sonda asíncrona OK -- 2 IRQ de disco atendidas»: la interrupción del + disco dispara de verdad. La app cronista, sobre el disco persistente heredado + de la Fase 6.1c, continúa la cuenta de arranques (3 → 4 → 5 celdas) con el + testigo de integridad del DAG en verde — la nueva E/S asíncrona lee y escribe + el grafo sin un solo fallo. Las cuatro apps WASM siguen su curso, sin un + sobresalto ni un micro-congelamiento. diff --git a/renaser/CLAUDE.md b/renaser/CLAUDE.md new file mode 100644 index 0000000..2400deb --- /dev/null +++ b/renaser/CLAUDE.md @@ -0,0 +1,88 @@ +# renaser — guía operativa + +**renaser** es un kernel asíncrono de *Espacio de Direccionamiento Único* +(SASOS) en Rust `#![no_std]`, bare-metal x86_64. Rompe con POSIX: interfaz +visual nativa desde el arranque, aislamiento **por software** (no por MMU), +el texto como caso particular del dibujo. + +Documentos hermanos: `ARCHITECTURE.md` (arquitectura), `ROADMAP.md` (fases y +plan), `CHANGELOG.md` (registro técnico de cambios), `DIARIO.md` (crónica en +lenguaje llano), `README.md` (presentación). + +## Construir y ejecutar + +Desde la raíz del repositorio: + +| Comando | Efecto | +|---|---| +| `cargo run` | compila el kernel, forja la imagen UEFI y abre QEMU | +| `cargo build` | compila el kernel + la imagen, sin lanzar QEMU | +| `cargo kernel` | alias: compila solo el kernel para `x86_64-unknown-none` | + +Verificación headless (sin ventana): añadir +`-- -display none -monitor unix:/tmp/q.sock,server,nowait` y capturar con +`screendump` por el socket del monitor. + +Reconstruir la app WASM del userspace tras tocar `apps/hello_wasm`: + +```sh +cd apps/hello_wasm +cargo build --target wasm32-unknown-unknown --release +cp target/wasm32-unknown-unknown/release/hello_wasm.wasm ../../kernel/assets/app.wasm +``` + +## Estructura del espacio de trabajo + +- `boot/` — orquestador de **anfitrión**: construye la imagen de disco UEFI con + la crate `bootloader` 0.11 y lanza QEMU. Es el **único miembro** del workspace. +- `kernel/` — el kernel **bare-metal**. Está **excluido** del workspace y se + compila solo como dependencia de artefacto de `boot` (target + `x86_64-unknown-none`). NUNCA debe ser miembro del workspace ni compilarse + para el anfitrión: lo haría fallar por un `_start` duplicado. +- `apps/` — aplicaciones del userspace, módulos `.wasm` + (target `wasm32-unknown-unknown`). Workspaces propios, excluidos. + +Módulos del kernel (`kernel/src/`): `main`, `grafico`, `consola`, `baliza`, +`sync`, `gdt`, `interrupts`, `pic`, `drivers/`, `almacen`, `memory/`, +`async_system/`, `texto`, `wasm/`. El detalle de cada uno está en +`ARCHITECTURE.md`. + +## Toolchain + +Nightly, fijado en `rust-toolchain.toml`. Targets `x86_64-unknown-none` y +`wasm32-unknown-unknown`. Componentes `rust-src` y `llvm-tools` (los exige el +build script de la crate `bootloader`). Entorno verificado: Artix Linux, +QEMU 11, OVMF en `/usr/share/edk2/x64/OVMF.4m.fd` (sin módulo KVM → TCG). + +## Convenciones + +- **Idioma:** comentarios E identificadores en español. +- **`unsafe`:** confinado en células mínimas, envuelto de inmediato en una + abstracción segura. `#![deny(unsafe_op_in_unsafe_fn)]`. Cada bloque `unsafe` + lleva un comentario `SEGURIDAD:` que justifica su corrección. +- **Framebuffer / MMIO:** siempre `core::ptr::write_volatile`; jamás asignación + indexada directa (el optimizador la elidiría). +- **`no_std` estricto:** solo `core::*` y `alloc::*` (heap vivo desde la Fase 3). + Prohibido cualquier ruta de `std::*`. +- **Alineación:** 16 bytes para estructuras genéricas; 4096 bytes (página) para + buffers de memoria y regiones de asignador. +- Código densamente comentado; se cuida la coherencia de estilo entre módulos. + +## Estado + +Fases 1 a 5, la 6.0, la 6.1 completa (sustrato de almacenamiento: sonda PCI, +HAL/DMA y el grafo de objetos) y la 6.2 (E/S de disco asíncrona por +interrupción) completadas y verificadas en QEMU. Ver `ROADMAP.md`. + +## Flujo de trabajo + +En **cada iteración** de trabajo, sin excepción: + +1. Actualizar `CHANGELOG.md` — la entrada técnica detallada del cambio. +2. Actualizar `DIARIO.md` — la misma jornada contada en lenguaje llano y + elegante, sin carga técnica (es una crónica humana, no un registro técnico). +3. Verificar en QEMU si el cambio es observable (con captura de pantalla). +4. `git commit` (mensaje en español, descriptivo) y `git push origin main`. + +El remoto `origin` es `gitea.gioser.net/sergio/renaser`. Mensajes de commit en +español. Verifica una fase en QEMU antes de darla por cerrada. diff --git a/renaser/Cargo.lock b/renaser/Cargo.lock new file mode 100644 index 0000000..e1e1cd1 --- /dev/null +++ b/renaser/Cargo.lock @@ -0,0 +1,1178 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "az" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit_field" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake3" +version = "1.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "cpufeatures", +] + +[[package]] +name = "boot" +version = "0.1.0" +dependencies = [ + "bootloader", + "kernel", +] + +[[package]] +name = "bootloader" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5fb69232f250c0d5b74eeb285702b4b0479f574980f45dc9bef97b2c65e2021" +dependencies = [ + "anyhow", + "bootloader-boot-config", + "fatfs", + "gpt", + "llvm-tools", + "mbrman", + "serde_json", + "tempfile", +] + +[[package]] +name = "bootloader-boot-config" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a5e475c13d3d988e105b76b92aeea94614c12590c33495165c02b16e895375" +dependencies = [ + "serde", +] + +[[package]] +name = "bootloader_api" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c074a3d1075b26ed77e502d6af8ab1263abbdc3d026c166e46480f973287293" + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cc" +version = "1.2.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror 2.0.18", +] + +[[package]] +name = "const_fn" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413d67b29ef1021b4d60f4aa1e925ca031751e213832b4b1d588fae623c05c60" + +[[package]] +name = "constant_time_eq" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" + +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "embedded-graphics" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e8da660bb0c829b34a56a965490597f82a55e767b91f9543be80ce8ccb416fe" +dependencies = [ + "az", + "byteorder", + "embedded-graphics-core", + "float-cmp", + "micromath", +] + +[[package]] +name = "embedded-graphics-core" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95743bef3ff70fcba3930246c4e6872882bbea0dcc6da2ca860112e0cd4bd09f" +dependencies = [ + "az", + "byteorder", +] + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "enumn" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "fatfs" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05669f8e7e2d7badc545c513710f0eba09c2fbef683eb859fd79c46c355048e0" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "log", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +dependencies = [ + "num-traits", +] + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "fontdue" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e57e16b3fe8ff4364c0661fdaac543fb38b29ea9bc9c2f45612d90adf931d2b" +dependencies = [ + "hashbrown 0.15.5", + "ttf-parser", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", + "wasip3", +] + +[[package]] +name = "gpt" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8283e7331b8c93b9756e0cfdbcfb90312852f953c6faf9bf741e684cc3b6ad69" +dependencies = [ + "bitflags 2.11.1", + "crc", + "log", + "uuid", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "js-sys" +version = "0.3.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +dependencies = [ + "cfg-if", + "futures-util", + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "kernel" +version = "0.1.0" +dependencies = [ + "blake3", + "bootloader_api", + "crossbeam-queue", + "embedded-graphics", + "fontdue", + "futures-util", + "linked_list_allocator", + "mirada-layout", + "postcard", + "serde", + "spin", + "virtio-drivers", + "wasmi", + "x86_64", +] + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "linked_list_allocator" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b23ac50abb8261cb38c6e2a7192d3302e0836dac1628f6a93b82b4fad185897" +dependencies = [ + "spinning_top", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "llvm-tools" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955be5d0ca0465caf127165acb47964f911e2bc26073e865deb8be7189302faf" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "mbrman" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1fc3bff63c208d4a14301c6cb807af2d1a0760052584ce3f9a737b55fb85498" +dependencies = [ + "bincode", + "bitvec", + "serde", + "serde-big-array", + "thiserror 1.0.69", +] + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "micromath" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c8dda44ff03a2f238717214da50f65d5a53b45cd213a7370424ffdb6fae815" + +[[package]] +name = "mirada-layout" +version = "0.1.0" +dependencies = [ + "libm", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "serde", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.11.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "safe-mmio" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4813ee49326057f105d6d8ca3d8f9265095f26aa7b42094e487028403a594f4c" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spinning_top" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" +dependencies = [ + "lock_api", +] + +[[package]] +name = "string-interner" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23de088478b31c349c9ba67816fa55d9355232d63c3afea8bf513e31f0f1d2c0" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ttf-parser" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "uuid" +version = "1.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +dependencies = [ + "getrandom", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "virtio-drivers" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdc1c628cdd8ce7c3b9e65a8ed550d0338e9ef9f911e729666f1cce097de2f7" +dependencies = [ + "bitflags 2.11.1", + "enumn", + "log", + "safe-mmio", + "thiserror 2.0.18", + "zerocopy", +] + +[[package]] +name = "volatile" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442887c63f2c839b346c192d047a7c87e73d0689c9157b00b53dcc27dd5ea793" + +[[package]] +name = "wasip2" +version = "1.0.3+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +dependencies = [ + "wit-bindgen 0.57.1", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser 0.244.0", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser 0.244.0", +] + +[[package]] +name = "wasmi" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22bf475363d09d960b48275c4ea9403051add498a9d80c64dbc91edabab9d1d0" +dependencies = [ + "spin", + "wasmi_collections", + "wasmi_core", + "wasmi_ir", + "wasmparser 0.228.0", +] + +[[package]] +name = "wasmi_collections" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85851acbdffd675a9b699b3590406a1d37fc1e1fd073743c7c9cf47c59caacba" +dependencies = [ + "hashbrown 0.15.5", + "string-interner", +] + +[[package]] +name = "wasmi_core" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef64cf60195d1f937dbaed592a5afce3e6d86868fb8070c5255bc41539d68f9d" +dependencies = [ + "libm", +] + +[[package]] +name = "wasmi_ir" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dcb572ce4400e06b5475819f3d6b9048513efbca785f0b9ef3a41747f944fd8" +dependencies = [ + "wasmi_core", +] + +[[package]] +name = "wasmparser" +version = "0.228.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4abf1132c1fdf747d56bbc1bb52152400c70f336870f968b85e89ea422198ae3" +dependencies = [ + "bitflags 2.11.1", + "hashbrown 0.15.5", + "indexmap", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.1", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.1", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser 0.244.0", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser 0.244.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x86_64" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7841fa0098ceb15c567d93d3fae292c49e10a7662b4936d5f6a9728594555ba" +dependencies = [ + "bit_field", + "bitflags 2.11.1", + "const_fn", + "rustversion", + "volatile", +] + +[[package]] +name = "zerocopy" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/renaser/Cargo.toml b/renaser/Cargo.toml new file mode 100644 index 0000000..f014b24 --- /dev/null +++ b/renaser/Cargo.toml @@ -0,0 +1,89 @@ +# ============================================================================= +# renaser :: manifiesto raíz del espacio de trabajo +# ----------------------------------------------------------------------------- +# Un único espacio de direccionamiento, una única verdad de versiones. +# Las dependencias se declaran aqui una sola vez y persisten, coherentes, +# a traves de todos los miembros del sistema. +# ============================================================================= + +[workspace] +resolver = "2" +# Solo `boot` es miembro del espacio de trabajo: corre en el anfitrion. El +# kernel queda EXCLUIDO a proposito —es bare-metal puro y jamas debe compilarse +# para el anfitrion— y se construye unica y exclusivamente como dependencia de +# artefacto de `boot`, que le fija el target `x86_64-unknown-none`. +members = ["boot"] +# El kernel (bare-metal) y las apps WASM (target wasm32) se compilan aparte, +# cada cual con su propio target; quedan fuera del espacio de trabajo. +exclude = ["kernel", "apps"] + +# ----------------------------------------------------------------------------- +# Metadatos compartidos: cada miembro hereda esta identidad con `*.workspace`. +# ----------------------------------------------------------------------------- +[workspace.package] +version = "0.1.0" +edition = "2021" +license = "MPL-2.0" +authors = ["JL Soltech "] +description = "renaser :: kernel asincrono SASOS basado en aislamiento por software" + +# ----------------------------------------------------------------------------- +# Dependencias del ecosistema. Reutilizamos infraestructura madura en lugar +# de reinventar boilerplate. `default-features = false` se aplica con bisturi, +# unicamente alli donde las features por defecto arrastrarian `std`. +# ----------------------------------------------------------------------------- +[workspace.dependencies] +# Constructor de la imagen de disco UEFI/BIOS. Es una herramienta de ANFITRION +# (usa std), la consume el miembro `boot` y NO debe enlazarse jamas en el kernel. +bootloader = "0.11" + +# API `#![no_std]` que el kernel SI consume: expone `entry_point!`, `BootInfo` +# y la descripcion del framebuffer GOP. Su version debe acompasar a `bootloader`. +bootloader_api = "0.11" + +# Abstraccion de la CPU x86_64: registros de control, GDT, IDT e instrucciones +# privilegiadas sin ensamblador inline. Es `#![no_std]` de nacimiento; su +# feature `instructions` (activa por defecto) nos da `hlt` y el control de IRQ. +x86_64 = "0.15" + +# Rasterizacion de primitivas vectoriales sobre el framebuffer. `#![no_std]`, +# sin heap: en la Fase 1 solo aporta el rasgo `DrawTarget` del lienzo. +embedded-graphics = "0.8" + +# Rasterizador de tipografias. REQUIERE `alloc`, de modo que solo se teje en el +# kernel una vez exista el asignador (Fase 2). `default-features = false` +# silencia su feature `std`. Se declara ya para congelar la version. +# `hashbrown` es lo que ACTIVA el modo `no_std` de fontdue; sin el, la crate +# recae en `std::collections` y no compila para bare-metal. `simd` queda fuera: +# nuestro target no tiene SSE. +fontdue = { version = "0.9", default-features = false, features = ["hashbrown"] } + +# --- Fase 3 :: heap dinamico y reactor asincrono --- +# Asignador del heap del kernel — algoritmo probado, configurado `no_std`. +linked_list_allocator = "0.10" +# Exclusion mutua sin sistema operativo: `Mutex` e inicializacion unica `Once`. +spin = "0.9" +# Cola lock-free, segura frente a interrupciones, para el canal de scancodes. +crossbeam-queue = { version = "0.3", default-features = false, features = ["alloc"] } +# Combinadores `Future`/`Stream` y `AtomicWaker`. Sin ejecutor ni I/O: solo +# las piezas que renaser teje en su propio reactor. +futures-util = { version = "0.3", default-features = false, features = ["alloc"] } + +# --- Fase 4 :: interprete WebAssembly para el userspace aislado --- +# `wasmi` en modo bare-metal: sin `std`, sin `wat`, sin `simd` (el target no +# tiene SSE). `hash-collections` le da mapas basados en hashbrown, `no_std`. +wasmi = { version = "1.0", default-features = false, features = ["hash-collections"] } + +# ----------------------------------------------------------------------------- +# Perfiles de compilacion. Cargo exige que los perfiles vivan en la RAIZ del +# espacio de trabajo. `panic = "abort"` es obligatorio: sin sistema operativo +# subyacente no hay desenrollado de pila (`unwinding`) posible. +# ----------------------------------------------------------------------------- +[profile.dev] +panic = "abort" + +[profile.release] +panic = "abort" +opt-level = "s" # codigo compacto: cada byte cuenta en bare-metal +lto = true # el optimizador cruza fronteras de crate +codegen-units = 1 # una sola unidad => maxima oportunidad de optimizacion diff --git a/renaser/DIARIO.md b/renaser/DIARIO.md new file mode 100644 index 0000000..64bb2cc --- /dev/null +++ b/renaser/DIARIO.md @@ -0,0 +1,226 @@ +# Diario de renaser + +*Una crónica, en lenguaje llano, de cómo va naciendo un sistema operativo. +Cada jornada de trabajo añade aquí su página.* + +--- + +## El primer día — la luz + +Todo empezó con un gesto pequeño y luminoso: lograr que la máquina, al +despertar, no mostrara la fría consola de texto de siempre, sino una superficie +limpia y serena, de un azul profundo, casi nocturno. Puede parecer poca cosa, +pero esa superficie es el cimiento de cuanto vendrá: el lienzo en blanco de un +sistema entero. + +Junto a esa primera luz nació también una promesa de honestidad. Si alguna vez +algo saliera terriblemente mal, renaser no se quedaría callado: pintaría una +franja roja, ancha y visible, para confesarlo sin rodeos. Una alarma sincera. + +## El empaquetado — un cuerpo para viajar + +Un sistema no sirve de nada si no puede encenderse en una máquina de verdad. +Así que el segundo paso fue darle a renaser un cuerpo: envolverlo en un disco +capaz de arrancar por sí solo, y enseñar al ordenador a lanzarlo. Desde +entonces, una sola orden basta para verlo cobrar vida ante nuestros ojos. + +## Los reflejos — aprender a reaccionar + +Hasta aquí, renaser sabía mostrarse, pero no sabía protegerse. La tercera etapa +consistió en darle reflejos: la capacidad de reaccionar ante lo inesperado en +lugar de derrumbarse en silencio. Se le tejió una red de seguridad interna para +que, ante un tropiezo, supiera recogerse con dignidad y avisar de lo ocurrido. + +## El latido — sentir el tiempo y escuchar + +Un sistema vivo necesita pulso. Se le dio a renaser un latido regular, como un +metrónomo interno, y oídos para escuchar el teclado. Por primera vez el sistema +dejó de estar simplemente quieto: empezó a respirar, a redibujarse con cada +latido y a notar cuándo una mano pulsaba una tecla. + +## La memoria y la fluidez — crecer y atender muchas cosas + +Para crecer, renaser necesitaba memoria de la que disponer con libertad. Y para +no atascarse, necesitaba aprender a atender varias cosas a la vez sin que unas +estorbaran a otras. En esta etapa recibió ambas. Además aprendió a escribir de +verdad: con una tipografía elegante, dibujando cada letra con esmero. El texto +dejó de ser un molde rígido para volverse, también él, un dibujo. + +## La habitación segura — invitar a otros programas + +La etapa más ambiciosa hasta ahora: abrir la puerta a que otros programas +vivieran dentro de renaser. Pero no de cualquier modo. Cada programa invitado +entra en una habitación sellada de la que no puede salir; solo puede hacer +aquello para lo que renaser, expresamente, le tiende un puente. Todo lo demás, +sencillamente, no existe para él. La primera visita fue modesta y entrañable: +un cuadrado de color que se desliza por la pantalla obedeciendo al teclado. + +## Una jornada de orden — ordenar la casa y guardar la historia + +No todo es construir; a veces toca ordenar. Se revisó la estructura del +proyecto y se repartió mejor el trabajo entre sus piezas, para que cada una +tuviera un cometido claro y nítido. Se escribió la documentación que cuenta qué +es renaser y hacia dónde camina. Y se guardó todo el trabajo en un lugar +seguro, donde queda registro fiel de cada cambio, de modo que ninguna jornada +se pierda. Hubo, además, un pequeño susto: una contraseña se coló por error +donde no debía; se retiró de inmediato y se dejó constancia para corregirla. + +## El reparto del tiempo — muchos huéspedes, ningún tirano + +Hasta esta jornada, el programa invitado de renaser, una vez dentro, se quedaba +con la casa entera: hablaba sin pausa y no dejaba sitio a nadie más. Era un solo +huésped, y se comportaba como dueño. + +Esta etapa enseñó a renaser a repartir el tiempo. Se acordó un compás —el latido +del sistema marca, una y otra vez, el turno de cada cual— y se acordó también un +gesto de cortesía: cada programa hace su pequeña tarea, pinta su fotograma y, al +terminar, cede el paso. Así, lo que antes era un único inquilino pasaron a ser +varios, conviviendo en paz, cada uno en su propia ventana de la pantalla. + +Pero la cortesía, por sí sola, es frágil: basta un huésped maleducado —uno que +no quiera ceder nunca el turno— para paralizarlo todo. Por eso se añadió una +salvaguarda serena pero firme: a cada programa se le entrega, en cada turno, una +ración medida de tiempo. Si la agota sin terminar —porque se ha enredado en un +bucle sin fin—, renaser le retira el turno con delicadeza, tiñe su ventana de un +púrpura inconfundible y prosigue. El sistema no se cuelga; simplemente despide al +inquilino díscola y sigue atendiendo a los demás, que ni se enteran. + +Para comprobarlo se invitó, a propósito, a un huésped díscola: un programa hecho +para enredarse en un bucle eterno. Al arrancar, las dos ventanas honradas +cobraron vida y obedecieron al teclado a la vez, en perfecta armonía; la tercera, +la del díscola, se apagó al instante en un púrpura tranquilo. La promesa quedó +demostrada: renaser es veloz porque confía, pero nunca ingenuo. + +## La otra mitad del muro — el espacio, no solo el tiempo + +La jornada anterior enseñó a renaser a repartir el tiempo y a contener al que no +quería cederlo. Pero un huésped puede portarse mal de dos maneras: acaparando el +tiempo, sí, o acaparando el espacio. Quedaba media casa por proteger. + +En esta etapa se le puso a cada programa un techo a la memoria que puede +reclamar. Mientras se conforme con su habitación, vive tranquilo; si pretende +derribar las paredes para anexarse la casa entera, renaser se lo impide con +serenidad y, como con el díscola, lo despide —esta vez tiñendo su ventana de un +amarillo pálido, para que de un vistazo se distinga al que abusó del espacio del +que abusó del tiempo. + +Se cerró además una pequeña negligencia de la jornada anterior: cuando un +huésped era despedido, renaser olvidaba recoger del todo sus cosas. Ahora, al +marcharse cualquier programa, el sistema reclama hasta el último de sus enseres; +no queda rastro. Y se invitó a un nuevo huésped de prueba, una aplicación +glotona hecha para devorar memoria: al arrancar, fue frenada y despedida al +instante, su ventana amarilla junto a la púrpura del díscola, mientras las dos +aplicaciones honradas seguían su baile, ajenas a todo. + +Con esto, las dos dimensiones físicas —el tiempo y el espacio— quedan bajo el +gobierno firme y sereno de renaser. El siguiente horizonte es más hondo: dar al +sistema una memoria que perdure, un lugar donde guardar las cosas más allá del +apagado. Pero esa es ya otra página. + +## El primer golpe a la roca — encontrar el disco + +Dar a renaser una memoria que perdure exige, antes que nada, hablar con un +disco. Y un disco, a diferencia de la pantalla o del teclado, no se le anuncia +al sistema al nacer: hay que salir a buscarlo. Es una empresa grande, así que se +decidió acometerla con prudencia, a pasos cortos y firmes. + +El primer paso fue, sencillamente, encontrar el disco. renaser aprendió a +recorrer el bus por el que se enganchan los periféricos de la máquina, +preguntando puerta por puerta «¿quién hay aquí?», hasta dar con el disco virtual +que se le había preparado. Y al hallarlo, lo dijo en voz alta sobre su propia +pantalla: lo había localizado, y supo decir en qué dirección vivía. + +Puede parecer un gesto pequeño —una línea de texto—, pero es el primer golpe de +pico contra una roca dura. La conversación con el disco apenas empieza; pero la +puerta, al menos, ya está encontrada. + +## La primera palabra del disco — leer lo que se escribió + +Encontrada la puerta, faltaba lo más difícil: cruzarla. Hablar de verdad con un +disco no es pedirle las cosas y esperar: es tender con él una memoria +compartida, un terreno común donde el sistema deja una petición y el disco +deposita su respuesta. Montar ese terreno —y aprender el protocolo para usarlo— +fue el trabajo de esta jornada, el más cercano al metal de cuantos renaser ha +acometido. + +Para no equivocar el paso se ideó una prueba sencilla y honesta. Al preparar el +disco, el sistema anfitrión grabó en su primer renglón una breve firma, una +palabra clave. Y entonces se le pidió a renaser que, ya por sus propios medios, +abriera el disco y leyera ese mismo renglón. Si la palabra volvía intacta, no +habría duda: el camino completo —encontrar el disco, tender la memoria +compartida, pedir, esperar y recibir— funcionaba de cabo a rabo. + +Al arrancar, renaser lo dijo en su pantalla, sereno: había leído el sector +cero, y la palabra que mostró era, letra por letra, la que se había grabado. El +disco había hablado, y renaser lo había entendido. La roca, por fin, cedió. + +Queda por delante lo más hermoso: sobre esta conversación recién abierta, +levantar una verdadera memoria duradera —no un archivo de los de antes, sino un +tejido de objetos—. Pero el cimiento ya está puesto, y es firme. + +## Un tejido de objetos — la memoria que perdura + +La conversación con el disco estaba abierta; faltaba decidir qué contarle. El +mundo que renaser hereda de la informática de siempre habría respondido sin +pensarlo: archivos, carpetas, rutas con barras. renaser eligió otra cosa. + +En lugar de un archivero de cajones con etiquetas, se tejió un grafo de +objetos. Cada objeto es un puñado de datos y unos cuantos hilos que lo enlazan +con otros. Y —esta es la idea hermosa— ningún objeto lleva un nombre que +alguien le haya puesto: su nombre es su contenido. De cada uno se calcula una +huella única, irrepetible, y esa huella es su identidad. Dos cosas idénticas +tienen la misma huella, de modo que nada se guarda dos veces; y si una se +corrompe, su huella deja de cuadrar y la mentira se delata sola. + +Para que esa memoria mereciera el nombre de duradera hubo que pulir el trato +con el disco: enseñarle a renaser no solo a leer, sino a escribir. Y poner +orden en la despensa de la que el sistema toma prestada memoria para hablar con +el hardware — que ahora, al terminar cada gestión, devuelve lo que tomó en vez +de acumularlo sin fin. + +Y entonces llegó la prueba más bonita. Se escribió una pequeña aplicación, una +cronista, con un único oficio: llevar la cuenta de las veces que el sistema +despierta. En cada arranque consulta el grafo, encuentra el último apunte, +añade el suyo —enlazado al anterior, como el eslabón nuevo de una cadena— y +pinta una casilla por cada despertar registrado. + +Se apagó la máquina y se volvió a encender. Y otra vez. La cronista dibujó +primero una casilla, luego dos, luego tres. La cuenta no se perdía con el +apagón: vivía en el disco, en el tejido de objetos, y cada reinicio la +encontraba intacta y la hacía crecer. Por primera vez, renaser recordaba algo +de una vida a la siguiente. + +La memoria duradera ya no es una promesa. Es un tejido, y tiene sus primeros +hilos. + +## El disco que avisa — la espera que ya no congela + +Hablar con el disco, hasta esta jornada, tenía un precio oculto. Cada vez que +renaser le pedía un bloque, el sistema entero contenía el aliento: el procesador +se quedaba mirando fijamente al disco, preguntando una y otra vez «¿ya?, ¿ya?», +sin hacer nada más, hasta que la respuesta llegaba. Para una lectura suelta +apenas se notaba. Pero el futuro de renaser —cargar aplicaciones enteras desde +el disco— habría convertido esos instantes en tirones visibles, en pequeños +congelamientos de la imagen. + +Así que se le enseñó al disco a AVISAR. En lugar de que el sistema vigile, ahora +es el disco quien, al terminar, da un golpecito en el hombro del kernel —una +interrupción— para decir «listo». Y mientras tanto, renaser no aguarda de brazos +cruzados: si hay trabajo, lo hace; si no, se adormece un instante, y el propio +golpecito del disco lo despierta. Ni un ciclo malgastado. + +Para no equivocar el paso se escribió una pequeña sonda: una tarea que pide al +disco su primer bloque y, en vez de quedarse esperando, cede el turno. Las +aplicaciones de la pantalla siguieron pintándose, fluidas, mientras el disco +trabajaba por su cuenta; y cuando el bloque estuvo listo, su aviso reanudó la +sonda. En la pantalla quedó escrito: la lectura se había atendido por aviso, no +por vigilancia. + +Es un cambio que casi no se ve —la cronista sigue contando arranques, una +casilla más cada vez— pero que se sentirá en todo lo que venga después. El disco +y renaser ya no se miran fijamente: se hablan, y entre frase y frase, cada cual +atiende lo suyo. + +--- + +*El diario continúa. La próxima página la escribirá la próxima jornada.* diff --git a/renaser/README.md b/renaser/README.md new file mode 100644 index 0000000..12a6c3b --- /dev/null +++ b/renaser/README.md @@ -0,0 +1,48 @@ +# renaser + +**renaser** es un kernel asíncrono de *Espacio de Direccionamiento Único* +(SASOS), escrito en Rust `#![no_std]` para x86_64 bare-metal. + +Es un sistema operativo disruptivo que rompe por completo con el paradigma +POSIX de los años 70: no emula Linux, no usa archivos planos, no usa TTYs ni +capas GNU. El aislamiento entre aplicaciones no descansa en la MMU ni en los +anillos de privilegio de la CPU, sino en **límites matemáticos sobre el +bytecode** — aislamiento por software (SFI). La interfaz es visual desde el +primer microsegundo: el texto es, simplemente, un caso particular del dibujo. + +## Qué hace, hoy + +- Arranca por **UEFI** y adopta el framebuffer GOP con doble búfer sin parpadeo. +- Se **autoempaqueta** en una imagen de disco UEFI y se lanza en QEMU. +- Tiene **reflejos de fallo**: GDT/TSS, IDT y manejadores de excepción; si + colapsa, lo dibuja (franja roja de pánico, naranja de memoria agotada). +- **Late con el hardware**: PIC remapeado, temporizador (PIT) y teclado. +- Gestiona **memoria dinámica** (heap de 64 MiB, asignador global). +- Ejecuta un **reactor asíncrono cooperativo** sobre los `Future` nativos de + Rust: las interrupciones no conmutan contexto, despiertan tareas. +- Rasteriza **texto vectorial** al vuelo con `fontdue`. +- Ejecuta un **userspace WebAssembly** aislado por capacidades (`wasmi`): las + aplicaciones solo tocan el mundo a través de funciones de host concedidas. + +## Construir y ejecutar + +Requisitos: `rustup` con toolchain nightly, QEMU y firmware OVMF. + +```sh +cargo run +``` + +Compila el kernel para `x86_64-unknown-none`, forja la imagen de disco UEFI y +abre QEMU. Ver `CLAUDE.md` para el resto de comandos y el flujo de la app WASM. + +## Documentación + +| Documento | Contenido | +|---|---| +| `ARCHITECTURE.md` | la arquitectura del sistema, subsistema a subsistema | +| `ROADMAP.md` | fases completadas y plan de las siguientes | +| `CLAUDE.md` | guía operativa: comandos, estructura y convenciones | + +## Licencia + +MPL-2.0 diff --git a/renaser/ROADMAP.md b/renaser/ROADMAP.md new file mode 100644 index 0000000..c00988c --- /dev/null +++ b/renaser/ROADMAP.md @@ -0,0 +1,108 @@ +# renaser — Hoja de ruta + +Estado de las fases del proyecto. Para la arquitectura, ver `ARCHITECTURE.md`. + +## Fases completadas + +Todas verificadas en QEMU (captura de pantalla incluida en su momento). + +### Fase 1 — el primer microsegundo +Arranque UEFI, adopción del framebuffer GOP, lienzo de doble búfer y la baliza +de pánico (franja roja al colapsar). Punto de entrada con `bootloader_api`. + +### Fase 1.5 — empaquetado y arranque +Miembro `boot/`: constructor de la imagen de disco UEFI (crate `bootloader` +0.11, vía dependencia de artefacto) y lanzador de QEMU. `cargo run` pasa a +compilar, forjar la imagen y arrancar, todo de un gesto. + +### Fase 2.0 — cimientos del manejo de fallos +GDT propia + TSS con stack de emergencia (IST) para el doble fallo. IDT con +manejadores de excepción de CPU. El breakpoint es recuperable; el resto de +excepciones encienden la baliza. + +### Fase 2.1 — interrupciones de hardware +Remapeo del PIC 8259 fuera del rango de las excepciones. Temporizador (PIT) a +100 Hz e IRQ1 de teclado. El kernel pasa de "pintar una vez" a un bucle de +render despertado por el hardware. + +### Fase 3 — memoria dinámica y reactor asíncrono +Heap de 64 MiB con `linked_list_allocator` como asignador global; manejador +propio de OOM (franja naranja). Reactor cooperativo: `Executor`, `Task`, +`Waker`. Texto vectorial con `fontdue`: el texto deja de ser mapa de bits. + +### Fase 4 — el escudo de aislamiento WASM +Runtime `wasmi` `no_std`. Matriz de capacidades con dos funciones de host +(`sys_render_frame`, `sys_get_scancode`) y validación infranqueable de límites +de la memoria lineal. Primera app del userspace: `apps/hello_wasm`, un módulo +`wasm32` aislado que pinta y responde al teclado. + +### Fase 5 — multitarea cooperativa, fuel y reloj +Unificación del reactor (Fase 3) y el runtime WASM (Fase 4). El ABI del +userspace pasa a `init`/`tick`: cada `tick` es un punto de cesión cooperativa. +`async_system::reloj` convierte la IRQ0 en el `Future` `EsperaFrame`, que marca +el compás de los fotogramas. Cada app es una `AplicacionWasm` persistente y una +tarea del reactor. Escudo de combustible (`fuel`): cada `tick` corre con un +presupuesto estricto; agotarlo desaloja la app sin tocar al kernel. Capacidades +ampliadas — regiones de dibujo por app y canal de teclado por app. Verificado +en QEMU con tres apps concurrentes, una de ellas díscola y desalojada en vivo. + +### Fase 6.0 — cuotas de memoria y ciclo de vida +Completa el aislamiento espacial del userspace. Cada `AplicacionWasm` instancia +su `Store` con un `StoreLimits` (techo de memoria lineal de 4 MiB, vía +`Store::limiter`); rebasarlo es una trampa que desaloja la app con baliza +amarilla — gemela de la púrpura del desalojo por combustible. `Drop` para +`AplicacionWasm` reconcilia el ciclo de vida: da de baja el canal de teclado de +la difusión de la IRQ1. Verificado en QEMU con cuatro apps — una díscola +(desalojo temporal) y una glotona (desalojo espacial), ambas en vivo. + +## Fase 6.1 — sustrato de almacenamiento (completada) + +Estrategia incremental para el almacenamiento, frente al riesgo del hardware: + +- **6.1a — Sonda PCI** *(hecha)* — `drivers/pci.rs` enumera el bus PCI por + `0xCF8`/`0xCFC` y localiza el disco virtio-blk; `boot` forja el disco de + pruebas y lo adjunta como `virtio-blk-pci`. El muro del descubrimiento de + hardware queda derribado. +- **6.1b — HAL y lectura de sector** *(hecha)* — `drivers/disco.rs`: asignador + de marcos «bump», `KernelHal` (el `trait Hal` de `virtio-drivers`: DMA y + traducción de direcciones) y `montar_y_leer_sector0`, que lee el sector 0 por + sondeo. Verificado por una firma que viaja del anfitrión al disco y vuelve. +- **6.1c — Grafo de objetos** *(hecha)* — `almacen.rs`: el almacenamiento como + DAG direccionado por contenido —la identidad de un objeto es el hash BLAKE3 + de su forma serializada (`postcard`); el disco se organiza como un log con + superbloque e índice—, y las cinco capacidades `sys_object_*` que lo exponen + al userspace. `drivers/disco.rs` gana un asignador de marcos con liberación + real (mapa de bits), escritura de sectores y un `VirtIOBlk` persistente. La + app `cronista` lleva la cuenta de los arranques en el grafo: la cuenta + perdura entre reinicios. + +## Fase 6.2 — E/S de disco asíncrona por interrupción (completada) + +La Fase 6.1 hizo hablar al disco, pero por **sondeo**: el procesador se quedaba +en espera activa vigilando el *used ring* de virtio. La 6.2 libera el +planificador cooperativo — la E/S de bloques pasa a ser **reactiva**: + +- `EsperaDisco` — una transferencia de bloques como `Future` nativo, sobre la + API no bloqueante de `virtio-drivers` (`read_blocks_nb` / `peek_used` / + `complete_*`). Cede la CPU mientras el disco trabaja. +- La **IRQ del disco** — `montar` descubre la línea de IRQ legada del + dispositivo (registro «Interrupt Line» del espacio de configuración PCI), la + enruta por el 8259 y registra su manejador; `atender_irq` reconoce la + interrupción y despierta a la tarea que aguardaba el bloque. +- `bloquear_en` — el puente para los contextos síncronos (el arranque, las + capacidades WASM): duerme la CPU con `hlt` en vez de sondear. + +Decisión de ingeniería: las IRQ se enrutan por el **PIC 8259** que el kernel ya +gobierna, no por el IOAPIC — basta leer la línea que el firmware ya asignó. +Verificado en QEMU: el disco se enruta a la IRQ 11; una tarea-sonda del reactor +lee un bloque de forma asíncrona mientras las apps siguen pintando. + +Líneas abiertas posteriores: carga/descarga dinámica de apps desde el grafo de +objetos; más capacidades del host (temporización, audio). + +## Principios que persisten entre fases + +- Reutilizar infraestructura madura de la comunidad antes que reinventar. +- `unsafe` mínimo, confinado y justificado. +- Verificar cada fase en QEMU antes de cerrarla. +- `git commit` + `git push` tras cada iteración. diff --git a/renaser/apps/cronista/Cargo.lock b/renaser/apps/cronista/Cargo.lock new file mode 100644 index 0000000..d19e5f3 --- /dev/null +++ b/renaser/apps/cronista/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "cronista" +version = "0.1.0" diff --git a/renaser/apps/cronista/Cargo.toml b/renaser/apps/cronista/Cargo.toml new file mode 100644 index 0000000..46804b4 --- /dev/null +++ b/renaser/apps/cronista/Cargo.toml @@ -0,0 +1,31 @@ +# ============================================================================= +# renaser :: apps/cronista — Fase 6.1c :: el primer escriba del userspace +# ----------------------------------------------------------------------------- +# Un modulo WebAssembly que, a diferencia de sus vecinas, deja HUELLA. En cada +# arranque graba un objeto en el grafo persistente del kernel —enlazado al del +# arranque anterior, formando una cadena— y lo corona como raiz. Asi lleva la +# cronica de cuantas veces ha despertado el sistema: una cuenta que sobrevive +# a los reinicios porque vive en el disco, no en la RAM. +# Tiene su propio `[workspace]`: queda fuera del espacio de trabajo del kernel. +# ============================================================================= + +[package] +name = "cronista" +version = "0.1.0" +edition = "2021" +description = "renaser :: app WASM cronista — la cronica persistente de los arranques" + +[workspace] + +# `cdylib` produce un modulo `.wasm` que exporta funciones — el formato que +# wasmi instancia. +[lib] +crate-type = ["cdylib"] + +[profile.dev] +panic = "abort" + +[profile.release] +panic = "abort" +opt-level = "s" +lto = true diff --git a/renaser/apps/cronista/src/lib.rs b/renaser/apps/cronista/src/lib.rs new file mode 100644 index 0000000..53d8ae7 --- /dev/null +++ b/renaser/apps/cronista/src/lib.rs @@ -0,0 +1,234 @@ +// ============================================================================= +// renaser :: apps/cronista — Fase 6.1c :: el primer escriba del userspace +// ----------------------------------------------------------------------------- +// Las apps de fases anteriores eran efimeras: su mundo se borraba al apagar la +// maquina. `cronista` es la primera que deja HUELLA. En cada arranque: +// +// 1. pregunta al kernel por la RAIZ del grafo de objetos —la cabeza de la +// cadena de arranques anteriores—; +// 2. lee de ella el numero del ultimo arranque; +// 3. graba un objeto nuevo —sus datos: el numero de arranque; su hijo: la +// raiz anterior— y lo corona como raiz; +// 4. recorre la cadena entera para verificar que el DAG persiste integro; +// 5. pinta una celda por cada arranque registrado. +// +// La cuenta NO vive en la RAM: vive en el disco, en el grafo direccionado por +// contenido. Sobrevive a los reinicios. Cada vez que renaser despierta, la +// cronista añade un eslabon a la cadena y una celda a su rejilla. +// +// Sus unicas vias hacia el mundo son las capacidades `sys_object_*` que el +// kernel le inyecta. No conoce el disco, ni el bus PCI, ni el formato en +// sectores: solo objetos, hashes y aristas. +// ============================================================================= + +#![no_std] + +// --- Las capacidades que el kernel `renaser` inyecta a esta aplicacion. --- +#[link(wasm_import_module = "renaser")] +extern "C" { + /// Compone un bufer de pixeles (de ESTA memoria lineal) en la region que el + /// kernel asigno a esta aplicacion. + fn sys_render_frame(ptr: u32, len: u32); + + /// Graba un objeto en el grafo: `datos` es su carga util; `hijos` apunta a + /// un arreglo de `hijos_cnt` hashes de 32 bytes —las aristas—. El hash + /// resultante se escribe en `salida`. Devuelve 0 si todo fue bien. + fn sys_object_put(datos: u32, datos_len: u32, hijos: u32, hijos_cnt: u32, salida: u32) -> i32; + + /// Copia la carga util del objeto `hash` en `salida`. Devuelve el numero de + /// bytes copiados, o un valor negativo si fallo. + fn sys_object_datos(hash: u32, salida: u32, capacidad: u32) -> i32; + + /// Devuelve el numero de hijos del objeto `hash` y, si `indice` es valido, + /// escribe el hash de ese hijo en `salida`. Negativo si el objeto no existe. + fn sys_object_hijo(hash: u32, indice: u32, salida: u32) -> i32; + + /// Escribe en `salida` el hash de la raiz del grafo. Devuelve 1 si hay + /// raiz, 0 si el grafo aun esta vacio. + fn sys_object_raiz(salida: u32) -> i32; + + /// Corona el objeto `hash` como raiz del grafo. Devuelve 0 si lo logro. + fn sys_object_fijar_raiz(hash: u32) -> i32; +} + +/// Sin sistema operativo bajo nosotros, un panico solo puede detenerse en seco. +#[panic_handler] +fn al_fallar(_: &core::panic::PanicInfo) -> ! { + loop {} +} + +// --- Geometria de la escena. El ancho y el alto DEBEN coincidir con la region +// que el kernel asigna a esta app. --- +const ANCHO: usize = 360; +const ALTO: usize = 80; + +/// Lado de paso de la rejilla de celdas, en pixeles. +const PASO: usize = 20; +/// Lado de una celda, en pixeles. +const LADO: usize = 16; +/// Celdas que caben en una fila. +const POR_FILA: usize = ANCHO / PASO; +/// Celdas que caben en la rejilla entera — el techo de lo que se pinta. +const MAX_CELDAS: usize = POR_FILA * (ALTO / PASO); + +/// Indigo casi negro: el fondo del lienzo de la cronista. +const FONDO: u32 = 0x0E_14_22; +/// Ambar calido: una celda por arranque registrado. +const CELDA: u32 = 0xF2_B2_33; +/// Verde: el DAG se recorrio integro de la raiz al primer eslabon. +const VERDE: u32 = 0x35_C4_6A; +/// Rojo: la cadena se rompio — un objeto no resolvio. +const ROJO: u32 = 0xD4_1E_2C; + +/// El lienzo de la aplicacion, en SU propia memoria lineal. +static mut LIENZO: [u32; ANCHO * ALTO] = [0; ANCHO * ALTO]; + +// --- Buferes de intercambio con las capacidades `sys_object_*`. El kernel lee +// y escribe hashes y datos AQUI, siempre dentro de esta memoria lineal. --- +/// El hash de la raiz anterior — la cabeza de la cadena al arrancar. +static mut HASH_RAIZ: [u8; 32] = [0; 32]; +/// El hash del objeto que esta cronista graba en este arranque. +static mut HASH_NUEVO: [u8; 32] = [0; 32]; +/// Hash de trabajo para recorrer la cadena del DAG. +static mut HASH_AUX: [u8; 32] = [0; 32]; +/// Los ocho bytes del numero de arranque, de ida y de vuelta del grafo. +static mut DATOS_IO: [u8; 8] = [0; 8]; + +/// Preparacion: el kernel la invoca UNA sola vez. Aqui ocurre toda la cronica — +/// leer el grafo, grabar el eslabon nuevo, verificar el DAG y pintar. +#[no_mangle] +pub extern "C" fn init() { + // 1. ¿Hay ya una raiz? Es la cabeza de la cadena de arranques anteriores. + let tiene_raiz = unsafe { sys_object_raiz(core::ptr::addr_of_mut!(HASH_RAIZ) as u32) } == 1; + + // 2. El numero del ultimo arranque vive en los `datos` de esa raiz. + let mut previo: u64 = 0; + if tiene_raiz { + let leidos = unsafe { + sys_object_datos( + core::ptr::addr_of!(HASH_RAIZ) as u32, + core::ptr::addr_of_mut!(DATOS_IO) as u32, + 8, + ) + }; + if leidos == 8 { + // SEGURIDAD: lectura de un escalar `Copy` de un estatico propio. + previo = u64::from_le_bytes(unsafe { *core::ptr::addr_of!(DATOS_IO) }); + } + } + let cuenta = previo + 1; + + // 3. Grabar el objeto de ESTE arranque. Sus `datos` son el numero de + // arranque; su unico hijo, la raiz anterior — el eslabon nuevo del DAG. + // SEGURIDAD: escritura de un escalar `Copy` a un estatico propio. + unsafe { + *core::ptr::addr_of_mut!(DATOS_IO) = cuenta.to_le_bytes(); + } + let (hijos_ptr, hijos_cnt) = if tiene_raiz { + (core::ptr::addr_of!(HASH_RAIZ) as u32, 1u32) + } else { + (0u32, 0u32) + }; + let grabado = unsafe { + sys_object_put( + core::ptr::addr_of!(DATOS_IO) as u32, + 8, + hijos_ptr, + hijos_cnt, + core::ptr::addr_of_mut!(HASH_NUEVO) as u32, + ) + }; + + // 4. Coronar el objeto nuevo como raiz y verificar la integridad del DAG. + let mut integro = false; + if grabado == 0 + && unsafe { sys_object_fijar_raiz(core::ptr::addr_of!(HASH_NUEVO) as u32) } == 0 + { + integro = verificar_cadena(cuenta); + } + + // 5. Pintar la cronica: una celda por arranque, un testigo de integridad. + pintar(cuenta, integro); +} + +/// Un fotograma de trabajo. El numero de arranque no cambia durante una sesion: +/// la cronica que `init` pinto persiste en el lienzo del kernel. `tick` solo +/// cede el control, fiel al ABI cooperativo — no toda app necesita redibujar. +#[no_mangle] +pub extern "C" fn tick() {} + +/// Recorre la cadena del DAG desde el objeto recien grabado, descendiendo por +/// el hijo 0, y comprueba que su profundidad coincide con el numero de +/// arranque. Si coincide, el grafo entero se leyo de vuelta del disco integro. +fn verificar_cadena(cuenta: u64) -> bool { + // Partir del objeto recien grabado. + // SEGURIDAD: copia de un arreglo `Copy` entre dos estaticos propios. + unsafe { + *core::ptr::addr_of_mut!(HASH_AUX) = *core::ptr::addr_of!(HASH_NUEVO); + } + let mut profundidad: u64 = 0; + loop { + profundidad += 1; + // `sys_object_hijo` lee el hash de HASH_AUX y, si hay hijo, escribe el + // del hijo 0 en el MISMO bufer: la cadena desciende un eslabon. + let hijos = unsafe { + sys_object_hijo( + core::ptr::addr_of!(HASH_AUX) as u32, + 0, + core::ptr::addr_of_mut!(HASH_AUX) as u32, + ) + }; + // Sin hijos: fin de la cadena — el primer arranque de todos. Un valor + // negativo seria un objeto que no resolvio: la cadena estaria rota. + if hijos <= 0 || profundidad >= 4096 { + break; + } + } + profundidad == cuenta +} + +/// Pinta la cronica: el fondo, una celda ambar por arranque y, en la esquina, +/// el testigo de integridad del grafo. +fn pintar(cuenta: u64, integro: bool) { + // SEGURIDAD: durante `init` esta es la unica via de acceso a LIENZO, y el + // kernel jamas reentra el modulo mientras `init` corre. + let lienzo: &mut [u32] = unsafe { &mut *core::ptr::addr_of_mut!(LIENZO) }; + for pixel in lienzo.iter_mut() { + *pixel = FONDO; + } + + // Una celda ambar por cada arranque registrado, dispuestas en rejilla. + let celdas = (cuenta as usize).min(MAX_CELDAS); + for i in 0..celdas { + let x = (i % POR_FILA) * PASO + 2; + let y = (i / POR_FILA) * PASO + 2; + rellenar(lienzo, x, y, LADO, LADO, CELDA); + } + + // El testigo de integridad: verde si la cadena se recorrio entera de la + // raiz al primer eslabon, rojo si algo se rompio. + let testigo = if integro { VERDE } else { ROJO }; + rellenar(lienzo, ANCHO - 14, 4, 10, 10, testigo); + + // SEGURIDAD: `sys_render_frame` es una capacidad del host; el (ptr, len) + // describe nuestra propia memoria lineal y el host lo verifica sin piedad. + unsafe { + sys_render_frame(lienzo.as_ptr() as u32, (ANCHO * ALTO * 4) as u32); + } +} + +/// Rellena un rectangulo, recortado con firmeza a los limites del lienzo. +fn rellenar(lienzo: &mut [u32], x: usize, y: usize, ancho: usize, alto: usize, color: u32) { + let x1 = (x + ancho).min(ANCHO); + let y1 = (y + alto).min(ALTO); + let mut fila = y; + while fila < y1 { + let base = fila * ANCHO; + let mut col = x; + while col < x1 { + lienzo[base + col] = color; + col += 1; + } + fila += 1; + } +} diff --git a/renaser/apps/discola/Cargo.lock b/renaser/apps/discola/Cargo.lock new file mode 100644 index 0000000..e06a61b --- /dev/null +++ b/renaser/apps/discola/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "discola" +version = "0.1.0" diff --git a/renaser/apps/discola/Cargo.toml b/renaser/apps/discola/Cargo.toml new file mode 100644 index 0000000..c09c8b2 --- /dev/null +++ b/renaser/apps/discola/Cargo.toml @@ -0,0 +1,30 @@ +# ============================================================================= +# renaser :: apps/discola — el inquilino discolo del userspace +# ----------------------------------------------------------------------------- +# Un modulo WebAssembly construido a proposito para portarse mal: su `tick` +# cae en un bucle cerrado y jamas retorna. Existe para una sola cosa — +# demostrar que el escudo de combustible (fuel) del kernel `renaser` lo +# desaloja sin colgar el sistema ni perturbar a sus apps vecinas. +# Tiene su propio `[workspace]`: queda fuera del espacio de trabajo del kernel. +# ============================================================================= + +[package] +name = "discola" +version = "0.1.0" +edition = "2021" +description = "renaser :: app WASM discola — un bucle infinito que el fuel fulmina" + +[workspace] + +# `cdylib` produce un modulo `.wasm` que exporta funciones — el formato que +# wasmi instancia. +[lib] +crate-type = ["cdylib"] + +[profile.dev] +panic = "abort" + +[profile.release] +panic = "abort" +opt-level = "s" +lto = true diff --git a/renaser/apps/discola/src/lib.rs b/renaser/apps/discola/src/lib.rs new file mode 100644 index 0000000..f59e1cd --- /dev/null +++ b/renaser/apps/discola/src/lib.rs @@ -0,0 +1,46 @@ +// ============================================================================= +// renaser :: apps/discola — Fase 5 :: el inquilino discolo del userspace +// ----------------------------------------------------------------------------- +// Esta aplicacion esta MAL a proposito. Su `tick` no hace un fotograma de +// trabajo y retorna —como manda el ABI cooperativo—: cae en un bucle cerrado +// y jamas devuelve el control. En un sistema cooperativo ingenuo, eso colgaria +// la maquina entera. +// +// Pero renaser ejecuta cada `tick` con un presupuesto estricto de COMBUSTIBLE. +// Cuando este bucle lo agota, el runtime `wasmi` lanza una trampa, el kernel +// recupera el mando y desaloja a este modulo — tatuando su region de purpura. +// El resto del userspace ni se entera. Eso es lo que esta app demuestra. +// ============================================================================= + +#![no_std] + +/// Sin sistema operativo bajo nosotros, un panico solo puede detenerse en seco. +#[panic_handler] +fn al_fallar(_: &core::panic::PanicInfo) -> ! { + loop {} +} + +/// Sumidero de las escrituras del bucle: obliga al compilador a CONSERVAR cada +/// iteracion —y, con ella, su consumo de combustible— en lugar de elidirla. +static mut SUMIDERO: u64 = 0; + +/// Preparacion. No hay nada honrado que preparar: el kernel la invoca, retorna +/// sin incidentes, y la app pasa por buena... hasta su primer `tick`. +#[no_mangle] +pub extern "C" fn init() {} + +/// El fotograma que nunca termina. Un bucle cerrado, deliberado: jamas retorna. +/// El kernel `renaser` lo cortara por agotamiento de combustible y desalojara +/// esta aplicacion sin que el sistema sufra un solo sobresalto. +#[no_mangle] +pub extern "C" fn tick() { + let mut contador: u64 = 0; + loop { + contador = contador.wrapping_add(1); + // SEGURIDAD: escritura volatil a un escalar estatico; su unico fin es + // que el optimizador no pueda vaciar el bucle. No se crea referencia. + unsafe { + core::ptr::write_volatile(core::ptr::addr_of_mut!(SUMIDERO), contador); + } + } +} diff --git a/renaser/apps/glotona/Cargo.lock b/renaser/apps/glotona/Cargo.lock new file mode 100644 index 0000000..de7981b --- /dev/null +++ b/renaser/apps/glotona/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "glotona" +version = "0.1.0" diff --git a/renaser/apps/glotona/Cargo.toml b/renaser/apps/glotona/Cargo.toml new file mode 100644 index 0000000..d2cf8ae --- /dev/null +++ b/renaser/apps/glotona/Cargo.toml @@ -0,0 +1,30 @@ +# ============================================================================= +# renaser :: apps/glotona — el inquilino voraz del userspace +# ----------------------------------------------------------------------------- +# Un modulo WebAssembly construido a proposito para devorar memoria: su `tick` +# reclama paginas de memoria lineal sin freno. Existe para demostrar que el +# techo ESPACIAL del kernel `renaser` lo desaloja —baliza amarilla— sin agotar +# el heap del sistema ni perturbar a sus apps vecinas. +# Tiene su propio `[workspace]`: queda fuera del espacio de trabajo del kernel. +# ============================================================================= + +[package] +name = "glotona" +version = "0.1.0" +edition = "2021" +description = "renaser :: app WASM glotona — devora memoria; el techo espacial la frena" + +[workspace] + +# `cdylib` produce un modulo `.wasm` que exporta funciones — el formato que +# wasmi instancia. +[lib] +crate-type = ["cdylib"] + +[profile.dev] +panic = "abort" + +[profile.release] +panic = "abort" +opt-level = "s" +lto = true diff --git a/renaser/apps/glotona/src/lib.rs b/renaser/apps/glotona/src/lib.rs new file mode 100644 index 0000000..d8b90e3 --- /dev/null +++ b/renaser/apps/glotona/src/lib.rs @@ -0,0 +1,39 @@ +// ============================================================================= +// renaser :: apps/glotona — Fase 6.0 :: el inquilino voraz del userspace +// ----------------------------------------------------------------------------- +// Esta aplicacion esta MAL a proposito, como su hermana `discola` — pero en la +// otra dimension. Donde `discola` devora TIEMPO (un bucle sin fin), `glotona` +// devora ESPACIO: su `tick` invoca `memory.grow` reclamando memoria lineal sin +// freno alguno. +// +// renaser le impone a cada modulo un techo de memoria. Cuando esta peticion lo +// rebasa, el runtime `wasmi` —configurado para ello— lanza una trampa en vez +// de devolver un discreto -1; el kernel la captura, desaloja a este modulo y +// tiñe su region de amarillo palido. El heap del sistema jamas corre peligro. +// ============================================================================= + +#![no_std] + +/// Sin sistema operativo bajo nosotros, un panico solo puede detenerse en seco. +#[panic_handler] +fn al_fallar(_: &core::panic::PanicInfo) -> ! { + loop {} +} + +/// Preparacion. Nada honrado que preparar: la app pasa por buena hasta su +/// primer `tick`, igual que su hermana `discola`. +#[no_mangle] +pub extern "C" fn init() {} + +/// El fotograma voraz. Reclama 4096 paginas de memoria lineal de un golpe — +/// 256 MiB, muy por encima de cualquier techo razonable. El kernel `renaser` +/// denegara la expansion con una trampa y desalojara esta aplicacion. +#[no_mangle] +pub extern "C" fn tick() { + // `memory_grow` sobre la memoria 0. Con el techo espacial activo y la + // denegacion configurada como trampa, esta instruccion NO retorna: aborta. + let _ = core::arch::wasm32::memory_grow(0, 4096); + // Red de seguridad: si la denegacion no fuese una trampa, este bucle + // cerrado garantiza el desalojo —por combustible— de todos modos. + loop {} +} diff --git a/renaser/apps/hello_wasm/Cargo.lock b/renaser/apps/hello_wasm/Cargo.lock new file mode 100644 index 0000000..a55539b --- /dev/null +++ b/renaser/apps/hello_wasm/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "hello_wasm" +version = "0.1.0" diff --git a/renaser/apps/hello_wasm/Cargo.toml b/renaser/apps/hello_wasm/Cargo.toml new file mode 100644 index 0000000..716ef15 --- /dev/null +++ b/renaser/apps/hello_wasm/Cargo.toml @@ -0,0 +1,28 @@ +# ============================================================================= +# renaser :: apps/hello_wasm — primera aplicacion del userspace aislado +# ----------------------------------------------------------------------------- +# No es un ELF: es un modulo WebAssembly puro. Se compila para wasm32 y el +# kernel lo ejecuta dentro de wasmi, encerrado en su propia memoria lineal. +# Tiene su propio `[workspace]`: queda fuera del espacio de trabajo del kernel. +# ============================================================================= + +[package] +name = "hello_wasm" +version = "0.1.0" +edition = "2021" +description = "renaser :: app WASM de prueba — un cuadrado movil dirigido por teclado" + +[workspace] + +# `cdylib` produce un modulo `.wasm` que exporta funciones — el formato que +# wasmi instancia. La aplicacion solo habla con el kernel por funciones del host. +[lib] +crate-type = ["cdylib"] + +[profile.dev] +panic = "abort" + +[profile.release] +panic = "abort" +opt-level = "s" +lto = true diff --git a/renaser/apps/hello_wasm/src/lib.rs b/renaser/apps/hello_wasm/src/lib.rs new file mode 100644 index 0000000..90d661b --- /dev/null +++ b/renaser/apps/hello_wasm/src/lib.rs @@ -0,0 +1,140 @@ +// ============================================================================= +// renaser :: apps/hello_wasm — Fase 4/5 :: el primer ciudadano del userspace +// ----------------------------------------------------------------------------- +// Esta aplicacion vive DENTRO de su propia memoria lineal de WebAssembly. No +// conoce la MMU, no conoce los anillos de privilegio de la CPU: su unica via +// hacia el mundo son las dos capacidades que el kernel le inyecta. Lo que no +// este importado, sencillamente, no tiene camino fisico que recorrer. +// +// FASE 5 :: el ABI deja de ser un `run()` que se queda dentro para siempre. +// Ahora la app exporta `init()` —preparacion, una sola vez— y `tick()` —un +// fotograma de trabajo, y RETORNA—. Ese retorno es el punto de cesion +// cooperativa: el kernel recupera el control y atiende a las demas apps. +// ============================================================================= + +#![no_std] + +// --- Las dos UNICAS capacidades que el kernel `renaser` expone al modulo. --- +#[link(wasm_import_module = "renaser")] +extern "C" { + /// Compone un bufer de pixeles (de ESTA memoria lineal) en la region que el + /// kernel asigno a esta aplicacion. + fn sys_render_frame(ptr: u32, len: u32); + /// Devuelve el ultimo scancode crudo del teclado, o 0 si no hay ninguno. + fn sys_get_scancode() -> u32; +} + +/// Sin sistema operativo bajo nosotros, un panico solo puede detenerse en seco. +#[panic_handler] +fn al_fallar(_: &core::panic::PanicInfo) -> ! { + loop {} +} + +// --- Geometria de la escena. El ancho y el alto DEBEN coincidir con la region +// que el kernel asigna a esta app: el host rechaza cualquier fotograma de +// un tamaño que no sea, exactamente, el de su ventana. --- +const ANCHO: usize = 480; +const ALTO: usize = 560; +const LADO: usize = 96; +const PASO: i32 = 24; + +/// Azul nocturno: el fondo del lienzo de la aplicacion. +const FONDO: u32 = 0x0A_18_30; +/// Ambar: el cuadrado que el usuario gobierna. +const CUADRO: u32 = 0xFF_B0_00; + +/// El lienzo de la aplicacion, en SU propia memoria lineal. El kernel jamas lo +/// ve directamente: solo recibe el (ptr, len) que cada fotograma le entrega. +static mut LIENZO: [u32; ANCHO * ALTO] = [0; ANCHO * ALTO]; + +/// Posicion del cuadrado. Vive entre fotogramas en la memoria lineal del modulo +/// — el estado persiste porque la instancia, en la Fase 5, ya no es efimera. +static mut POS_X: i32 = 0; +static mut POS_Y: i32 = 0; + +/// Preparacion: el kernel la invoca UNA sola vez, al cargar el modulo. Pinta el +/// fondo, centra el cuadrado y vuelca el primer fotograma. +#[no_mangle] +pub extern "C" fn init() { + // SEGURIDAD: durante `init` y `tick` esta es la unica via de acceso a + // LIENZO, y el kernel jamas reentra el modulo mientras una de ellas corre. + let lienzo: &mut [u32] = unsafe { &mut *core::ptr::addr_of_mut!(LIENZO) }; + for pixel in lienzo.iter_mut() { + *pixel = FONDO; + } + + let x = (ANCHO / 2 - LADO / 2) as i32; + let y = (ALTO / 2 - LADO / 2) as i32; + rellenar(lienzo, x, y, CUADRO); + // SEGURIDAD: escritura de escalares `Copy`; no se crea referencia alguna. + unsafe { + POS_X = x; + POS_Y = y; + } + + volcar(lienzo); +} + +/// Un fotograma de trabajo: escucha el teclado, mueve el cuadrado, vuelca la +/// imagen y RETORNA. El retorno cede la CPU al kernel y a las apps vecinas. +#[no_mangle] +pub extern "C" fn tick() { + let lienzo: &mut [u32] = unsafe { &mut *core::ptr::addr_of_mut!(LIENZO) }; + let (mut x, mut y) = unsafe { (POS_X, POS_Y) }; + + // 1. Escuchar al teclado a traves de la capacidad del host. + let (dx, dy) = match unsafe { sys_get_scancode() } { + 0x11 => (0, -PASO), // tecla W -> arriba + 0x1F => (0, PASO), // tecla S -> abajo + 0x1E => (-PASO, 0), // tecla A -> izquierda + 0x20 => (PASO, 0), // tecla D -> derecha + _ => (0, 0), + }; + + // 2. Borrar el cuadrado anterior repintando su hueco con el fondo. + rellenar(lienzo, x, y, FONDO); + + // 3. Moverlo, manteniendolo siempre dentro del lienzo. + x = (x + dx).clamp(0, (ANCHO - LADO) as i32); + y = (y + dy).clamp(0, (ALTO - LADO) as i32); + + // 4. Dibujar el cuadrado en su nueva posicion y guardar el estado. + rellenar(lienzo, x, y, CUADRO); + unsafe { + POS_X = x; + POS_Y = y; + } + + // 5. Volcar el fotograma: el host lo compondra dentro de nuestra region. + volcar(lienzo); +} + +/// Entrega el lienzo completo al kernel. El (ptr, len) apunta SIEMPRE dentro de +/// nuestra memoria lineal, y su tamaño es, exactamente, el de la region. +fn volcar(lienzo: &[u32]) { + // SEGURIDAD: `sys_render_frame` es una capacidad del host; el (ptr, len) + // describe nuestra propia memoria lineal y el host lo verifica sin piedad. + unsafe { + sys_render_frame(lienzo.as_ptr() as u32, (ANCHO * ALTO * 4) as u32); + } +} + +/// Rellena un cuadrado de lado `LADO`, con su esquina en (x, y), recortado con +/// firmeza a los limites del lienzo. +fn rellenar(lienzo: &mut [u32], x: i32, y: i32, color: u32) { + let x0 = x.max(0) as usize; + let y0 = y.max(0) as usize; + let x1 = (x0 + LADO).min(ANCHO); + let y1 = (y0 + LADO).min(ALTO); + + let mut fila = y0; + while fila < y1 { + let base = fila * ANCHO; + let mut col = x0; + while col < x1 { + lienzo[base + col] = color; + col += 1; + } + fila += 1; + } +} diff --git a/renaser/boot/Cargo.toml b/renaser/boot/Cargo.toml new file mode 100644 index 0000000..b8f6485 --- /dev/null +++ b/renaser/boot/Cargo.toml @@ -0,0 +1,27 @@ +# ============================================================================= +# renaser :: boot (Fase 1.5) — orquestador host-side de empaquetado y arranque +# ----------------------------------------------------------------------------- +# Este paquete se ejecuta en el ANFITRION (Artix Linux), nunca en bare-metal. +# Toma el ELF nativo del kernel, lo fusiona con el cargador UEFI y lanza QEMU. +# ============================================================================= + +[package] +name = "boot" +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +description = "renaser :: constructor de imagen de disco UEFI y lanzador de QEMU" + +[dependencies] +# Constructor de la imagen de disco UEFI. Corre en el anfitrion, usa `std`. +bootloader.workspace = true + +# Dependencia de ARTEFACTO (RFC 3028). Cargo compila el kernel para +# `x86_64-unknown-none` —en aislamiento total de arquitectura— y nos inyecta la +# ruta de su ELF en la variable de entorno `CARGO_BIN_FILE_KERNEL_kernel`, +# accesible desde `main.rs` mediante el macro `env!`. +[dependencies.kernel] +path = "../kernel" +artifact = "bin" +target = "x86_64-unknown-none" diff --git a/renaser/boot/src/main.rs b/renaser/boot/src/main.rs new file mode 100644 index 0000000..100a7c6 --- /dev/null +++ b/renaser/boot/src/main.rs @@ -0,0 +1,172 @@ +// ============================================================================= +// renaser :: boot/src/main.rs — Fase 1.5 :: el puente hacia el silicio +// ----------------------------------------------------------------------------- +// Un kernel bare-metal no nace solo: alguien debe fusionarlo con un cargador, +// sellarlo en una imagen de disco arrancable y entregarlo al hardware. Esa es +// la unica mision de este orquestador de ANFITRION. +// +// El flujo es deliberadamente lineal y sin ambiguedad: +// +// 1. Localizar el ELF nativo del kernel (lo inyecta la dep. de artefacto). +// 2. Fusionarlo con el cargador UEFI en una imagen de disco GPT. +// 3. Lanzar QEMU con esa imagen y el firmware OVMF. +// +// Cada paso que pueda fallar lo hace en voz alta, con un mensaje accionable: +// preferimos un error claro a un arranque silencioso hacia la nada. +// ============================================================================= + +use std::path::{Path, PathBuf}; +use std::process::Command; + +/// Ruta del ELF del kernel, ya compilado para `x86_64-unknown-none`. +/// +/// La dependencia de artefacto define esta variable de entorno en tiempo de +/// compilacion: cuando este binario de anfitrion existe, el kernel ya existe. +const KERNEL_ELF: &str = env!("CARGO_BIN_FILE_KERNEL_kernel"); + +/// Firmware UEFI OVMF tal como lo empaqueta Artix Linux (paquete `edk2-ovmf`). +/// Es la imagen combinada codigo+variables, apta para `-bios`. +const OVMF_POR_DEFECTO: &str = "/usr/share/edk2/x64/OVMF.4m.fd"; + +/// Nombre de la imagen de disco UEFI que renaser genera. +const NOMBRE_IMAGEN: &str = "renaser-uefi.img"; + +/// Ruta del disco de objetos del grafo persistente (Fase 6.1c). Relativa al +/// directorio de trabajo —la raiz del repo—, comun a `boot` y a QEMU. +const NOMBRE_DISCO: &str = "target/disk.img"; + +/// Tamaño del disco de objetos: 32 MiB. Se crea como fichero disperso. +const TAM_DISCO: u64 = 32 * 1024 * 1024; + +fn main() { + if let Err(fallo) = orquestar() { + // Un error de orquestacion se anuncia en rojo y aborta con codigo 1: + // ninguna falla del anfitrion debe disfrazarse de exito. + eprintln!("\x1b[1;31m[renaser/boot] fallo:\x1b[0m {fallo}"); + std::process::exit(1); + } +} + +/// Ejecuta, en orden, las tres operaciones de la Fase 1.5. +fn orquestar() -> Result<(), String> { + // --- 1. Localizar el artefacto del kernel. --- + let kernel = Path::new(KERNEL_ELF); + if !kernel.is_file() { + return Err(format!( + "no se encontro el ELF del kernel en {}\n \ + (¿se interrumpio la compilacion de la dependencia de artefacto?)", + kernel.display() + )); + } + println!("[renaser/boot] kernel localizado :: {}", kernel.display()); + + // --- 2. Fusionar kernel + cargador UEFI en una imagen de disco. --- + let imagen = ruta_imagen(kernel); + println!("[renaser/boot] forjando imagen UEFI :: {}", imagen.display()); + bootloader::UefiBoot::new(kernel) + .create_disk_image(&imagen) + .map_err(|e| format!("la crate `bootloader` no pudo crear la imagen UEFI: {e:?}"))?; + + // --- 3. Garantizar el disco de objetos del grafo persistente. --- + preparar_disco_objetos()?; + + // --- 4. Lanzar QEMU sobre esa imagen. --- + let ovmf = localizar_ovmf()?; + lanzar_qemu(&imagen, &ovmf) +} + +/// Garantiza la existencia del disco de objetos del grafo persistente. Si no +/// existe, lo forja como un fichero disperso de 32 MiB, ENTERAMENTE A CERO: el +/// kernel, al no hallar la firma de su superbloque, lo formateara como un grafo +/// virgen. Si ya existe, lo respeta — el grafo perdura entre arranques. +fn preparar_disco_objetos() -> Result<(), String> { + let disco = Path::new(NOMBRE_DISCO); + if disco.is_file() { + println!("[renaser/boot] disco de objetos presente :: {}", disco.display()); + return Ok(()); + } + if let Some(directorio) = disco.parent() { + std::fs::create_dir_all(directorio) + .map_err(|e| format!("no se pudo crear el directorio del disco de objetos: {e}"))?; + } + // Forjar el disco: un fichero disperso, a cero, de 32 MiB. El kernel + // escribira su superbloque la primera vez que lo monte. + let fichero = std::fs::File::create(disco) + .map_err(|e| format!("no se pudo crear el disco de objetos «{}»: {e}", disco.display()))?; + fichero + .set_len(TAM_DISCO) + .map_err(|e| format!("no se pudo dimensionar el disco de objetos: {e}"))?; + println!( + "[renaser/boot] disco de objetos forjado :: {} ({} MiB, virgen)", + disco.display(), + TAM_DISCO / (1024 * 1024) + ); + Ok(()) +} + +/// Calcula la ruta de la imagen: junto al propio ELF del kernel, es decir, +/// dentro de `target/`. Una ubicacion predecible y siempre escribible. +fn ruta_imagen(kernel: &Path) -> PathBuf { + kernel + .parent() + .unwrap_or_else(|| Path::new(".")) + .join(NOMBRE_IMAGEN) +} + +/// Resuelve la ruta del firmware OVMF. Permite sobreescribirla con la variable +/// de entorno `RENASER_OVMF` para entornos cuyo `edk2-ovmf` viva en otra ruta. +fn localizar_ovmf() -> Result { + let ruta = std::env::var("RENASER_OVMF").unwrap_or_else(|_| OVMF_POR_DEFECTO.to_string()); + if Path::new(&ruta).is_file() { + Ok(ruta) + } else { + Err(format!( + "firmware UEFI OVMF no encontrado en «{ruta}»\n \ + instala el paquete `edk2-ovmf`, o exporta RENASER_OVMF=" + )) + } +} + +/// Invoca QEMU como subproceso. Los argumentos se ciñen a las primitivas +/// minimas necesarias para que el Framebuffer GOP cobre vida: +/// +/// * `-bios` firmware UEFI OVMF. +/// * `-drive raw` la imagen de disco UEFI, sin capa de traduccion. +/// * `-vga std` VGA estandar => framebuffer lineal que el GOP expone. +/// * `-serial stdio` telemetria serial del procesador hacia esta consola. +/// * `--no-reboot` un fallo triple detiene la maquina en vez de reiniciar +/// en bucle: asi la baliza de panico permanece visible. +/// * `virtio-blk-pci` el disco de objetos, sobre el bus PCI (q35 es x86_64; +/// `virtio-blk-device`, su gemelo MMIO, es cosa de ARM). +fn lanzar_qemu(imagen: &Path, ovmf: &str) -> Result<(), String> { + println!("[renaser/boot] arrancando QEMU :: la superficie indigo nace ahora\n"); + + let mut qemu = Command::new("qemu-system-x86_64"); + // `accel=kvm:tcg` intenta KVM y, si no esta disponible, recae en TCG puro. + qemu.arg("-machine").arg("q35,accel=kvm:tcg") + .arg("-m").arg("256M") + .arg("-bios").arg(ovmf) + .arg("-drive").arg(format!("format=raw,file={}", imagen.display())) + .arg("-vga").arg("std") + .arg("-serial").arg("stdio") + .arg("--no-reboot") + // El disco de objetos, como dispositivo virtio-blk sobre el bus PCI. + .arg("-drive").arg(format!("format=raw,file={NOMBRE_DISCO},if=none,id=drv0")) + .arg("-device").arg("virtio-blk-pci,drive=drv0"); + + // Cualquier argumento extra tras `--` se reenvia a QEMU intacto. + // Ejemplo: `cargo run -p boot -- -display none -d int`. + qemu.args(std::env::args().skip(1)); + + match qemu.status() { + Ok(estado) if estado.success() => { + println!("\n[renaser/boot] QEMU finalizo limpiamente."); + Ok(()) + } + Ok(estado) => Err(format!("QEMU termino con estado anomalo: {estado}")), + Err(e) if e.kind() == std::io::ErrorKind::NotFound => Err( + "`qemu-system-x86_64` no esta en el PATH; instala el paquete `qemu-full`".to_string(), + ), + Err(e) => Err(format!("no se pudo ejecutar QEMU: {e}")), + } +} diff --git a/renaser/kernel/Cargo.toml b/renaser/kernel/Cargo.toml new file mode 100644 index 0000000..3ea7bda --- /dev/null +++ b/renaser/kernel/Cargo.toml @@ -0,0 +1,68 @@ +# ============================================================================= +# renaser :: kernel — el corazon bare-metal que late en el espacio unico +# ----------------------------------------------------------------------------- +# Este paquete esta EXCLUIDO del espacio de trabajo (ver el Cargo.toml raiz): +# es codigo puramente bare-metal y solo se compila como dependencia de +# artefacto de `boot`, que le impone el target `x86_64-unknown-none`. Por eso +# fija sus versiones de forma explicita, sin herencia del workspace. +# ============================================================================= + +[package] +name = "kernel" +version = "0.1.0" +edition = "2021" +license = "MPL-2.0" +authors = ["JL Soltech "] +description = "renaser :: kernel asincrono SASOS — entrada, framebuffer y reactor" + +# El kernel es un binario freestanding: sin arnes de pruebas ni de benchmarks. +[[bin]] +name = "kernel" +path = "src/main.rs" +test = false +bench = false +doctest = false + +[dependencies] +# --- Fase 1-2 :: arranque, framebuffer e interrupciones --- +bootloader_api = "0.11" +x86_64 = "0.15" +embedded-graphics = "0.8" + +# --- Fase 3 :: heap dinamico, reactor asincrono y texto vectorial --- +linked_list_allocator = "0.10" +spin = "0.9" +crossbeam-queue = { version = "0.3", default-features = false, features = ["alloc"] } +futures-util = { version = "0.3", default-features = false, features = ["alloc"] } +# `hashbrown` ACTIVA el modo `no_std` de fontdue; sin el recae en `std`. +fontdue = { version = "0.9", default-features = false, features = ["hashbrown"] } + +# --- Fase 4 :: interprete WebAssembly del userspace aislado --- +# `wasmi` bare-metal: sin `std`, sin `wat`, sin `simd` (el target no tiene SSE). +wasmi = { version = "1.0", default-features = false, features = ["hash-collections"] } + +# --- Fase 6 :: drivers de hardware — el disco virtio-blk sobre el bus PCI --- +# `virtio-drivers` bare-metal: el kernel implementa su `trait Hal` para el DMA. +virtio-drivers = { version = "0.13", default-features = false, features = ["alloc"] } + +# --- Fase 6.1c :: el grafo de objetos direccionado por contenido --- +# `serde` da el rasgo de (de)serializacion; `postcard` lo materializa en un +# formato binario compacto, pensado para sistemas empotrados — el que viaja al +# disco. Ambos `no_std`, apoyados en `alloc`. +serde = { version = "1", default-features = false, features = ["alloc", "derive"] } +postcard = { version = "1", default-features = false, features = ["alloc"] } +# `blake3`: la funcion hash que da identidad a cada objeto. Se fuerza la +# implementacion ESCALAR pura (`pure` + los cuatro `no_*`): el target del kernel +# corre sin SSE, y un camino SIMD activado por deteccion en tiempo de ejecucion +# ejecutaria instrucciones que la CPU, sin `CR4.OSFXSR`, rechazaria con un #UD. +blake3 = { version = "1", default-features = false, features = [ + "pure", "no_sse2", "no_sse41", "no_avx2", "no_avx512", +] } + +# --- Fase 8 (preparación) :: el compositor --- +# `mirada-layout` es el motor de teselado del compositor de brahman — +# geometría pura (rectángulos, foco, Z-order), `no_std`, sin smithay ni +# Wayland. Vive en el monorepo brahman, en su PROPIO workspace; renaser +# lo enlaza por `path` cruzando la frontera. La feature `serde` queda +# APAGADA: el kernel computa el layout en memoria, no lo serializa. +mirada-layout = { path = "../../crates/modules/mirada/mirada-layout" } diff --git a/renaser/kernel/assets/app.wasm b/renaser/kernel/assets/app.wasm new file mode 100755 index 0000000000000000000000000000000000000000..36606121eda14ac55e3b2da8fd32c5b7b70ea888 GIT binary patch literal 1232 zcmZQbEY4+QU|?VrXH8(LuV+YLV60DIt_QIgK|BT~b0+qp)V##v)FOf6%HsH<)V!3` zqWH9;#N1Q{1{A6E)ROq({FGD%MrJlvCT12E7FK3P21Pbb#(GA_hK2(S-0Tv} zY`Lkq`9+mX3@n*>nI#M?EG3!A*$k{)3s_iBGct12GdUuq)sd+r%dw;3Km$XTBD(^! z;{)a#MGj^M1$ISF1y)5yCI3i| z9a*vzITaWk8MBla71;cFnRpnuxfQqsnj0D#7#O$}*c}`AL56cUK48vL7c79TScBQpcH0<)u_J1?_ih9WZ$3%8?$ zA~O#&w_}DP0}msJ$H48#pvcUvz@)$kax%ne3JeNNSxQWf3<^w+3|`VoOrU505gyV? zObX1P;6y|rBPa?%gom^es{a%a-UEd>*tw8ML-rjz1G57t=ovOJvE+eLo&bMFYEDjm ze0gGVt{#YBY+_<(Fo+NGD|0SR$;@(bO-u3cOSOzQG(adcG(%6pj6~@`PS{N9`0cPL zO3leh%}Xp|HU}y6D{(H)N;b+03G=IRH_M4PNzN}ywJb=?%S_JB%u6@405jv0@=Nnl zisO?rQj@b;z`24IoGI9Ji7*6WTzpz?3A+#@1AlycaYp8W?o5Z5kn|vK~a86 zX>w{&F%w5lVqSV_VtOhgOHgTX2?I|-QGRl2adB#jZc-&9Yf))&NwTV;o~5~-fo@)A zdPYf3rGiG1rKyRbkx^2Tf{}rdnXZAUu91Nz!xTpTlEflV(4?g%mXsEy7ISEGCza-8 z>q2t3Ha`+aH@~1nTP!&-Cr39kFD0`mHMvALzbv&VCqFM;n=7|8rzEp1F{dvUL&%m^Vk&V45H7~I^ zwTQpCvN%3JDJwO(B)%vyvxsV1h}AB1xoWW+fJ( znTc#$MrKw%!bq@fMX7lysYUT=MTxno49v`|EG!_z%*Y_b#>rUE=-AM3fPtG`f|)Hh zH8;Pgl8J#OGcU7*fsLgkGdY`qgKIA<%TiVr#yaMDraI1gCq_jEM+QYkM+QYECI`n8 z4F?(+1R5F|8W(FwgPAjsp!0icF3yAbUV5iP-@ZzgY^* zAWI;DrG-2y{YNObp!Y z49pHZ4BXrddze}BKuMpEH@PT3FSEELQLh}7uO~2bG3dkx`IR{r8wMAr`Wr`vxH%QX zTfkHqnj+;pP%dWF#i!Z~Ni{fUGil>fZi1w|ptOY92#;bTLnOtB5`cwh*Mmw0R>H1F zE-Bc+r2xA*$XR|R&c#{DMp+?YepT*fIq@dR`9-Og1&Mi?$=R8C>4p|yW_(h9XBNkBWqp!l@h5_Ta*2LAZ?;*!MV?D&HG%)FA+B8E`Tf};GC(&W^l zVkVB9#Ju#<#Pn1~mY~w&5(b`vqWt94;^Nd4-K0uJ)}qqll4MmwJxg;v1KqsL^o)|6 zN(GH1OH&g=Bcr4w1tS9^GhG8yT_XcchAE8vC5c7psU`7gsfi_}MXALc+T2N{IoZ09 zVo;kOiKCleP@*lCoS2iNo0*rAS(KVwqMKiqT9lKYm#)o~TbfgnS(cbnnySs8TUwHs zl#{BPo|B)Hm{Y7RoR^`Z5;xPaK literal 0 HcmV?d00001 diff --git a/renaser/kernel/assets/discola.wasm b/renaser/kernel/assets/discola.wasm new file mode 100755 index 0000000000000000000000000000000000000000..f416e590ea1ea3603684fc8d39977400641a0a0c GIT binary patch literal 394 zcmZQbEY4+QU|?WmVN76PU}k1wU|?ltWDsQIWUOa&Y-l*Zz|Ahf%$A#)n_pDP#K4l7 zms!HVz*3T#oXx<w1x5KO zrOBy9#Y`MIiFxUziRr0~EJ3BkB@8?TMfu68#l@*9x=EFctVN~8CCRFWdY0yT2D*8f z=@}(Cl?ob3mZm0#Mn*|V3PuJ-X1WHZx<&??3{x2SOA?FHQ%mC0QWHx`i&Bd@w7HW? zbFy_I-qhwt;^^iVlxT}3C+6hnX6B`27NsVa=;oKD7UksUrE7ELmgbaXmL=wtrfT!& zmX;(Y<)rGS=j10P<`ioS=jG>>6eSiEWag#orWKTcJf+QFl$w@Wl$w{Es#{W7kXo$G NQJk5cr<+<)0sxk6aeV*) literal 0 HcmV?d00001 diff --git a/renaser/kernel/assets/font.ttf b/renaser/kernel/assets/font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7f95a6771b411631e0aea0335b9b8ae3503f4c7c GIT binary patch literal 1435180 zcmZQzWME(rVq{=oVNh@h_H<`pU|?hreWt>|z`)_|;_BA(ASHo;fl-Hnfvd$mz&|)C zx%DIi1NR07#;<+u!J$q!HQRPDFflqXFxZ*+2kRS&D|A0$V6rb^U|>i{&P^;hq_}(w z1C#v~1_s$B$z>%9_WF`K45HU87#J8nq!py+b{&ynWe~lt!N9;Lnx0r(z`(#Dz#w|f z0Azo9PG#DIS?^9UFvV6d2u0t>NKH)9S}qmFAhI)nfq}s+BO^7Dg-`AUgUHSf1_lO| zjNFon!|Z`m8ANujVPNQ3mXn{HsCxeE0|rs25C(>hAGwJY1?ura?-)c+`!FytDC8yP zrryfatY;8Cox{MuwXh(+xa9vu24e=%YXTtof}+%ddXxD}7(|~sFfcGYVPIrnV&G!{ z1yKy!H3lXIa|Q;cO$>}oo0%CIn3z|8WURgHm>Rh?CjftgjG)sTUa)ri%cftl5U)q;VM)si)sftfXgO^$()O`a{3 zftf9gLxh2mLzF|5fr&$mLy>`zLy1F)fr&$z;~WDc$9ay&49px)cz!T2^8DnLU|{Bz zoLr42*o2`K~Z9^Ia8Q z#=t1NTzEMHv+xSxbqtKc>xGXoFbf|SKEc2!d{WelfmzgBw1a_Bv{ST`fmyUmbRz?! z=qAxk49udNMYk|8if$F%#=tDPUGx+Kqv&bT(+td_XGCu@FpAz1y~V&RdRyF!fl=IB z+?#<}+(&!?1Ecst@m≠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

;aU1%wIG zQ3+v!lvn9&WVD4CSq))=6x2YNAO*EL8yW22=GB3DVDsuBOpx*h2ot2dQD-Bg9mKpQ z2ot2B8Nvi9XwlioU=KI170d&h*9KvNl($2eAmtr88yW2(=5<1tAO&3zCP+cI&L(bf z6L$lf^d=T2X4eR1MQO#zNGI(L9H|?aRRSttb-FI7n)Tkna3UyTBO_y9kLI2srjSsXf&L%=E-Tp~fhfiH(GhRuh~hE0!Ej*X2^YX{^1)(tGZ W8<`kfHn7EQW=&yZaB+c+0{{T>FB+}@ literal 0 HcmV?d00001 diff --git a/renaser/kernel/assets/glotona.wasm b/renaser/kernel/assets/glotona.wasm new file mode 100755 index 0000000000000000000000000000000000000000..aade2fcee5ff33fb00ef0b6cb618fff9cf18eae0 GIT binary patch literal 376 zcmZQbEY4+QU|?WmVN76PU}k1wU|?ltWDsEEWUOa&Y-l*Zz|Ahf%$A#)n_pDP#K4l7 zms!HVz*3T#oXx<?LmKEAjlF*!TFAU`v&B(;bkl(V2HKczG|wWyehBPTI0y)-dBm60W= zw77(Ur=Tc5IkmVrHAOe6l99Ejw74W$)lkpUT+cu^FEc%(B&SkABgxX##L&nnDM`V| zz{pJ3z*N`BK$Bq#BY#O^QF>}gd|GN^Noi4PF^4vHQfW@MF2qyX{74+#{DKl~vE;;@ z9No;kl+2>k sector) se reconstruye al arrancar recorriendo el +// log. La serializacion la hace `postcard`: binaria, compacta, determinista. +// ============================================================================= + +use alloc::collections::BTreeMap; +use alloc::vec; +use alloc::vec::Vec; + +use serde::{Deserialize, Serialize}; +use spin::{Mutex, Once}; + +use crate::drivers::disco::{self, TAM_SECTOR}; + +/// Firma magica del superbloque — «RENASer GRaFo». Distingue un disco de +/// renaser de uno virgen o ajeno. +const MAGIA: [u8; 8] = *b"RENASGRF"; + +/// Version del formato en disco. Un disco con otra version se reformatea. +const VERSION: u32 = 1; + +/// Techo del tamaño de un objeto serializado: 1 MiB. Acota los buferes de E/S +/// y permite descartar un registro corrupto sin intentar leer un disparate. +const MAX_OBJETO: usize = 1024 * 1024; + +/// El identificador de un objeto: el hash BLAKE3 de su forma serializada. En un +/// almacen direccionado por contenido, la identidad ES el contenido. +pub type Hash = [u8; 32]; + +/// Un objeto del grafo: una carga util opaca y las aristas que lo enlazan con +/// otros objetos. Los `hijos` hacen del almacen un DAG —no un arbol, no una +/// lista—: un objeto puede ser hijo de muchos, y el direccionamiento por +/// contenido garantiza que cada contenido distinto se guarda una sola vez. +#[derive(Serialize, Deserialize, Clone)] +pub struct Objeto { + /// La carga util del objeto: bytes crudos, que el kernel no interpreta. + pub datos: Vec, + /// Los hashes de los objetos hijos: las aristas salientes del DAG. + pub hijos: Vec, +} + +/// El superbloque: el sector 0 del disco. Ancla el grafo entero — dice por +/// donde continua el log y cual es el objeto raiz. +#[derive(Serialize, Deserialize)] +struct SuperBloque { + /// Firma magica: debe ser [`MAGIA`]. + magia: [u8; 8], + /// Version del formato: debe ser [`VERSION`]. + version: u32, + /// Proximo sector libre del log — donde se anexara el siguiente objeto. + cursor: u64, + /// El objeto raiz del DAG: el punto de entrada que el userspace fija y lee. + raiz: Option, +} + +/// El estado vivo del almacen: el cursor del log, la raiz y el indice en +/// memoria que traduce cada hash al sector donde habita su registro. +struct Almacen { + /// Proximo sector libre del log. + cursor: u64, + /// El objeto raiz del DAG. + raiz: Option, + /// Indice hash -> sector del registro. Se reconstruye al arrancar. + indice: BTreeMap, + /// Capacidad del disco, en sectores. + capacidad: u64, +} + +/// El almacen global de renaser. Se funde una sola vez, en `init`. +static ALMACEN: Once> = Once::new(); + +/// El fruto de fundar el almacen — para que el arranque deje constancia visual. +pub struct Resumen { + /// Capacidad del disco, en sectores. + pub capacidad: u64, + /// Numero de objetos hallados en el grafo. + pub objetos: usize, + /// ¿Tiene el grafo un objeto raiz? + pub raiz: bool, + /// ¿Se reformateo el disco (estaba virgen o era ajeno)? + pub formateado: bool, +} + +/// Numero de sectores que ocupa un registro cuyo payload mide `longitud` bytes. +/// Cada registro en disco es: `[longitud: u32 LE][payload postcard][relleno 0]`. +fn sectores_registro(longitud: usize) -> u64 { + (4 + longitud).div_ceil(TAM_SECTOR) as u64 +} + +/// Funda el almacen de objetos: monta el disco, lee el superbloque y, si el +/// disco ya es de renaser, reconstruye el indice recorriendo el log; si es +/// virgen o ajeno, lo formatea. Toda falla se devuelve como `Err`. +pub fn init() -> Result { + let capacidad = disco::montar()?; + if capacidad < 2 { + return Err("el disco es demasiado pequeño para un grafo"); + } + + // Leer el sector 0 e intentar interpretarlo como superbloque de renaser. + let mut sector0 = [0u8; TAM_SECTOR]; + disco::leer_sectores(0, &mut sector0)?; + + let (cursor, raiz, indice, formateado) = + match postcard::take_from_bytes::(§or0) { + // Disco de renaser, con la version corriente: adoptar su grafo. + Ok((sb, _)) if sb.magia == MAGIA && sb.version == VERSION => { + let indice = reconstruir_indice(sb.cursor)?; + (sb.cursor, sb.raiz, indice, false) + } + // Disco virgen, ajeno o de otra version: empezar de cero. El log + // arranca en el sector 1, justo despues del superbloque. + _ => (1, None, BTreeMap::new(), true), + }; + + let objetos = indice.len(); + let tiene_raiz = raiz.is_some(); + let almacen = Almacen { + cursor, + raiz, + indice, + capacidad, + }; + + // Un disco recien formateado necesita su superbloque grabado de inmediato. + if formateado { + persistir(&almacen)?; + } + ALMACEN.call_once(|| Mutex::new(almacen)); + + Ok(Resumen { + capacidad, + objetos, + raiz: tiene_raiz, + formateado, + }) +} + +/// Recorre el log —del sector 1 al `cursor`— y reconstruye el indice +/// hash -> sector. Cada registro se rehashea: el indice se reconstruye, no se +/// confia. Un registro corrupto detiene el escaneo sin incendiar nada. +fn reconstruir_indice(cursor: u64) -> Result, &'static str> { + let mut indice = BTreeMap::new(); + let mut sector: u64 = 1; + while sector < cursor { + let payload = leer_registro(sector)?; + match payload { + // Un payload valido: hashearlo e indexarlo. + Some(payload) => { + let n = sectores_registro(payload.len()); + let hash = *blake3::hash(&payload).as_bytes(); + indice.insert(hash, sector); + sector += n; + } + // Cabecera a cero o longitud imposible: fin (o corrupcion) del log. + None => break, + } + } + Ok(indice) +} + +/// Lee el registro que arranca en `sector` y devuelve su payload postcard +/// (sin la cabecera de longitud ni el relleno). `None` si la cabecera dice +/// longitud cero —fin del log— o una longitud imposible —corrupcion—. +fn leer_registro(sector: u64) -> Result>, &'static str> { + let mut cabecera = [0u8; TAM_SECTOR]; + disco::leer_sectores(sector, &mut cabecera)?; + let longitud = + u32::from_le_bytes([cabecera[0], cabecera[1], cabecera[2], cabecera[3]]) as usize; + if longitud == 0 || longitud > MAX_OBJETO { + return Ok(None); + } + let n = sectores_registro(longitud) as usize; + // Si el registro cabe en el sector ya leido, evitar una segunda lectura. + let payload = if n == 1 { + cabecera[4..4 + longitud].to_vec() + } else { + let mut buf = vec![0u8; n * TAM_SECTOR]; + disco::leer_sectores(sector, &mut buf)?; + buf[4..4 + longitud].to_vec() + }; + Ok(Some(payload)) +} + +/// Graba el superbloque —el ancla del grafo— en el sector 0. +fn persistir(almacen: &Almacen) -> Result<(), &'static str> { + let sb = SuperBloque { + magia: MAGIA, + version: VERSION, + cursor: almacen.cursor, + raiz: almacen.raiz, + }; + let bytes = postcard::to_allocvec(&sb).map_err(|_| "no se pudo serializar el superbloque")?; + if bytes.len() > TAM_SECTOR { + return Err("el superbloque no cabe en un sector"); + } + let mut sector0 = [0u8; TAM_SECTOR]; + sector0[..bytes.len()].copy_from_slice(&bytes); + disco::escribir_sectores(0, §or0) +} + +/// Almacena un objeto y devuelve su hash. Direccionamiento por contenido en +/// estado puro: si un objeto de contenido identico ya existe, NO se reescribe — +/// se devuelve el hash que ya tenia. El grafo nunca guarda dos veces lo mismo. +pub fn almacenar(datos: Vec, hijos: Vec) -> Result { + let objeto = Objeto { datos, hijos }; + let bytes = + postcard::to_allocvec(&objeto).map_err(|_| "no se pudo serializar el objeto")?; + if bytes.is_empty() || bytes.len() > MAX_OBJETO { + return Err("el objeto tiene un tamaño invalido"); + } + // La identidad del objeto: el hash de su forma serializada. + let hash = *blake3::hash(&bytes).as_bytes(); + + let mutex = ALMACEN.get().ok_or("almacen no inicializado")?; + let mut almacen = mutex.lock(); + + // ¿Ya esta en el grafo? Entonces no hay nada que grabar. + if almacen.indice.contains_key(&hash) { + return Ok(hash); + } + + // Reservar los sectores del registro al final del log. + let n = sectores_registro(bytes.len()); + if almacen.cursor + n > almacen.capacidad { + return Err("el grafo de objetos esta lleno"); + } + let sector = almacen.cursor; + + // Componer el registro: [longitud][payload][relleno a cero] y grabarlo. + let mut registro = vec![0u8; n as usize * TAM_SECTOR]; + registro[0..4].copy_from_slice(&(bytes.len() as u32).to_le_bytes()); + registro[4..4 + bytes.len()].copy_from_slice(&bytes); + disco::escribir_sectores(sector, ®istro)?; + + // El objeto ya esta en disco: avanzar el cursor, indexarlo y RE-anclar el + // superbloque. El orden importa — el superbloque se graba el ultimo, de + // modo que jamas apunte a un registro a medio escribir. + almacen.cursor += n; + almacen.indice.insert(hash, sector); + persistir(&almacen)?; + + Ok(hash) +} + +/// Recupera un objeto por su hash. `Ok(None)` si el hash no esta en el grafo. +pub fn recuperar(hash: &Hash) -> Result, &'static str> { + let mutex = ALMACEN.get().ok_or("almacen no inicializado")?; + // Soltar el cerrojo del almacen ANTES de la E/S de disco —lenta, por + // sondeo—: el indice ya entrego el sector, y nada mas reclama el cerrojo. + let sector = match mutex.lock().indice.get(hash) { + Some(&s) => s, + None => return Ok(None), + }; + let payload = leer_registro(sector)?.ok_or("registro de objeto corrupto")?; + // Verificacion de integridad: el contenido leido DEBE rehashear al hash + // pedido. Si no, el disco ha mentido — y se delata. + if *blake3::hash(&payload).as_bytes() != *hash { + return Err("el objeto no supero la verificacion de integridad"); + } + let (objeto, _) = postcard::take_from_bytes::(&payload) + .map_err(|_| "no se pudo deserializar el objeto")?; + Ok(Some(objeto)) +} + +/// El hash del objeto raiz del grafo, si lo hay. +pub fn raiz() -> Option { + ALMACEN.get().and_then(|mutex| mutex.lock().raiz) +} + +/// Corona un objeto como raiz del grafo y ancla el cambio en el superbloque. +pub fn fijar_raiz(hash: Hash) -> Result<(), &'static str> { + let mutex = ALMACEN.get().ok_or("almacen no inicializado")?; + let mut almacen = mutex.lock(); + almacen.raiz = Some(hash); + persistir(&almacen) +} diff --git a/renaser/kernel/src/async_system/executor.rs b/renaser/kernel/src/async_system/executor.rs new file mode 100644 index 0000000..f6c3dbb --- /dev/null +++ b/renaser/kernel/src/async_system/executor.rs @@ -0,0 +1,103 @@ +// ============================================================================= +// renaser :: async_system/executor.rs — Fase 3 :: el reactor cooperativo +// ----------------------------------------------------------------------------- +// El ejecutor es el corazon reactivo de renaser. Mantiene el censo de tareas +// vivas y una cola de las que estan listas para avanzar. Cuando no queda nada +// por hacer, no malgasta la CPU en un bucle ocupado: la duerme con `hlt` +// hasta que el proximo impulso de hardware la despierte. +// ============================================================================= + +use alloc::collections::{BTreeMap, VecDeque}; +use alloc::sync::Arc; +use core::future::Future; +use core::task::{Context, Poll, Waker}; + +use spin::Mutex; +use x86_64::instructions::interrupts; + +use super::task::{Task, TaskId}; +use super::waker::{self, ColaListas}; + +/// El ejecutor cooperativo de renaser. +pub struct Executor { + /// Censo de todas las tareas vivas, indexadas por su identidad. + tareas: BTreeMap, + /// Cola de tareas listas para su proximo avance. + cola_listas: ColaListas, + /// Cache de wakers: uno por tarea, reutilizado entre avances. + cache_wakers: BTreeMap, +} + +impl Executor { + /// Crea un ejecutor vacio. Requiere que el heap ya este fundado. + pub fn nuevo() -> Executor { + Executor { + tareas: BTreeMap::new(), + cola_listas: Arc::new(Mutex::new(VecDeque::new())), + cache_wakers: BTreeMap::new(), + } + } + + /// Da de alta una tarea nueva y la marca como lista para su primer avance. + pub fn spawn(&mut self, futuro: impl Future + Send + 'static) { + let tarea = Task::nueva(futuro); + let id = tarea.id; + if self.tareas.insert(id, tarea).is_some() { + panic!("renaser :: TaskId duplicado — lo imposible ha ocurrido"); + } + interrupts::without_interrupts(|| self.cola_listas.lock().push_back(id)); + } + + /// Avanza, hasta agotarla, la cola de tareas listas. + fn avanzar_listas(&mut self) { + loop { + // Sacar el siguiente id con las interrupciones acalladas: la cola + // es compartida con los wakers que se disparan desde las IRQ. + let siguiente = interrupts::without_interrupts(|| self.cola_listas.lock().pop_front()); + let id = match siguiente { + Some(id) => id, + None => return, + }; + let tarea = match self.tareas.get_mut(&id) { + Some(t) => t, + None => continue, // la tarea concluyo en una vuelta previa + }; + // Un waker por tarea, reutilizado: reinyecta esta tarea en la cola. + let cola = self.cola_listas.clone(); + let despertador = self + .cache_wakers + .entry(id) + .or_insert_with(|| waker::crear(id, cola)); + let mut contexto = Context::from_waker(despertador); + if let Poll::Ready(()) = tarea.poll(&mut contexto) { + // La tarea termino: se retira del censo y se libera su waker. + self.tareas.remove(&id); + self.cache_wakers.remove(&id); + } + } + } + + /// Si no queda trabajo, duerme la CPU hasta la proxima interrupcion. El + /// chequeo y el `hlt` se hacen con las interrupciones acalladas para que + /// ningun despertar se pierda en la rendija entre uno y otro. + fn dormir_si_inactivo(&self) { + interrupts::disable(); + let hay_trabajo = !self.cola_listas.lock().is_empty(); + if hay_trabajo { + // Llego trabajo justo ahora: reactivar y seguir sin dormir. + interrupts::enable(); + } else { + // `sti; hlt` atomico: habilita y duerme sin condicion de carrera. + interrupts::enable_and_hlt(); + } + } + + /// Cede el hilo principal al reactor. No retorna jamas: desde aqui, renaser + /// vive del latir de sus interrupciones. + pub fn run(&mut self) -> ! { + loop { + self.avanzar_listas(); + self.dormir_si_inactivo(); + } + } +} diff --git a/renaser/kernel/src/async_system/mod.rs b/renaser/kernel/src/async_system/mod.rs new file mode 100644 index 0000000..fcf0569 --- /dev/null +++ b/renaser/kernel/src/async_system/mod.rs @@ -0,0 +1,16 @@ +// ============================================================================= +// renaser :: kernel/src/async_system — el reactor cooperativo (Fase 3 / 5) +// ----------------------------------------------------------------------------- +// Aqui renaser rompe con el modelo de hilos pesados de Linux. No hay cambio +// de contexto en la CPU: las interrupciones de hardware no conmutan pilas, +// DESPIERTAN tareas. El kernel avanza cooperativamente, una tarea cede y la +// siguiente toma el relevo. Sobre estos cimientos corre, desde la Fase 5, el +// bytecode WASM aislado por software de la Fase 4: cada aplicacion es una +// tarea mas, y el `reloj` le marca el compas de sus fotogramas. +// ============================================================================= + +pub mod executor; +pub mod reloj; +pub mod task; +pub mod teclado; +pub mod waker; diff --git a/renaser/kernel/src/async_system/reloj.rs b/renaser/kernel/src/async_system/reloj.rs new file mode 100644 index 0000000..00320ab --- /dev/null +++ b/renaser/kernel/src/async_system/reloj.rs @@ -0,0 +1,101 @@ +// ============================================================================= +// renaser :: async_system/reloj.rs — Fase 5 :: el compas de los fotogramas +// ----------------------------------------------------------------------------- +// El temporizador (PIT, IRQ0) ya no solo despierta al ejecutor de su `hlt`: +// ahora marca el COMPAS del userspace. Cada pulso a 100 Hz es un fotograma — +// una oportunidad de cesion cooperativa. `EsperaFrame` convierte ese pulso de +// hardware en un `Future`: una tarea WASM hace su trabajo de un fotograma y +// `.await`-ea el siguiente, cediendo la CPU a sus vecinas mientras tanto. +// ============================================================================= + +use alloc::vec::Vec; +use core::future::Future; +use core::pin::Pin; +use core::sync::atomic::{AtomicU64, Ordering}; +use core::task::{Context, Poll, Waker}; + +use spin::{Mutex, Once}; +use x86_64::instructions::interrupts; + +/// Pulsos del temporizador acumulados desde el arranque. Lo incrementa la IRQ0; +/// lo consulta `EsperaFrame`. Atomico: la IRQ y el hilo principal lo comparten. +static CONTADOR_PULSOS: AtomicU64 = AtomicU64::new(0); + +/// Censo de wakers en espera del proximo fotograma. Vive en el heap —de ahi el +/// `Once`—; tras su `Mutex`, lo disputan el lado tarea y el manejador de IRQ0. +static EN_ESPERA: Once>> = Once::new(); + +/// Funda el censo de wakers del reloj. Requiere el heap ya activo; debe +/// invocarse una sola vez, antes de habilitar las interrupciones. +pub fn init() { + EN_ESPERA.call_once(|| Mutex::new(Vec::new())); +} + +/// Punto de entrada DESDE el manejador de IRQ0. Avanza el contador de pulsos y +/// despierta a cuantas tareas aguardaban el fotograma. Deliberadamente breve y +/// libre de panicos: corre en contexto de interrupcion. +pub fn pulso() { + // `Release`: el avance del contador se publica ANTES de que los wakers + // reinyecten sus tareas; el `poll` que sigue lo leera con `Acquire` y vera, + // garantizado, el valor nuevo. + CONTADOR_PULSOS.fetch_add(1, Ordering::Release); + if let Some(censo) = EN_ESPERA.get() { + // En contexto de IRQ las interrupciones ya estan acalladas; tomar aqui + // el cerrojo no puede interbloquear, pues el lado tarea siempre lo toma + // con las interrupciones desactivadas (ver `inscribir`). + for waker in censo.lock().drain(..) { + waker.wake(); + } + } +} + +/// Numero de pulsos del temporizador desde el arranque. +fn pulsos() -> u64 { + CONTADOR_PULSOS.load(Ordering::Acquire) +} + +/// Inscribe un waker en el censo de espera del proximo fotograma. +fn inscribir(waker: Waker) { + if let Some(censo) = EN_ESPERA.get() { + // El cerrojo lo disputa el manejador de IRQ0: tomarlo con las + // interrupciones acalladas hace IMPOSIBLE el interbloqueo. + interrupts::without_interrupts(|| censo.lock().push(waker)); + } +} + +/// Un `Future` que se resuelve en el proximo pulso del temporizador. Es la +/// unidad de cesion cooperativa del userspace: una tarea WASM hace su trabajo +/// de un fotograma y `.await`-ea un `EsperaFrame` para ceder hasta el siguiente. +pub struct EsperaFrame { + /// Pulso a partir del cual la espera se da por cumplida. + objetivo: u64, +} + +impl EsperaFrame { + /// Crea una espera que se resolvera en el siguiente pulso del temporizador. + pub fn nueva() -> EsperaFrame { + EsperaFrame { + objetivo: pulsos() + 1, + } + } +} + +impl Future for EsperaFrame { + type Output = (); + + fn poll(self: Pin<&mut Self>, contexto: &mut Context<'_>) -> Poll<()> { + // Lectura optimista: si el fotograma ya llego, no hay nada que esperar. + if pulsos() >= self.objetivo { + return Poll::Ready(()); + } + // Aun no: inscribir el waker y RE-VERIFICAR. Si un pulso se colo entre + // la lectura de arriba y la inscripcion, este segundo chequeo lo atrapa; + // sin el, el despertar se perderia hasta el pulso siguiente. + inscribir(contexto.waker().clone()); + if pulsos() >= self.objetivo { + Poll::Ready(()) + } else { + Poll::Pending + } + } +} diff --git a/renaser/kernel/src/async_system/task.rs b/renaser/kernel/src/async_system/task.rs new file mode 100644 index 0000000..5a4b008 --- /dev/null +++ b/renaser/kernel/src/async_system/task.rs @@ -0,0 +1,45 @@ +// ============================================================================= +// renaser :: async_system/task.rs — Fase 3 :: la unidad de trabajo asincrono +// ============================================================================= + +use alloc::boxed::Box; +use core::future::Future; +use core::pin::Pin; +use core::sync::atomic::{AtomicU64, Ordering}; +use core::task::{Context, Poll}; + +/// Identificador unico de una tarea. Autoincremental y atomico: dos tareas +/// jamas comparten identidad. +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct TaskId(u64); + +impl TaskId { + /// Acuña un identificador nuevo, distinto de todos los anteriores. + fn nuevo() -> TaskId { + static SIGUIENTE: AtomicU64 = AtomicU64::new(0); + TaskId(SIGUIENTE.fetch_add(1, Ordering::Relaxed)) + } +} + +/// Una tarea asincrona: un `Future` encapsulado, anclado (`Pin`) en el heap +/// para que su direccion nunca cambie mientras avanza. +pub struct Task { + /// La identidad de la tarea, su nombre ante el ejecutor. + pub id: TaskId, + futuro: Pin + Send + 'static>>, +} + +impl Task { + /// Envuelve un `Future` en una tarea con identidad propia. + pub fn nueva(futuro: impl Future + Send + 'static) -> Task { + Task { + id: TaskId::nuevo(), + futuro: Box::pin(futuro), + } + } + + /// Hace avanzar la tarea un paso. `Poll::Ready` significa que concluyo. + pub fn poll(&mut self, contexto: &mut Context) -> Poll<()> { + self.futuro.as_mut().poll(contexto) + } +} diff --git a/renaser/kernel/src/async_system/teclado.rs b/renaser/kernel/src/async_system/teclado.rs new file mode 100644 index 0000000..707d441 --- /dev/null +++ b/renaser/kernel/src/async_system/teclado.rs @@ -0,0 +1,76 @@ +// ============================================================================= +// renaser :: async_system/teclado.rs — el canal de scancodes del teclado +// ----------------------------------------------------------------------------- +// El manejador de IRQ1 es un mero PRODUCTOR: deposita cada scancode en colas +// lock-free, seguras frente a interrupciones. Los consumidores —las apps WASM, +// via la capacidad `sys_get_scancode`— las drenan sin bloquear. +// +// FASE 5 :: con varias apps concurrentes, una sola cola compartida no sirve: +// la primera en sondear le robaria la pulsacion a las demas. Por eso cada +// aplicacion abre su PROPIO canal y la IRQ1 DIFUNDE cada scancode a todos — +// cada app recibe su copia integra del flujo de entrada. +// ============================================================================= + +use alloc::sync::Arc; +use alloc::vec::Vec; + +use crossbeam_queue::ArrayQueue; +use spin::{Mutex, Once}; +use x86_64::instructions::interrupts; + +/// Capacidad de la cola de scancodes de cada app. Holgada: nadie teclea tanto. +const CAPACIDAD_COLA: usize = 256; + +/// Un canal de teclado: la cola lock-free de scancodes de UNA aplicacion. +pub type CanalTeclado = Arc>; + +/// Censo de canales — uno por aplicacion del userspace. El manejador de IRQ1 +/// difunde cada scancode a TODOS: asi cada app recibe su propia copia del +/// evento, sin que una le arrebate la pulsacion a otra. +static CANALES: Once>> = Once::new(); + +/// Funda el censo de canales del teclado. Requiere el heap ya activo; debe +/// invocarse una sola vez, antes de habilitar las interrupciones. +pub fn init() { + CANALES.call_once(|| Mutex::new(Vec::new())); +} + +/// Crea un canal de teclado nuevo, AUN sin inscribir en la difusion. Cada +/// aplicacion reclama el suyo al empezar a cargarse. +pub fn crear_canal() -> CanalTeclado { + Arc::new(ArrayQueue::new(CAPACIDAD_COLA)) +} + +/// Inscribe un canal en el censo de difusion. Desde este instante, la IRQ1 +/// empuja cada scancode tambien a este canal. Se invoca al final de la carga +/// de una app: una carga fallida no debe dejar canales huerfanos. +pub fn registrar_canal(canal: &CanalTeclado) { + if let Some(censo) = CANALES.get() { + // El cerrojo lo disputa el manejador de IRQ1: tomarlo con las + // interrupciones acalladas hace imposible el interbloqueo. + interrupts::without_interrupts(|| censo.lock().push(canal.clone())); + } +} + +/// Da de baja un canal del censo de difusion. Lo invoca el `Drop` de una +/// aplicacion desalojada: la IRQ1 deja, de inmediato, de empujarle scancodes. +pub fn cerrar_canal(canal: &CanalTeclado) { + if let Some(censo) = CANALES.get() { + interrupts::without_interrupts(|| { + censo.lock().retain(|inscrito| !Arc::ptr_eq(inscrito, canal)); + }); + } +} + +/// Punto de entrada DESDE el manejador de IRQ1. DIFUNDE el scancode a cuantos +/// canales haya abiertos. Deliberadamente breve y libre de panicos: corre en +/// contexto de interrupcion. +pub fn recibir_scancode(scancode: u8) { + if let Some(censo) = CANALES.get() { + for canal in censo.lock().iter() { + // Si un canal desborda, se descarta el scancode en silencio: mas + // vale perder una tecla que colapsar dentro de una interrupcion. + let _ = canal.push(scancode); + } + } +} diff --git a/renaser/kernel/src/async_system/waker.rs b/renaser/kernel/src/async_system/waker.rs new file mode 100644 index 0000000..aab5449 --- /dev/null +++ b/renaser/kernel/src/async_system/waker.rs @@ -0,0 +1,55 @@ +// ============================================================================= +// renaser :: async_system/waker.rs — Fase 3 :: el despertador de tareas +// ----------------------------------------------------------------------------- +// Un `Waker` es la promesa de que una tarea dormida volvera a ejecutarse. El +// nuestro es minimo: al invocarse, reinyecta el `TaskId` de su tarea en la +// cola de listas del ejecutor. Quien lo invoque —incluido un manejador de +// IRQ— vuelve a poner esa tarea en circulacion. +// ============================================================================= + +use alloc::collections::VecDeque; +use alloc::sync::Arc; +use alloc::task::Wake; +use core::task::Waker; + +use spin::Mutex; + +use super::task::TaskId; + +/// La cola de tareas listas para avanzar, compartida entre el ejecutor y todos +/// los wakers que ha repartido. +pub type ColaListas = Arc>>; + +/// El despertador de UNA tarea concreta. +struct WakerTarea { + id: TaskId, + cola: ColaListas, +} + +impl WakerTarea { + /// Reinyecta la tarea en la cola de ejecucion. + fn reinyectar(&self) { + // El spinlock de la cola lo tocan tanto el hilo principal como los + // manejadores de IRQ. Tomarlo con las interrupciones acalladas hace + // IMPOSIBLE el interbloqueo: ninguna IRQ puede interrumpir al hilo + // principal justo mientras este sostiene el cerrojo. + x86_64::instructions::interrupts::without_interrupts(|| { + self.cola.lock().push_back(self.id); + }); + } +} + +impl Wake for WakerTarea { + fn wake(self: Arc) { + self.reinyectar(); + } + + fn wake_by_ref(self: &Arc) { + self.reinyectar(); + } +} + +/// Crea un `Waker` estandar que, al invocarse, reinyecta `id` en `cola`. +pub fn crear(id: TaskId, cola: ColaListas) -> Waker { + Waker::from(Arc::new(WakerTarea { id, cola })) +} diff --git a/renaser/kernel/src/baliza.rs b/renaser/kernel/src/baliza.rs new file mode 100644 index 0000000..01b841e --- /dev/null +++ b/renaser/kernel/src/baliza.rs @@ -0,0 +1,128 @@ +// ============================================================================= +// renaser :: kernel/src/baliza.rs — la red de seguridad visual del sistema +// ----------------------------------------------------------------------------- +// Sin consola de texto que valga cuando el sistema cae: si renaser colapsa, lo +// DIBUJA. La baliza publica —de forma atomica y sin cerrojos— los datos +// minimos del framebuffer, de modo que los manejadores de fallo puedan pintar +// una franja de advertencia incluso cuando el resto del kernel ya no es fiable. +// ============================================================================= + +use core::panic::PanicInfo; +use core::ptr; +use core::sync::atomic::{AtomicPtr, AtomicU32, AtomicUsize, Ordering}; + +use crate::grafico::{escribir_pixel_volatil, Pantalla}; + +/// Datos del framebuffer expuestos a los manejadores de fallo. Todo son +/// atomicos: la baliza es intrinsecamente `Sync`, sin cerrojos. +pub(crate) struct BalizaPanico { + base: AtomicPtr, + paso_bytes: AtomicUsize, + ancho: AtomicUsize, + alto: AtomicUsize, + bytes_por_pixel: AtomicUsize, + /// Rojo de alerta de colapso, ya codificado al formato de la pantalla. + pixel_alerta: AtomicU32, + /// Naranja de agotamiento de memoria, ya codificado. + pixel_oom: AtomicU32, +} + +impl BalizaPanico { + /// Baliza apagada: sin pantalla publicada todavia. + const fn apagada() -> BalizaPanico { + BalizaPanico { + base: AtomicPtr::new(ptr::null_mut()), + paso_bytes: AtomicUsize::new(0), + ancho: AtomicUsize::new(0), + alto: AtomicUsize::new(0), + bytes_por_pixel: AtomicUsize::new(0), + pixel_alerta: AtomicU32::new(0), + pixel_oom: AtomicU32::new(0), + } + } + + /// Enciende la baliza con los datos de una pantalla viva. + pub(crate) fn encender(&self, pantalla: &Pantalla, pixel_alerta: u32, pixel_oom: u32) { + self.paso_bytes.store(pantalla.paso_bytes, Ordering::Relaxed); + self.ancho.store(pantalla.ancho, Ordering::Relaxed); + self.alto.store(pantalla.alto, Ordering::Relaxed); + self.bytes_por_pixel + .store(pantalla.bytes_por_pixel, Ordering::Relaxed); + self.pixel_alerta.store(pixel_alerta, Ordering::Relaxed); + self.pixel_oom.store(pixel_oom, Ordering::Relaxed); + // La base se publica de ultima, con semantica `Release`. + self.base.store(pantalla.base, Ordering::Release); + } + + /// Pinta, directa y volatilmente, una banda horizontal sobre el framebuffer + /// fisico. Es la herramienta de los manejadores de fallo: no confia ni en + /// el lienzo, ni en el heap, ni en estructura dinamica alguna. + fn pintar_banda(&self, y0: usize, altura: usize, pixel: u32) { + let base = self.base.load(Ordering::Acquire); + if base.is_null() { + return; + } + let ancho = self.ancho.load(Ordering::Relaxed); + let alto = self.alto.load(Ordering::Relaxed); + let paso = self.paso_bytes.load(Ordering::Relaxed); + let bpp = self.bytes_por_pixel.load(Ordering::Relaxed); + + let y_fin = (y0 + altura).min(alto); + let mut y = y0.min(alto); + while y < y_fin { + let fila = y * paso; + let mut x = 0; + while x < ancho { + // SEGURIDAD: (x, y) esta acotado por las dimensiones que la + // baliza publico desde una pantalla real. + unsafe { + escribir_pixel_volatil(base.add(fila + x * bpp), pixel, bpp); + } + x += 1; + } + y += 1; + } + } + + /// Altura de la franja de advertencia: ~8 % de la pantalla. + fn franja(&self) -> usize { + let alto = self.alto.load(Ordering::Relaxed); + if alto == 0 { + 0 + } else { + (alto / 12).max(1) + } + } +} + +/// Instancia global de la baliza. Comienza apagada y se enciende en el arranque. +pub(crate) static BALIZA_PANICO: BalizaPanico = BalizaPanico::apagada(); + +// ============================================================================= +// MANEJADORES DE FALLO — cuando el sistema colapsa, lo DIBUJA +// ============================================================================= + +/// Si renaser colapsa, tatuamos una franja ROJA en lo alto del framebuffer. +#[panic_handler] +fn al_colapsar(_info: &PanicInfo) -> ! { + x86_64::instructions::interrupts::disable(); + BALIZA_PANICO.pintar_banda( + 0, + BALIZA_PANICO.franja(), + BALIZA_PANICO.pixel_alerta.load(Ordering::Relaxed), + ); + crate::detener() +} + +/// Si el heap se agota, tatuamos una franja NARANJA: un fallo distinto al +/// colapso, y distinguible de un vistazo. +#[alloc_error_handler] +fn al_agotar_memoria(_disposicion: core::alloc::Layout) -> ! { + x86_64::instructions::interrupts::disable(); + BALIZA_PANICO.pintar_banda( + 0, + BALIZA_PANICO.franja(), + BALIZA_PANICO.pixel_oom.load(Ordering::Relaxed), + ); + crate::detener() +} diff --git a/renaser/kernel/src/consola.rs b/renaser/kernel/src/consola.rs new file mode 100644 index 0000000..68796a6 --- /dev/null +++ b/renaser/kernel/src/consola.rs @@ -0,0 +1,186 @@ +// ============================================================================= +// renaser :: kernel/src/consola.rs — la superficie de texto e imagen +// ----------------------------------------------------------------------------- +// La consola une el lienzo intermedio, la pantalla fisica y una pluma de +// escritura. Rasteriza cada glifo con `fontdue` al vuelo —el texto convertido, +// por fin, en dibujo— y tambien sabe volcar fotogramas crudos del userspace +// WASM. Es global y serializada tras un `Mutex`: las tareas escriben en ella. +// ============================================================================= + +use spin::{Mutex, Once}; + +use crate::grafico::{codificar, Color, Lienzo, Pantalla, RegionPantalla}; +use crate::texto; + +/// Margen del texto respecto al borde del lienzo, en pixeles. +const MARGEN: usize = 40; +/// Tamaño de la tipografia, en pixeles. +const TAM_FUENTE: f32 = 30.0; +/// Altura de avance de una linea de texto, en pixeles. +const ALTO_LINEA: usize = 40; +/// Posicion vertical de la primera linea base. +const BASE_INICIAL: usize = MARGEN + 30; + +/// Interpola dos colores segun una cobertura: `0` => `fondo`, `255` => `tinta`. +fn mezclar(fondo: Color, tinta: Color, cobertura: u8) -> Color { + let canal = |a: u8, b: u8| -> u8 { + let c = cobertura as u16; + ((a as u16 * (255 - c) + b as u16 * c) / 255) as u8 + }; + Color { + r: canal(fondo.r, tinta.r), + g: canal(fondo.g, tinta.g), + b: canal(fondo.b, tinta.b), + } +} + +/// La consola grafica de renaser: doble bufer, pantalla fisica y pluma. +pub(crate) struct Consola { + lienzo: Lienzo, + pantalla: Pantalla, + /// Posicion horizontal de la pluma de escritura. + pluma_x: usize, + /// Linea base vertical de la pluma de escritura. + base_y: usize, +} + +// SEGURIDAD: `Consola` encierra, via `Pantalla`, un puntero crudo al +// framebuffer. Ese puntero es valido durante toda la vida del kernel y todo +// acceso a la consola se serializa tras un `Mutex`. En un sistema de un solo +// nucleo, esto la hace segura de compartir entre el hilo principal y las tareas. +unsafe impl Send for Consola {} + +impl Consola { + /// Crea una consola con la pluma en la esquina superior izquierda. + pub(crate) fn nueva(lienzo: Lienzo, pantalla: Pantalla) -> Consola { + Consola { + lienzo, + pantalla, + pluma_x: MARGEN, + base_y: BASE_INICIAL, + } + } + + /// Lleva la pluma al inicio de la siguiente linea. Al llegar al fondo, + /// limpia el lienzo: una pizarra nueva. + fn nueva_linea(&mut self) { + self.pluma_x = MARGEN; + self.base_y += ALTO_LINEA; + if self.base_y + ALTO_LINEA >= self.lienzo.alto { + self.lienzo.limpiar(Color::LIENZO_EN_REPOSO); + self.base_y = BASE_INICIAL; + } + } + + /// Escribe un caracter: rasteriza su glifo y avanza la pluma. + fn escribir_char(&mut self, caracter: char) { + if caracter == '\n' { + self.nueva_linea(); + return; + } + let (metricas, cobertura) = texto::rasterizar(caracter, TAM_FUENTE); + // Salto de linea automatico al alcanzar el margen derecho. + if self.pluma_x + metricas.advance_width as usize + MARGEN > self.lienzo.ancho { + self.nueva_linea(); + } + self.dibujar_glifo(&metricas, &cobertura); + self.pluma_x += metricas.advance_width as usize; + } + + /// Escribe una cadena completa, caracter a caracter. + pub(crate) fn escribir(&mut self, texto: &str) { + for caracter in texto.chars() { + self.escribir_char(caracter); + } + } + + /// Funde un mapa de cobertura de `fontdue` sobre el lienzo, en la pluma. + fn dibujar_glifo(&mut self, metricas: &fontdue::Metrics, cobertura: &[u8]) { + // Origen del glifo: la pluma desplazada por las metricas. El mapa de + // `fontdue` se recorre de arriba a abajo desde la cima del glifo. + let inicio_x = self.pluma_x as isize + metricas.xmin as isize; + let inicio_y = self.base_y as isize - metricas.ymin as isize - metricas.height as isize; + + for fila in 0..metricas.height { + for col in 0..metricas.width { + let opacidad = cobertura[fila * metricas.width + col]; + if opacidad == 0 { + continue; // pixel transparente: no toca el fondo + } + let x = inicio_x + col as isize; + let y = inicio_y + fila as isize; + if x < 0 || y < 0 { + continue; + } + let color = mezclar(Color::LIENZO_EN_REPOSO, Color::TEXTO, opacidad); + self.lienzo.pintar_pixel(x as usize, y as usize, color); + } + } + } + + /// Compone un fotograma crudo del userspace WASM —pixeles `0x00RRGGBB`, con + /// sus limites ya verificados por el host— sobre la SUB-REGION asignada a su + /// aplicacion. Cada pixel se recodifica al formato nativo del framebuffer y + /// se deposita desplazado por `(region.x, region.y)`: una app jamas escribe + /// fuera de su ventana, y varias cohabitan el lienzo sin pisarse. + fn volcar_marco(&mut self, region: RegionPantalla, datos: &[u8]) { + for (indice, trozo) in datos.chunks_exact(4).enumerate() { + let columna = indice % region.ancho; + let fila = indice / region.ancho; + if fila >= region.alto { + break; // el fotograma excede el alto de la region: se ignora el resto + } + let x = region.x + columna; + let y = region.y + fila; + if x >= self.lienzo.ancho || y >= self.lienzo.alto { + continue; // recorte firme: nada se pinta fuera del lienzo + } + let p = u32::from_le_bytes([trozo[0], trozo[1], trozo[2], trozo[3]]); + let color = Color { + r: (p >> 16) as u8, + g: (p >> 8) as u8, + b: p as u8, + }; + self.lienzo.pixeles[y * self.lienzo.ancho + x] = + codificar(self.lienzo.formato, color); + } + self.presentar(); + } + + /// Inunda una region entera con un color plano y la presenta. Es la baliza + /// de desalojo: cuando una aplicacion falla, su ventana se tatua de purpura. + fn pintar_region(&mut self, region: RegionPantalla, color: Color) { + self.lienzo + .rellenar_rect(region.x, region.y, region.ancho, region.alto, color); + self.presentar(); + } + + /// Vuelca el lienzo sobre la pantalla fisica. + pub(crate) fn presentar(&mut self) { + self.pantalla.presentar(&self.lienzo); + } +} + +/// La consola global de renaser. Se funde en el arranque; despues, las tareas +/// asincronas y las capacidades del userspace escriben en ella tras su `Mutex`. +pub(crate) static CONSOLA: Once> = Once::new(); + +/// Puerta del kernel para la capacidad `sys_render_frame` del userspace WASM: +/// compone sobre la consola global un fotograma —cuyos limites el host ya +/// verifico matematicamente contra la memoria lineal del modulo— dentro de la +/// region de pantalla que el kernel asigno a esa aplicacion. +pub(crate) fn volcar_marco_wasm(region: RegionPantalla, datos: &[u8]) { + if let Some(consola) = CONSOLA.get() { + consola.lock().volcar_marco(region, datos); + } +} + +/// Tatua la baliza de desalojo sobre la region de una aplicacion que el kernel +/// ha dado por terminada. El color delata la causa —purpura para una falla de +/// ejecucion o de combustible, amarillo palido para un desbordo de memoria—. Es +/// una advertencia NO fatal: la app muere, el kernel y sus vecinas siguen vivos. +pub(crate) fn pintar_desalojo(region: RegionPantalla, color: Color) { + if let Some(consola) = CONSOLA.get() { + consola.lock().pintar_region(region, color); + } +} diff --git a/renaser/kernel/src/drivers/disco.rs b/renaser/kernel/src/drivers/disco.rs new file mode 100644 index 0000000..e18f07a --- /dev/null +++ b/renaser/kernel/src/drivers/disco.rs @@ -0,0 +1,562 @@ +// ============================================================================= +// renaser :: kernel/src/drivers/disco.rs — Fase 6.2 :: el disco asincrono +// ----------------------------------------------------------------------------- +// La Fase 6.1 hizo hablar al disco; pero lo hacia por SONDEO: el procesador se +// quedaba en un bucle de espera activa vigilando el «used ring» de virtio, +// incapaz de atender nada mas. La Fase 6.2 lo libera. La E/S de bloques pasa a +// ser REACTIVA, guiada por la interrupcion fisica del dispositivo: +// +// * `EsperaDisco` — un `Future` nativo: enviada la peticion, cede la CPU; la +// IRQ del disco lo despertara cuando el bloque este listo. +// * `atender_irq` — el punto al que salta el manejador de la IRQ del disco: +// reconoce la interrupcion en el dispositivo y despierta a quien aguardaba. +// * `bloquear_en` — el puente para los contextos SINCRONOS (el arranque, las +// capacidades WASM): lleva un `Future` de disco hasta su final durmiendo la +// CPU con `hlt` —jamas en espera activa una vez el sistema esta en marcha—. +// +// Subsisten de la Fase 6.1 el asignador de marcos por mapa de bits (con +// liberacion real) y `KernelHal`, el puente DMA hacia `virtio-drivers`. +// ============================================================================= + +use alloc::boxed::Box; +use alloc::vec; +use alloc::vec::Vec; +use core::future::Future; +use core::pin::Pin; +use core::ptr::NonNull; +use core::sync::atomic::{AtomicU64, AtomicU8, Ordering}; +use core::task::{Context, Poll, Waker}; + +use spin::{Mutex, Once}; +use virtio_drivers::device::blk::{BlkReq, BlkResp, VirtIOBlk, SECTOR_SIZE}; +use virtio_drivers::transport::pci::bus::{Command, DeviceFunction, PciRoot}; +use virtio_drivers::transport::pci::PciTransport; +use virtio_drivers::{BufferDirection, Hal, PhysAddr}; +use x86_64::instructions::interrupts; + +use super::pci::CamPuertos; + +/// Tamaño de una pagina / marco fisico, en bytes. +const PAGINA: u64 = 4096; + +/// Techo de marcos que gestiona el asignador de DMA: 4096 marcos => una arena +/// de 16 MiB. El DMA del disco —colas virtio y buferes rebote— necesita una +/// fraccion minima de eso; el techo solo acota el tamaño del mapa de bits. +const MAX_MARCOS: usize = 4096; + +/// Vendor ID de VirtIO; Device IDs de un disco de bloques (transicional/moderno). +const VENDOR_VIRTIO: u16 = 0x1AF4; +const VIRTIO_BLK_IDS: [u16; 2] = [0x1001, 0x1042]; + +/// El tamaño de un sector, reexportado para el resto del kernel. +pub const TAM_SECTOR: usize = SECTOR_SIZE; + +// ============================================================================= +// EL OFFSET DE MEMORIA FISICA Y EL ASIGNADOR DE MARCOS +// ============================================================================= + +/// Desplazamiento al que el cargador mapeo toda la memoria fisica: una +/// direccion fisica `p` es accesible por el kernel en la virtual `p + offset`. +static OFFSET_FISICO: AtomicU64 = AtomicU64::new(0); + +/// Asignador de marcos por MAPA DE BITS: gestiona una arena de RAM fisica +/// contigua y LIBERA. Cada bit representa un marco de 4 KiB; `1` es ocupado, +/// `0` libre. Un almacen de objetos vivo asigna y devuelve marcos sin descanso. +struct AsignadorMarcos { + /// Direccion fisica del primer marco gestionado, alineada a pagina. + base: u64, + /// Numero de marcos que abarca la arena. + total: usize, + /// Mapa de ocupacion: un bit por marco. + mapa: Vec, +} + +impl AsignadorMarcos { + /// ¿Esta libre el marco `i`? + fn libre(&self, i: usize) -> bool { + (self.mapa[i / 64] >> (i % 64)) & 1 == 0 + } + + /// Marca el marco `i` como ocupado. + fn ocupar(&mut self, i: usize) { + self.mapa[i / 64] |= 1 << (i % 64); + } + + /// Marca el marco `i` como libre. + fn soltar(&mut self, i: usize) { + self.mapa[i / 64] &= !(1u64 << (i % 64)); + } + + /// Reserva `paginas` marcos CONTIGUOS y devuelve la direccion fisica del + /// primero. `None` si no hay un hueco contiguo bastante grande. + fn asignar(&mut self, paginas: usize) -> Option { + if paginas == 0 || paginas > self.total { + return None; + } + let mut i = 0; + while i + paginas <= self.total { + // Buscar `paginas` marcos libres consecutivos a partir de `i`. + match (i..i + paginas).find(|&k| !self.libre(k)) { + // Un marco ocupado rompe la racha: reanudar tras el. + Some(ocupado) => i = ocupado + 1, + // Racha completa: ocuparla y entregar su direccion fisica. + None => { + for k in i..i + paginas { + self.ocupar(k); + } + return Some(self.base + (i as u64) * PAGINA); + } + } + } + None + } + + /// Devuelve a la arena `paginas` marcos que arrancan en la direccion + /// fisica `fisica`. Direcciones ajenas a la arena se ignoran sin daño. + fn liberar(&mut self, fisica: u64, paginas: usize) { + if fisica < self.base { + return; + } + let inicio = ((fisica - self.base) / PAGINA) as usize; + for k in inicio..(inicio + paginas).min(self.total) { + self.soltar(k); + } + } +} + +/// El asignador global de marcos para DMA. Se funde en `init`. +static ASIGNADOR: Once> = Once::new(); + +/// Funda el subsistema de disco: registra el offset de memoria fisica y forja +/// el asignador de marcos sobre la region de RAM libre que el cargador reporto. +/// Una sola vez, antes de montar el disco. +pub fn init(offset_fisico: u64, region_inicio: u64, region_fin: u64) { + OFFSET_FISICO.store(offset_fisico, Ordering::Relaxed); + let base = alinear_arriba(region_inicio, PAGINA); + let disponibles = region_fin.saturating_sub(base) / PAGINA; + let total = (disponibles as usize).min(MAX_MARCOS); + ASIGNADOR.call_once(|| { + Mutex::new(AsignadorMarcos { + base, + total, + mapa: vec![0u64; total.div_ceil(64)], + }) + }); +} + +/// Redondea `valor` hacia arriba al multiplo de `alineacion` (potencia de dos). +fn alinear_arriba(valor: u64, alineacion: u64) -> u64 { + (valor + alineacion - 1) & !(alineacion - 1) +} + +/// Reserva `paginas` marcos fisicos contiguos de 4 KiB y devuelve su direccion +/// fisica. Agotar la arena es un fallo del kernel, no recuperable aqui: el +/// rasgo `Hal` no admite que `dma_alloc` falle. +fn asignar_marcos(paginas: usize) -> u64 { + ASIGNADOR + .get() + .expect("DMA :: el asignador de marcos no esta fundado") + .lock() + .asignar(paginas) + .expect("DMA :: la arena de marcos fisicos se agoto") +} + +/// Devuelve `paginas` marcos fisicos a la arena. El reverso de `asignar_marcos`. +fn liberar_marcos(fisica: u64, paginas: usize) { + if let Some(asignador) = ASIGNADOR.get() { + asignador.lock().liberar(fisica, paginas); + } +} + +/// Traduce una direccion fisica a la virtual que el kernel puede desreferenciar. +fn a_virtual(fisica: u64) -> *mut u8 { + (fisica + OFFSET_FISICO.load(Ordering::Relaxed)) as *mut u8 +} + +// ============================================================================= +// KernelHal — EL PUENTE ENTRE `virtio-drivers` Y LA MEMORIA DE renaser +// ============================================================================= + +/// La implementacion del rasgo `Hal` de `virtio-drivers`. Sin estado propio: +/// se apoya en el asignador de marcos y el offset fisico, ambos globales. +pub struct KernelHal; + +// SEGURIDAD: cada metodo respeta su contrato — `dma_alloc` entrega marcos +// fisicos exclusivos, contiguos, alineados a pagina y a cero; `dma_dealloc` y +// `unshare` los devuelven a la arena; las traducciones de direccion son validas +// porque el cargador mapeo toda la memoria fisica. +unsafe impl Hal for KernelHal { + fn dma_alloc(paginas: usize, _direccion: BufferDirection) -> (PhysAddr, NonNull) { + let fisica = asignar_marcos(paginas); + let virtual_ = a_virtual(fisica); + // SEGURIDAD: `asignar_marcos` entrego `paginas` marcos exclusivos y + // contiguos; `virtual_` es su imagen valida y escribible en el mapeo + // de memoria fisica. El rasgo exige que las paginas vayan a cero. + unsafe { + core::ptr::write_bytes(virtual_, 0, paginas * PAGINA as usize); + } + (fisica, NonNull::new(virtual_).expect("DMA :: marco fisico nulo")) + } + + unsafe fn dma_dealloc(fisica: PhysAddr, _virtual_: NonNull, paginas: usize) -> i32 { + // Con un asignador real, la liberacion ya NO es un gesto vacio: los + // marcos vuelven a la arena y quedan disponibles para el proximo DMA. + liberar_marcos(fisica, paginas); + 0 + } + + unsafe fn mmio_phys_to_virt(fisica: PhysAddr, _tam: usize) -> NonNull { + // El cargador mapeo, como minimo, los primeros 4 GiB de memoria fisica; + // todo BAR MMIO de PCI cae dentro y es accesible en `fisica + offset`. + NonNull::new(a_virtual(fisica)).expect("MMIO :: direccion fisica nula") + } + + unsafe fn share(bufer: NonNull<[u8]>, direccion: BufferDirection) -> PhysAddr { + let longitud = bufer.len(); + let paginas = longitud.div_ceil(PAGINA as usize); + let fisica = asignar_marcos(paginas); + // Si el bufer viaja HACIA el dispositivo, copiarlo al area DMA rebote. + if !matches!(direccion, BufferDirection::DeviceToDriver) { + // SEGURIDAD: el rasgo garantiza que `bufer` apunta a `longitud` + // bytes validos; el area DMA recien reservada los abarca de sobra. + unsafe { + core::ptr::copy_nonoverlapping( + bufer.as_ptr() as *const u8, + a_virtual(fisica), + longitud, + ); + } + } + fisica + } + + unsafe fn unshare(fisica: PhysAddr, bufer: NonNull<[u8]>, direccion: BufferDirection) { + let longitud = bufer.len(); + // Si el bufer viene DESDE el dispositivo, copiar el area DMA de vuelta. + if !matches!(direccion, BufferDirection::DriverToDevice) { + // SEGURIDAD: `fisica` lo entrego `share` para este mismo `bufer`; + // ambas regiones abarcan los `longitud` bytes que se copian. + unsafe { + core::ptr::copy_nonoverlapping( + a_virtual(fisica), + bufer.as_ptr() as *mut u8, + longitud, + ); + } + } + // Devolver a la arena los marcos del area rebote. + liberar_marcos(fisica, longitud.div_ceil(PAGINA as usize)); + } +} + +// ============================================================================= +// EL DISCO PERSISTENTE +// ============================================================================= + +/// El disco virtio-blk, ya montado. Envuelve al `VirtIOBlk` para poder ligarlo +/// a un `static`. +struct Disco(VirtIOBlk); + +// SEGURIDAD: `Disco` encierra punteros crudos a las colas virtio y al MMIO del +// dispositivo. renaser es un kernel de un solo nucleo y todo acceso al disco se +// serializa tras el `Mutex` global `DISCO`; jamas se comparte entre hilos +// reales. Todo acceso normal toma el cerrojo con las interrupciones acalladas, +// de modo que la IRQ del disco jamas lo encuentra ocupado. +unsafe impl Send for Disco {} + +/// El disco global de renaser. Se monta una sola vez, en `montar`. +static DISCO: Once> = Once::new(); + +/// La linea de IRQ del disco, descubierta al montarlo. Vale 0 si el firmware no +/// enruto una linea util: en ese caso la E/S recae en el sondeo, con la red de +/// seguridad del temporizador. +static IRQ_DISCO: AtomicU8 = AtomicU8::new(0); + +/// Cuenta de interrupciones del disco atendidas desde el arranque. Es el +/// testigo vivo de que la E/S asincrona late de verdad. +static PULSOS_DISCO: AtomicU64 = AtomicU64::new(0); + +/// El waker de la (unica) espera de disco en curso. Las operaciones de disco se +/// serializan, de modo que una sola ranura basta. La IRQ del disco lo invoca. +static WAKER_DISCO: Mutex> = Mutex::new(None); + +/// Enumera el bus PCI, localiza el disco virtio-blk, lo monta y lo deja tras el +/// `Mutex` global. Descubre ademas su linea de IRQ, registra el manejador y +/// abre la linea en el PIC: desde aqui el disco puede interrumpir. Devuelve la +/// capacidad del disco en sectores. Toda falla se devuelve como `Err`. +pub fn montar() -> Result { + let mut raiz = PciRoot::new(CamPuertos); + + // 1. Localizar el primer disco virtio-blk recorriendo el bus. + let mut hallado: Option = None; + 'busqueda: for bus in 0..=255u8 { + for (device_function, info) in raiz.enumerate_bus(bus) { + if info.vendor_id == VENDOR_VIRTIO && VIRTIO_BLK_IDS.contains(&info.device_id) { + hallado = Some(device_function); + break 'busqueda; + } + } + } + let device_function = hallado.ok_or("virtio-blk no hallado en el bus PCI")?; + + // 2. Habilitar E/S, espacio de memoria y BUS-MASTER. Sin bus-master el + // dispositivo no puede iniciar transferencias DMA por su cuenta. + raiz.set_command( + device_function, + Command::IO_SPACE | Command::MEMORY_SPACE | Command::BUS_MASTER, + ); + + // 3. Montar el transporte PCI moderno de virtio y el dispositivo de bloques. + let transporte = PciTransport::new::(&mut raiz, device_function) + .map_err(|_| "no se pudo montar el transporte PCI de virtio")?; + let mut disco = VirtIOBlk::::new(transporte) + .map_err(|_| "no se pudo inicializar el dispositivo virtio-blk")?; + let capacidad = disco.capacity(); + + // 4. Pedir al dispositivo que EMITA una interrupcion al completar cada + // peticion — el corazon de la E/S asincrona de esta fase. + disco.enable_interrupts(); + DISCO.call_once(|| Mutex::new(Disco(disco))); + + // 5. Descubrir la linea de IRQ que el firmware asigno al dispositivo y + // enrutarla: registrar el manejador en la IDT y abrir la linea en el + // PIC. Las IRQ 0 y 1 son del temporizador y el teclado; un valor fuera + // de 2..15 (p. ej. 0xFF, «sin conexion») significa que no hay linea + // util — la E/S seguira funcionando, pero por sondeo. + let irq = super::pci::linea_irq(device_function); + if (2..=15).contains(&irq) { + crate::interrupts::registrar_irq_disco(irq); + crate::pic::desenmascarar(irq); + IRQ_DISCO.store(irq, Ordering::SeqCst); + } + + Ok(capacidad) +} + +/// La linea de IRQ del disco, si el firmware enruto una util. +pub fn irq() -> Option { + match IRQ_DISCO.load(Ordering::SeqCst) { + 0 => None, + n => Some(n), + } +} + +/// Numero de interrupciones del disco atendidas desde el arranque. +pub fn pulsos_disco() -> u64 { + PULSOS_DISCO.load(Ordering::Relaxed) +} + +/// Punto de entrada DESDE el manejador de la IRQ del disco. Reconoce la +/// interrupcion en el dispositivo —leer su registro ISR baja la linea INTx— y +/// despierta a la tarea que aguardaba el bloque. Breve y libre de panicos: +/// corre en contexto de interrupcion. +pub fn atender_irq() { + // Estamos en contexto de interrupcion (IF=0). Todo acceso normal a `DISCO` + // toma su cerrojo con las interrupciones acalladas, de modo que aqui jamas + // esta ocupado: tomarlo no puede interbloquear. + if let Some(disco) = DISCO.get() { + let _ = disco.lock().0.ack_interrupt(); + } + PULSOS_DISCO.fetch_add(1, Ordering::Relaxed); + if let Some(waker) = WAKER_DISCO.lock().take() { + waker.wake(); + } +} + +/// Inscribe el waker de la espera de disco en curso. Una sola ranura: las +/// operaciones de disco estan serializadas. El cerrojo lo disputa el manejador +/// de IRQ — tomarlo con las interrupciones acalladas hace imposible el bloqueo. +fn registrar_waker(waker: Waker) { + interrupts::without_interrupts(|| *WAKER_DISCO.lock() = Some(waker)); +} + +// ============================================================================= +// EsperaDisco — UNA OPERACION DE BLOQUE COMO `Future` +// ============================================================================= + +/// Una transferencia de bloques en vuelo, expresada como `Future`. Posee sus +/// propios buferes DMA —el encabezado de peticion, la respuesta y los datos—, +/// que `virtio-drivers` mantiene prestados hasta que la operacion concluye. +/// +/// Su `poll` envia la peticion la primera vez y, despues, comprueba el «used +/// ring»: si el dispositivo aun no ha terminado, inscribe el waker y cede; la +/// IRQ del disco lo reanudara. Una operacion a la vez — basta para renaser. +pub struct EsperaDisco { + /// Encabezado de la peticion virtio. En el heap: direccion estable mientras + /// el dispositivo lo tiene prestado, sin importar si el `Future` se mueve. + req: Box, + /// Respuesta de estado del dispositivo. En el heap, por la misma razon. + resp: Box, + /// Los datos: destino de una lectura, origen de una escritura. + buf: Vec, + /// Primer sector de la transferencia. + sector: u64, + /// `true` si la operacion escribe; `false` si lee. + es_escritura: bool, + /// Token que `virtio-drivers` devolvio al enviar la peticion. `None` hasta + /// que el primer `poll` la envia. + token: Option, +} + +impl EsperaDisco { + /// Hace avanzar la operacion: la envia si aun no lo estaba y comprueba si el + /// dispositivo la completo. `None` => sigue en vuelo; `Some` => terminada. + fn avanzar(&mut self) -> Option, &'static str>> { + // Todo el dialogo con el dispositivo, con las interrupciones acalladas: + // asi la IRQ del disco jamas encuentra ocupado el cerrojo de `DISCO`. + interrupts::without_interrupts(|| { + let disco = match DISCO.get() { + Some(disco) => disco, + None => return Some(Err("disco no montado")), + }; + let mut guardia = disco.lock(); + let blk = &mut guardia.0; + + // 1. Enviar la peticion la primera vez que se sondea esta espera. + if self.token.is_none() { + // SEGURIDAD: `req`, `buf` y `resp` viven en esta `EsperaDisco`, + // que no se libera ni se accede por otra via hasta que el + // `complete_*` de mas abajo cierre la operacion. + let envio = unsafe { + if self.es_escritura { + blk.write_blocks_nb( + self.sector as usize, + &mut self.req, + self.buf.as_slice(), + &mut self.resp, + ) + } else { + blk.read_blocks_nb( + self.sector as usize, + &mut self.req, + self.buf.as_mut_slice(), + &mut self.resp, + ) + } + }; + match envio { + Ok(token) => self.token = Some(token), + Err(_) => return Some(Err("no se pudo enviar la peticion al disco")), + } + } + let token = self.token.unwrap(); + + // 2. ¿Ha colocado el dispositivo este token en el «used ring»? + if blk.peek_used() != Some(token) { + return None; // aun en vuelo + } + + // 3. Completado: recoger el resultado y desligar los buferes DMA. + // SEGURIDAD: se pasan los MISMOS buferes que recibio el `*_nb`. + let fin = unsafe { + if self.es_escritura { + blk.complete_write_blocks(token, &self.req, self.buf.as_slice(), &mut self.resp) + } else { + blk.complete_read_blocks( + token, + &self.req, + self.buf.as_mut_slice(), + &mut self.resp, + ) + } + }; + Some(match fin { + Ok(()) => Ok(core::mem::take(&mut self.buf)), + Err(_) => Err("la operacion de disco no se completo"), + }) + }) + } +} + +impl Future for EsperaDisco { + /// Al terminar, una lectura entrega sus datos; una escritura, un vector + /// vacio. El error es siempre un mensaje estable. + type Output = Result, &'static str>; + + fn poll(self: Pin<&mut Self>, contexto: &mut Context<'_>) -> Poll { + // `EsperaDisco` es `Unpin` —solo `Box`, `Vec` y escalares—: el `Pin` + // no impone nada y el acceso mutable es directo. + let this = self.get_mut(); + // Inscribir el waker ANTES de comprobar: si la IRQ se cuela entre la + // comprobacion y la inscripcion, el waker ya esta puesto y el despertar + // no se pierde — el mismo blindaje que usa `EsperaFrame` (ver `reloj`). + registrar_waker(contexto.waker().clone()); + match this.avanzar() { + Some(resultado) => Poll::Ready(resultado), + None => Poll::Pending, + } + } +} + +/// Prepara la LECTURA asincrona de `n_sectores` sectores desde `sector`. El +/// `Future` que devuelve no toca el disco hasta que se le sondea. +pub fn leer_bloques(sector: u64, n_sectores: usize) -> EsperaDisco { + EsperaDisco { + req: Box::new(BlkReq::default()), + resp: Box::new(BlkResp::default()), + buf: vec![0u8; n_sectores * TAM_SECTOR], + sector, + es_escritura: false, + token: None, + } +} + +/// Prepara la ESCRITURA asincrona de `datos` a partir de `sector`. La longitud +/// de `datos` debe ser multiplo de un sector. +pub fn escribir_bloques(sector: u64, datos: Vec) -> EsperaDisco { + EsperaDisco { + req: Box::new(BlkReq::default()), + resp: Box::new(BlkResp::default()), + buf: datos, + sector, + es_escritura: true, + token: None, + } +} + +// ============================================================================= +// bloquear_en — EL PUENTE PARA LOS CONTEXTOS SINCRONOS +// ============================================================================= + +/// Lleva un `Future` de disco hasta su final desde un contexto SINCRONO — el +/// arranque, o una capacidad WASM, que no pueden `.await`-ear—. Mientras el +/// disco trabaja: +/// +/// * si las interrupciones estan activas, duerme la CPU con `hlt`; la +/// despertara la IRQ del disco —o el temporizador, como red de seguridad—; +/// * si no —en el arranque, antes de habilitarlas—, sondea en bucle. +/// +/// Asi, una vez el sistema esta en marcha, la espera de disco JAMAS malgasta +/// ciclos en espera activa. +fn bloquear_en(futuro: F) -> F::Output { + let mut futuro = core::pin::pin!(futuro); + let waker = Waker::noop(); + let mut contexto = Context::from_waker(waker); + loop { + match futuro.as_mut().poll(&mut contexto) { + Poll::Ready(salida) => return salida, + Poll::Pending => { + if interrupts::are_enabled() { + x86_64::instructions::hlt(); + } else { + core::hint::spin_loop(); + } + } + } + } +} + +/// Lee `buf.len() / 512` sectores consecutivos a partir de `sector`. Sincrono: +/// construido sobre la maquinaria asincrona via `bloquear_en`. El bufer debe +/// medir un multiplo entero de un sector. +pub fn leer_sectores(sector: u64, buf: &mut [u8]) -> Result<(), &'static str> { + let datos = bloquear_en(leer_bloques(sector, buf.len() / TAM_SECTOR))?; + buf.copy_from_slice(&datos); + Ok(()) +} + +/// Escribe `buf.len() / 512` sectores consecutivos a partir de `sector`. +/// Sincrono, sobre la misma maquinaria asincrona. +pub fn escribir_sectores(sector: u64, buf: &[u8]) -> Result<(), &'static str> { + bloquear_en(escribir_bloques(sector, buf.to_vec())).map(|_| ()) +} diff --git a/renaser/kernel/src/drivers/mod.rs b/renaser/kernel/src/drivers/mod.rs new file mode 100644 index 0000000..91318fd --- /dev/null +++ b/renaser/kernel/src/drivers/mod.rs @@ -0,0 +1,15 @@ +// ============================================================================= +// renaser :: kernel/src/drivers — Fase 6.1 :: el puente hacia el hardware real +// ----------------------------------------------------------------------------- +// Hasta aqui renaser solo tocaba el silicio que el firmware le servia en +// bandeja: el framebuffer GOP, el temporizador, el teclado. Los `drivers` +// abren la primera via hacia hardware que el kernel debe DESCUBRIR y reclamar +// por si mismo: +// +// * `pci` — acceso al espacio de configuracion del bus PCI (0xCF8/0xCFC). +// * `disco` — el disco virtio-blk: asignador de marcos DMA, `Hal` y la +// lectura, por sondeo, de su primer sector. +// ============================================================================= + +pub mod disco; +pub mod pci; diff --git a/renaser/kernel/src/drivers/pci.rs b/renaser/kernel/src/drivers/pci.rs new file mode 100644 index 0000000..b1fd3f5 --- /dev/null +++ b/renaser/kernel/src/drivers/pci.rs @@ -0,0 +1,76 @@ +// ============================================================================= +// renaser :: kernel/src/drivers/pci.rs — Fase 6.1 :: el acceso al bus PCI +// ----------------------------------------------------------------------------- +// El cargador `bootloader` entrega el mapa de memoria y el framebuffer, pero +// NO un censo de perifericos: descubrir el disco es tarea del kernel. Aqui +// renaser habla con el espacio de configuracion del bus PCI a traves del +// mecanismo #1 —los puertos 0xCF8 (direccion) y 0xCFC (datos)—. +// +// Este modulo provee `CamPuertos`, una implementacion del rasgo +// `ConfigurationAccess` de `virtio-drivers`: la crate enumera el bus y mapea +// los BARs del dispositivo apoyandose en estas dos funciones de acceso. +// ============================================================================= + +use virtio_drivers::transport::pci::bus::{ConfigurationAccess, DeviceFunction}; +use x86_64::instructions::port::Port; + +/// Puerto de DIRECCION del mecanismo de configuracion PCI #1. +const CONFIG_ADDRESS: u16 = 0xCF8; +/// Puerto de DATOS del mecanismo de configuracion PCI #1. +const CONFIG_DATA: u16 = 0xCFC; + +/// Compone la palabra de direccion del mecanismo #1: bit 31 de habilitacion, +/// bus, dispositivo, funcion y offset de registro alineado a dword. +fn direccion(device_function: DeviceFunction, offset: u8) -> u32 { + 0x8000_0000 + | ((device_function.bus as u32) << 16) + | ((device_function.device as u32) << 11) + | ((device_function.function as u32) << 8) + | ((offset as u32) & 0xFC) +} + +/// Lee un registro de 32 bits del espacio de configuracion PCI. +fn leer(device_function: DeviceFunction, offset: u8) -> u32 { + // SEGURIDAD: 0xCF8/0xCFC son los puertos del mecanismo de configuracion + // PCI #1, fijos en la arquitectura PC. La direccion lleva su bit de + // habilitacion y el offset alineado a dword, como exige el protocolo. + unsafe { + Port::::new(CONFIG_ADDRESS).write(direccion(device_function, offset)); + Port::::new(CONFIG_DATA).read() + } +} + +/// Escribe un registro de 32 bits en el espacio de configuracion PCI. +fn escribir(device_function: DeviceFunction, offset: u8, dato: u32) { + // SEGURIDAD: vease `leer` — mismos puertos, mismo protocolo del 8259/PCI. + unsafe { + Port::::new(CONFIG_ADDRESS).write(direccion(device_function, offset)); + Port::::new(CONFIG_DATA).write(dato); + } +} + +/// Lee el registro «Interrupt Line» (byte bajo del offset 0x3C): la linea de +/// IRQ del PIC que el firmware UEFI enruto y asigno a este dispositivo. Es el +/// puente entre el descubrimiento PCI y el manejo de interrupciones (Fase 6.2). +pub fn linea_irq(device_function: DeviceFunction) -> u8 { + (leer(device_function, 0x3C) & 0xFF) as u8 +} + +/// Acceso al espacio de configuracion PCI por puertos de E/S — el mecanismo #1. +/// Es un tipo sin estado: toda la informacion viaja en cada llamada. +pub struct CamPuertos; + +impl ConfigurationAccess for CamPuertos { + fn read_word(&self, device_function: DeviceFunction, register_offset: u8) -> u32 { + leer(device_function, register_offset) + } + + fn write_word(&mut self, device_function: DeviceFunction, register_offset: u8, data: u32) { + escribir(device_function, register_offset, data); + } + + unsafe fn unsafe_clone(&self) -> Self { + // `CamPuertos` no tiene estado: clonarlo es trivial y sin riesgo. + CamPuertos + } +} diff --git a/renaser/kernel/src/gdt.rs b/renaser/kernel/src/gdt.rs new file mode 100644 index 0000000..4c7831c --- /dev/null +++ b/renaser/kernel/src/gdt.rs @@ -0,0 +1,80 @@ +// ============================================================================= +// renaser :: kernel/src/gdt.rs — Fase 2 :: cimientos del manejo de fallos +// ----------------------------------------------------------------------------- +// La GDT y el TSS no se ven jamas, pero sostienen todo lo demas. Su cometido +// esencial en renaser es reservar un stack de emergencia inquebrantable: si la +// pila del kernel se desborda, el manejador de doble fallo aterrizara sobre +// terreno firme en lugar de arrastrar al sistema hacia un fallo triple. +// +// Una sola verdad, instalada una sola vez, que PERSISTE bajo cada interrupcion. +// ============================================================================= + +use x86_64::instructions::segmentation::{Segment, CS, DS, ES, SS}; +use x86_64::instructions::tables::load_tss; +use x86_64::structures::gdt::{Descriptor, GlobalDescriptorTable, SegmentSelector}; +use x86_64::structures::tss::TaskStateSegment; +use x86_64::VirtAddr; + +use crate::CeldaSync; + +/// Indice, dentro de la Interrupt Stack Table del TSS, del stack reservado +/// para el manejador de doble fallo. +pub const IST_DOBLE_FALLO: u16 = 0; + +/// Tamaño del stack de emergencia: 20 KiB. Holgura suficiente para diagnosticar +/// el fallo y encender la baliza sin volver a tocar la pila comprometida. +const TAM_STACK_EMERGENCIA: usize = 4096 * 5; + +/// Stack de emergencia del doble fallo. Vive en `.bss`; la IST apuntara a su +/// extremo superior, pues la pila de x86_64 crece hacia direcciones menores. +static STACK_EMERGENCIA: CeldaSync<[u8; TAM_STACK_EMERGENCIA]> = + CeldaSync::nueva([0; TAM_STACK_EMERGENCIA]); + +/// El Task State Segment. En 64 bits ya no describe «tareas»: lo conservamos +/// unicamente por su Interrupt Stack Table. +static TSS: CeldaSync = CeldaSync::nueva(TaskStateSegment::new()); + +/// La Global Descriptor Table propia de renaser. +static GDT: CeldaSync = CeldaSync::nueva(GlobalDescriptorTable::new()); + +/// Instala una GDT propia con su TSS y arma el stack de emergencia. +/// +/// Debe invocarse una sola vez, durante el arranque, ANTES de cargar la IDT: +/// la IDT inscribe en cada entrada el selector de codigo vigente en ese momento. +pub fn init() { + // --- 1. Inscribir en el TSS la cima del stack de emergencia. --- + // La pila crece hacia abajo: la IST exige la direccion MAS ALTA del bloque. + let cima_stack = VirtAddr::from_ptr(STACK_EMERGENCIA.puntero()) + TAM_STACK_EMERGENCIA as u64; + // SEGURIDAD: `init` corre una sola vez, en arranque secuencial de un solo + // hilo; nada mas referencia el TSS todavia. + unsafe { + (*TSS.puntero()).interrupt_stack_table[IST_DOBLE_FALLO as usize] = cima_stack; + } + + // --- 2. Construir la GDT: codigo de kernel, datos de kernel y el TSS. --- + // SEGURIDAD: mismo argumento de unicidad; la GDT aun no esta cargada y + // ningun otro flujo posee referencias a estas celdas. + let gdt: &'static mut GlobalDescriptorTable = unsafe { &mut *GDT.puntero() }; + let tss: &'static TaskStateSegment = unsafe { &*TSS.puntero() }; + + let sel_codigo: SegmentSelector = gdt.append(Descriptor::kernel_code_segment()); + let sel_datos: SegmentSelector = gdt.append(Descriptor::kernel_data_segment()); + let sel_tss: SegmentSelector = gdt.append(Descriptor::tss_segment(tss)); + + // --- 3. Activar la GDT y recargar TODOS los registros de segmento. --- + let gdt_estatica: &'static GlobalDescriptorTable = gdt; + gdt_estatica.load(); + // SEGURIDAD: los tres selectores apuntan a entradas validas de la GDT + // recien cargada. Recargar SS/DS/ES es IMPRESCINDIBLE, no opcional: el + // cargador nos deja esos registros con selectores de SU tabla; si SS + // conservara el valor heredado, el primer `iretq` de una rutina de + // excepcion intentaria recargar un selector que en nuestra GDT ya no + // describe un segmento de datos, y degeneraria en un #GP. + unsafe { + CS::set_reg(sel_codigo); + SS::set_reg(sel_datos); + DS::set_reg(sel_datos); + ES::set_reg(sel_datos); + load_tss(sel_tss); + } +} diff --git a/renaser/kernel/src/grafico.rs b/renaser/kernel/src/grafico.rs new file mode 100644 index 0000000..721d12b --- /dev/null +++ b/renaser/kernel/src/grafico.rs @@ -0,0 +1,325 @@ +// ============================================================================= +// renaser :: kernel/src/grafico.rs — el sustrato grafico del sistema +// ----------------------------------------------------------------------------- +// En renaser el texto es un caso particular del dibujo, y el dibujo descansa +// sobre este modulo: el color, el framebuffer fisico (`Pantalla`) y el lienzo +// intermedio en RAM (`Lienzo`) que sostiene la tecnica de doble bufer. +// ============================================================================= + +use core::cell::UnsafeCell; +use core::ptr; +use core::sync::atomic::{AtomicBool, Ordering}; + +use bootloader_api::info::{FrameBuffer, FrameBufferInfo, PixelFormat}; +use embedded_graphics::draw_target::DrawTarget; +use embedded_graphics::geometry::{OriginDimensions, Size}; +use embedded_graphics::pixelcolor::{Rgb888, RgbColor}; +use embedded_graphics::Pixel; + +/// Ancho maximo de lienzo soportado (Full HD). +pub(crate) const ANCHO_MAX: usize = 1920; +/// Alto maximo de lienzo soportado (Full HD). +pub(crate) const ALTO_MAX: usize = 1080; +/// Capacidad del lienzo intermedio, en pixeles de 32 bits. +const PIXELES_MAX: usize = ANCHO_MAX * ALTO_MAX; + +// ============================================================================= +// COLOR — la unidad indivisible del lenguaje visual de renaser +// ============================================================================= + +/// Color de 24 bits, independiente del formato fisico del framebuffer. +#[derive(Clone, Copy)] +pub(crate) struct Color { + pub(crate) r: u8, + pub(crate) g: u8, + pub(crate) b: u8, +} + +impl Color { + /// Reposo del lienzo: un indigo casi negro, sereno y persistente. + pub(crate) const LIENZO_EN_REPOSO: Color = Color { + r: 0x12, + g: 0x16, + b: 0x20, + }; + + /// Alerta de colapso: un rojo saturado, imposible de ignorar. + pub(crate) const ALERTA: Color = Color { + r: 0xD4, + g: 0x1E, + b: 0x2C, + }; + + /// Agotamiento de memoria (OOM): un naranja de advertencia. + pub(crate) const OOM: Color = Color { + r: 0xFF, + g: 0xA5, + b: 0x00, + }; + + /// Tinta del texto: un blanco suave, legible sobre el indigo. + pub(crate) const TEXTO: Color = Color { + r: 0xE8, + g: 0xEC, + b: 0xF4, + }; + + /// Desalojo de una aplicacion: un purpura inequivoco. Distinto del rojo de + /// colapso del kernel y del naranja de OOM — porque esto NO es un colapso: + /// es el kernel conteniendo a un inquilino discolo y siguiendo vivo. + pub(crate) const DESALOJO: Color = Color { + r: 0x8B, + g: 0x5C, + b: 0xF6, + }; + + /// Desalojo por desbordo de memoria: un amarillo palido. Distingue al + /// inquilino que revento su techo ESPACIAL del que agoto su tiempo (purpura). + pub(crate) const DESALOJO_MEMORIA: Color = Color { + r: 0xFF, + g: 0xFF, + b: 0xE0, + }; +} + +// ============================================================================= +// REGION — la sub-superficie que el kernel asigna a cada aplicacion +// ============================================================================= + +/// Una sub-region rectangular de la pantalla, en pixeles. El kernel asigna una +/// a cada aplicacion del userspace: es, a la vez, su ventana al mundo y su +/// confinamiento — una app jamas pinta un pixel fuera de la suya. +#[derive(Clone, Copy)] +pub(crate) struct RegionPantalla { + /// Desplazamiento horizontal de la esquina superior izquierda. + pub(crate) x: usize, + /// Desplazamiento vertical de la esquina superior izquierda. + pub(crate) y: usize, + /// Ancho de la region, en pixeles. + pub(crate) ancho: usize, + /// Alto de la region, en pixeles. + pub(crate) alto: usize, +} + +impl RegionPantalla { + /// Numero total de pixeles que abarca la region. + pub(crate) const fn pixeles(&self) -> usize { + self.ancho * self.alto + } +} + +/// Traduce un [`Color`] logico al valor nativo de 32 bits que el framebuffer +/// espera, respetando el orden de canales que reporta el firmware UEFI. +pub(crate) fn codificar(formato: PixelFormat, color: Color) -> u32 { + let (r, g, b) = (color.r as u32, color.g as u32, color.b as u32); + match formato { + PixelFormat::Rgb => r | (g << 8) | (b << 16), + PixelFormat::Bgr => b | (g << 8) | (r << 16), + PixelFormat::U8 => (r * 54 + g * 183 + b * 19) >> 8, + PixelFormat::Unknown { + red_position, + green_position, + blue_position, + } => (r << red_position) | (g << green_position) | (b << blue_position), + _ => r | (g << 8) | (b << 16), + } +} + +// ============================================================================= +// ESCRITURA VOLATIL — la unica celula que toca memoria de video real +// ============================================================================= + +/// Deposita un pixel ya codificado en una direccion del framebuffer fisico. +/// Las escrituras son **volatiles**: el optimizador no puede elidirlas. +/// +/// # Seguridad +/// +/// `destino` debe apuntar a memoria de video valida y escribible para +/// `bytes_por_pixel` bytes, correctamente alineada para el ancho de escritura. +#[inline] +pub(crate) unsafe fn escribir_pixel_volatil(destino: *mut u8, valor: u32, bytes_por_pixel: usize) { + match bytes_por_pixel { + 4 => unsafe { ptr::write_volatile(destino.cast::(), valor) }, + 3 => unsafe { + ptr::write_volatile(destino, valor as u8); + ptr::write_volatile(destino.add(1), (valor >> 8) as u8); + ptr::write_volatile(destino.add(2), (valor >> 16) as u8); + }, + 2 => unsafe { ptr::write_volatile(destino.cast::(), valor as u16) }, + _ => unsafe { ptr::write_volatile(destino, valor as u8) }, + } +} + +// ============================================================================= +// LIENZO INTERMEDIO — el corazon del doble bufer +// ============================================================================= + +/// Respaldo estatico del lienzo, alineado a pagina. Vive en `.bss`. +#[repr(align(4096))] +struct LienzoEstatico(UnsafeCell<[u32; PIXELES_MAX]>); + +// SEGURIDAD: el acceso se serializa mediante `LIENZO_ENTREGADO`, que garantiza +// un unico prestamo mutable durante toda la vida del sistema. +unsafe impl Sync for LienzoEstatico {} + +/// Memoria de respaldo del lienzo intermedio. +static MEMORIA_LIENZO: LienzoEstatico = LienzoEstatico(UnsafeCell::new([0u32; PIXELES_MAX])); + +/// Centinela de entrega unica del lienzo. +static LIENZO_ENTREGADO: AtomicBool = AtomicBool::new(false); + +/// Entrega — exactamente una vez — el prestamo mutable de la memoria del lienzo. +pub(crate) fn reclamar_memoria_lienzo() -> Option<&'static mut [u32]> { + if LIENZO_ENTREGADO.swap(true, Ordering::AcqRel) { + return None; + } + // SEGURIDAD: el `swap` anterior garantiza que este es el unico prestamo + // mutable de `MEMORIA_LIENZO` durante toda la ejecucion. + let arreglo: &'static mut [u32; PIXELES_MAX] = unsafe { &mut *MEMORIA_LIENZO.0.get() }; + Some(arreglo.as_mut_slice()) +} + +/// Superficie de dibujo en RAM. Cada pixel se almacena ya codificado. +pub(crate) struct Lienzo { + pub(crate) pixeles: &'static mut [u32], + pub(crate) ancho: usize, + pub(crate) alto: usize, + pub(crate) formato: PixelFormat, +} + +impl Lienzo { + /// Construye un lienzo sobre la memoria de respaldo reclamada. + pub(crate) fn nuevo( + memoria: &'static mut [u32], + ancho: usize, + alto: usize, + formato: PixelFormat, + ) -> Lienzo { + Lienzo { + pixeles: memoria, + ancho, + alto, + formato, + } + } + + /// Pinta un unico pixel. Las coordenadas fuera del lienzo se ignoran. + pub(crate) fn pintar_pixel(&mut self, x: usize, y: usize, color: Color) { + if x < self.ancho && y < self.alto { + self.pixeles[y * self.ancho + x] = codificar(self.formato, color); + } + } + + /// Rellena un rectangulo, recortado con firmeza a los limites del lienzo. + pub(crate) fn rellenar_rect( + &mut self, + x0: usize, + y0: usize, + ancho: usize, + alto: usize, + color: Color, + ) { + let valor = codificar(self.formato, color); + let x_ini = x0.min(self.ancho); + let y_ini = y0.min(self.alto); + let x_fin = (x0 + ancho).min(self.ancho); + let y_fin = (y0 + alto).min(self.alto); + + let mut y = y_ini; + while y < y_fin { + let base = y * self.ancho; + let mut x = x_ini; + while x < x_fin { + self.pixeles[base + x] = valor; + x += 1; + } + y += 1; + } + } + + /// Inunda el lienzo entero con un color plano. + pub(crate) fn limpiar(&mut self, color: Color) { + self.rellenar_rect(0, 0, self.ancho, self.alto, color); + } +} + +// `embedded-graphics` ve el lienzo como un `DrawTarget`: sus primitivas +// vectoriales pueden dibujar directamente sobre el. +impl DrawTarget for Lienzo { + type Color = Rgb888; + type Error = core::convert::Infallible; + + fn draw_iter(&mut self, pixeles: I) -> Result<(), Self::Error> + where + I: IntoIterator>, + { + for Pixel(punto, color) in pixeles { + if let (Ok(x), Ok(y)) = (usize::try_from(punto.x), usize::try_from(punto.y)) { + self.pintar_pixel( + x, + y, + Color { + r: color.r(), + g: color.g(), + b: color.b(), + }, + ); + } + } + Ok(()) + } +} + +impl OriginDimensions for Lienzo { + fn size(&self) -> Size { + Size::new(self.ancho as u32, self.alto as u32) + } +} + +// ============================================================================= +// PANTALLA — el framebuffer fisico GOP, envuelto en seguridad +// ============================================================================= + +/// Vista segura del framebuffer lineal entregado por el firmware UEFI. +pub(crate) struct Pantalla { + pub(crate) base: *mut u8, + pub(crate) ancho: usize, + pub(crate) alto: usize, + pub(crate) paso_bytes: usize, + pub(crate) bytes_por_pixel: usize, +} + +impl Pantalla { + /// Adopta el framebuffer descrito por `info`. La memoria de video es + /// permanente, asi que conservar su puntero crudo es legitimo. + pub(crate) fn adoptar(framebuffer: &mut FrameBuffer, info: FrameBufferInfo) -> Pantalla { + let base = framebuffer.buffer_mut().as_mut_ptr(); + Pantalla { + base, + ancho: info.width, + alto: info.height, + paso_bytes: info.stride * info.bytes_per_pixel, + bytes_por_pixel: info.bytes_per_pixel, + } + } + + /// Vuelca el lienzo intermedio sobre la pantalla fisica de un solo gesto. + pub(crate) fn presentar(&mut self, lienzo: &Lienzo) { + let ancho = self.ancho.min(lienzo.ancho); + let alto = self.alto.min(lienzo.alto); + + for y in 0..alto { + let fila_fisica = y * self.paso_bytes; + let fila_lienzo = y * lienzo.ancho; + for x in 0..ancho { + let pixel = lienzo.pixeles[fila_lienzo + x]; + // SEGURIDAD: x e y estan acotados por las dimensiones reales + // del framebuffer; el desplazamiento cae siempre dentro de el. + unsafe { + let destino = self.base.add(fila_fisica + x * self.bytes_por_pixel); + escribir_pixel_volatil(destino, pixel, self.bytes_por_pixel); + } + } + } + } +} diff --git a/renaser/kernel/src/interrupts.rs b/renaser/kernel/src/interrupts.rs new file mode 100644 index 0000000..9d5e46a --- /dev/null +++ b/renaser/kernel/src/interrupts.rs @@ -0,0 +1,148 @@ +// ============================================================================= +// renaser :: kernel/src/interrupts.rs — Fase 2/3 :: la IDT y los reflejos +// ----------------------------------------------------------------------------- +// La Interrupt Descriptor Table es la tabla de reflejos del procesador. ante +// cada excepcion o IRQ, la CPU abandona lo que hacia y salta a la entrada que +// le corresponde. renaser distingue tres naturalezas de impulso: +// +// * RECUPERABLE — el breakpoint (#BP): se atiende y la ejecucion prosigue. +// * FATAL — el resto de excepciones: se entregan al `panic!`. +// * HARDWARE — temporizador, teclado y disco: ya NO escriben estado +// rustico, sino que alimentan el reactor asincrono. +// ============================================================================= + +use core::sync::atomic::{AtomicU8, Ordering}; + +use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame, PageFaultErrorCode}; + +use crate::{gdt, pic, CeldaSync}; + +/// La Interrupt Descriptor Table propia de renaser. +static IDT: CeldaSync = + CeldaSync::nueva(InterruptDescriptorTable::new()); + +/// Vector de la IDT asignado a la IRQ del disco. Vale 0 hasta que el montaje +/// del disco (Fase 6.2) descubra su linea de IRQ y la registre — ninguna IRQ +/// legitima del disco vive en el vector 0 (reservado a las excepciones). +static VECTOR_DISCO: AtomicU8 = AtomicU8::new(0); + +/// Construye y activa la Interrupt Descriptor Table. +/// +/// Debe invocarse una sola vez, durante el arranque, DESPUES de [`gdt::init`]. +pub fn init() { + // SEGURIDAD: `init` corre una sola vez, en arranque secuencial de un solo + // hilo; nada mas referencia la IDT todavia. + let idt: &'static mut InterruptDescriptorTable = unsafe { &mut *IDT.puntero() }; + + // --- Excepciones de CPU --- + idt.breakpoint.set_handler_fn(reflejo_breakpoint); + idt.invalid_opcode.set_handler_fn(reflejo_opcode_invalido); + idt.divide_error.set_handler_fn(reflejo_division); + idt.general_protection_fault + .set_handler_fn(reflejo_proteccion_general); + idt.page_fault.set_handler_fn(reflejo_fallo_pagina); + + // El doble fallo se atiende SIEMPRE sobre el stack de emergencia del TSS: + // ni un desbordamiento de la pila del kernel impedira su diagnostico. + // SEGURIDAD: el indice IST referido fue armado previamente por `gdt::init`. + unsafe { + idt.double_fault + .set_handler_fn(reflejo_doble_fallo) + .set_stack_index(gdt::IST_DOBLE_FALLO); + } + + // --- Interrupciones de hardware, ya remapeadas por el PIC --- + idt[pic::VECTOR_TEMPORIZADOR].set_handler_fn(irq_temporizador); + idt[pic::VECTOR_TECLADO].set_handler_fn(irq_teclado); + + let idt_estatica: &'static InterruptDescriptorTable = idt; + idt_estatica.load(); +} + +/// Registra el manejador de la IRQ del disco virtio-blk en la entrada de la IDT +/// que corresponde a `irq` (Fase 6.2). Lo invoca el montaje del disco, una vez +/// descubierta la linea de IRQ que el firmware le asigno. +/// +/// Se llama durante el arranque secuencial, con las interrupciones aun +/// desactivadas y la linea todavia enmascarada en el PIC: la entrada que se +/// escribe no puede dispararse mientras se escribe. +pub fn registrar_irq_disco(irq: u8) { + let vector = pic::vector_irq(irq); + VECTOR_DISCO.store(vector, Ordering::SeqCst); + // SEGURIDAD: el arranque es secuencial y de un solo hilo; las interrupciones + // estan desactivadas y la linea del disco, enmascarada. La IDT ya esta + // cargada (`init` hizo `lidt`), pero la CPU relee cada entrada en cada + // interrupcion: modificar esta entrada en memoria surte efecto de inmediato. + let idt: &'static mut InterruptDescriptorTable = unsafe { &mut *IDT.puntero() }; + idt[vector].set_handler_fn(irq_disco); +} + +// ============================================================================= +// REFLEJOS DE EXCEPCION — las rutinas a las que la CPU salta ante cada fallo +// ============================================================================= + +/// #BP — Breakpoint. Excepcion RECUPERABLE: se atiende sin ruido y, al +/// retornar, la CPU reanuda la ejecucion justo tras la instruccion `int3`. +extern "x86-interrupt" fn reflejo_breakpoint(_marco: InterruptStackFrame) {} + +/// #UD — Opcode invalido. Fatal: la corriente de instrucciones es incoherente. +extern "x86-interrupt" fn reflejo_opcode_invalido(marco: InterruptStackFrame) { + panic!("EXCEPCION FATAL :: opcode invalido (#UD)\n{marco:#?}"); +} + +/// #DE — Error de division. Fatal. +extern "x86-interrupt" fn reflejo_division(marco: InterruptStackFrame) { + panic!("EXCEPCION FATAL :: error de division (#DE)\n{marco:#?}"); +} + +/// #GP — Fallo de proteccion general. Fatal. +extern "x86-interrupt" fn reflejo_proteccion_general(marco: InterruptStackFrame, codigo: u64) { + panic!("EXCEPCION FATAL :: proteccion general (#GP) codigo={codigo:#x}\n{marco:#?}"); +} + +/// #PF — Fallo de pagina. Fatal en esta fase (sin memoria virtual dinamica). +extern "x86-interrupt" fn reflejo_fallo_pagina( + marco: InterruptStackFrame, + codigo: PageFaultErrorCode, +) { + let direccion = x86_64::registers::control::Cr2::read_raw(); + panic!("EXCEPCION FATAL :: fallo de pagina (#PF) en {direccion:#x} {codigo:?}\n{marco:#?}"); +} + +/// #DF — Doble fallo. Fatal e irreversible: por definicion, diverge. Se ejecuta +/// sobre el stack de emergencia del TSS, nunca sobre la pila comprometida. +extern "x86-interrupt" fn reflejo_doble_fallo(marco: InterruptStackFrame, _codigo: u64) -> ! { + panic!("EXCEPCION FATAL :: doble fallo (#DF)\n{marco:#?}"); +} + +// ============================================================================= +// IMPULSOS DE HARDWARE — productores de eventos para el reactor asincrono +// ============================================================================= + +/// IRQ0 — Temporizador. Desde la Fase 5 marca el compas del userspace: cada +/// pulso avanza el `reloj` y despierta a las tareas que aguardaban su fotograma. +extern "x86-interrupt" fn irq_temporizador(_marco: InterruptStackFrame) { + crate::async_system::reloj::pulso(); + pic::fin_de_interrupcion(pic::VECTOR_TEMPORIZADOR); +} + +/// IRQ1 — Teclado. Ya no escribe estado rustico: lee el scancode crudo y lo +/// entrega al reactor asincrono, que despertara a la tarea del teclado. +extern "x86-interrupt" fn irq_teclado(_marco: InterruptStackFrame) { + // SEGURIDAD: 0x60 es el puerto de datos del controlador PS/2, fijo en la + // arquitectura PC. Leerlo, ademas, libera al controlador para el siguiente. + let scancode: u8 = unsafe { x86_64::instructions::port::Port::new(0x60).read() }; + crate::async_system::teclado::recibir_scancode(scancode); + pic::fin_de_interrupcion(pic::VECTOR_TECLADO); +} + +/// IRQ del disco — virtio-blk (Fase 6.2). El disco ha terminado una +/// transferencia: `atender_irq` reconoce la interrupcion en el dispositivo +/// —lo que libera su linea— y despierta a la tarea que aguardaba el bloque. +/// Asi la E/S de disco deja de bloquear el planificador por sondeo. +extern "x86-interrupt" fn irq_disco(_marco: InterruptStackFrame) { + crate::drivers::disco::atender_irq(); + // El EOI se cierra DESPUES de reconocer al dispositivo: una IRQ legada de + // PCI es de nivel — anunciar el fin sin haber bajado la linea la reavivaria. + pic::fin_de_interrupcion(VECTOR_DISCO.load(Ordering::SeqCst)); +} diff --git a/renaser/kernel/src/main.rs b/renaser/kernel/src/main.rs new file mode 100644 index 0000000..1c24ec9 --- /dev/null +++ b/renaser/kernel/src/main.rs @@ -0,0 +1,342 @@ +// ============================================================================= +// renaser :: kernel/src/main.rs — el punto de entrada y la orquestacion +// ----------------------------------------------------------------------------- +// Aqui no nace una terminal: nace una superficie. renaser es un kernel +// asincrono de Espacio de Direccionamiento Unico (SASOS) que rompe con el +// paradigma POSIX — sin TTYs, sin archivos planos, sin capas GNU. +// +// Este archivo es deliberadamente delgado: solo el arranque y el cableado. +// Cada subsistema vive en su propio modulo (ver `ARCHITECTURE.md`): +// +// grafico — color, framebuffer fisico y lienzo de doble bufer. +// consola — superficie de texto/imagen; rasteriza glifos con fontdue. +// baliza — red de seguridad visual; manejadores de panico y de OOM. +// sync — `CeldaSync`, la celda de inicializacion unica. +// gdt — GDT + TSS + stack de emergencia del doble fallo. +// interrupts — IDT, excepciones de CPU e interrupciones de hardware. +// pic — el par 8259 remapeado y el temporizador (PIT). +// drivers — descubrimiento de hardware y E/S de disco asincrona por +// interrupcion: el bus PCI y el virtio-blk (Fases 6.1, 6.2). +// almacen — el grafo de objetos direccionado por contenido (Fase 6.1c). +// memory — el heap dinamico del kernel (`#[global_allocator]`). +// async_system — el reactor cooperativo: ejecutor, tareas, wakers, teclado +// y el reloj que marca el compas de los fotogramas (Fase 5). +// texto — rasterizacion de tipografia vectorial (fontdue). +// wasm — el runtime WebAssembly, la matriz de capacidades y el +// escudo de combustible que acota el tiempo de cada app. +// ============================================================================= + +#![no_std] // Prohibido `std`: bajo nosotros no hay sistema operativo alguno. +#![no_main] // El punto de entrada lo define el cargador, no la convencion C. +#![feature(abi_x86_interrupt)] // ABI de las rutinas de excepcion (Fase 2). +#![feature(alloc_error_handler)] // Manejador propio de agotamiento de heap (Fase 3). +#![deny(unsafe_op_in_unsafe_fn)] // Cada operacion `unsafe` se justifica explicitamente. + +extern crate alloc; // El heap esta vivo: `alloc::*` queda disponible (Fase 3). + +use alloc::format; + +use bootloader_api::config::{BootloaderConfig, Mapping}; +use bootloader_api::info::{FrameBufferInfo, MemoryRegionKind, MemoryRegions, PixelFormat}; +use bootloader_api::{entry_point, BootInfo}; +use spin::Mutex; + +// --- Subsistemas del kernel --- +mod almacen; +mod async_system; +mod baliza; +mod consola; +mod drivers; +mod gdt; +mod grafico; +mod interrupts; +mod memory; +mod pic; +mod sync; +mod texto; +mod wasm; + +// Reexportaciones para que los submodulos conserven rutas `crate::` estables. +pub(crate) use consola::volcar_marco_wasm; +pub(crate) use sync::CeldaSync; + +use async_system::executor::Executor; +use baliza::BALIZA_PANICO; +use consola::{Consola, CONSOLA}; +use grafico::{ + codificar, reclamar_memoria_lienzo, Color, Lienzo, Pantalla, RegionPantalla, ALTO_MAX, + ANCHO_MAX, +}; + +/// El modulo WASM del userspace, empotrado en el binario del kernel para esta +/// fase de pruebas. Es un `.wasm` puro, compilado aparte para `wasm32`. La +/// Fase 5 lo instancia DOS veces —el mismo bytecode, dos regiones distintas— +/// para demostrar la multitarea cooperativa sobre el espacio unico. +static APP_WASM: &[u8] = include_bytes!("../assets/app.wasm"); + +/// La aplicacion DISCOLA: un modulo WASM cuyo `tick` cae en un bucle cerrado y +/// jamas retorna. Existe para una sola cosa — demostrar que el guardarrail de +/// combustible la fulmina sin despeinar al kernel ni a sus vecinas. +static DISCOLA_WASM: &[u8] = include_bytes!("../assets/discola.wasm"); + +/// La aplicacion GLOTONA: un modulo WASM que reclama memoria lineal sin freno. +/// Demuestra el guardarrail ESPACIAL — el techo de memoria la desaloja con la +/// baliza amarilla, gemela de la purpura del desalojo por combustible. +static GLOTONA_WASM: &[u8] = include_bytes!("../assets/glotona.wasm"); + +/// La aplicacion CRONISTA: la primera ciudadana del userspace que escribe en el +/// almacenamiento PERSISTENTE. En cada arranque graba un objeto en el grafo +/// —enlazado al del arranque anterior—, lo corona como raiz y pinta una celda +/// por cada arranque registrado. El disco recuerda; la cuenta sobrevive a los +/// reinicios. Demuestra las capacidades `sys_object_*` de la Fase 6.1c. +static CRONISTA_WASM: &[u8] = include_bytes!("../assets/cronista.wasm"); + +/// Configuracion que el cargador `bootloader` aplicara antes de cedernos la CPU. +static CONFIG_ARRANQUE: BootloaderConfig = { + let mut config = BootloaderConfig::new_default(); + // Pedimos la memoria fisica mapeada: cimiento para futuras fases. + config.mappings.physical_memory = Some(Mapping::Dynamic); + config +}; + +// `entry_point!` genera el simbolo `_start`, valida la firma de `kernel_main` +// y nos transfiere el control con seguridad de tipos. +entry_point!(kernel_main, config = &CONFIG_ARRANQUE); + +/// Detiene la CPU de forma definitiva: `hlt` la duerme hasta una interrupcion. +pub(crate) fn detener() -> ! { + loop { + x86_64::instructions::hlt(); + } +} + +/// Tarea cooperativa de una aplicacion WASM. En cada pulso del reloj le concede +/// un `tick` —un fotograma de trabajo— y cede la CPU hasta el siguiente; entre +/// medias corren sus vecinas. Si la app falla o agota su combustible, se la +/// DESALOJA: se tatua su region con la baliza de purpura y la tarea concluye. +/// El ejecutor la retira del censo, su memoria se libera, el kernel sigue vivo. +async fn tarea_aplicacion(mut app: wasm::AplicacionWasm) { + loop { + async_system::reloj::EsperaFrame::nueva().await; + if let Err(falla) = app.tick() { + // El color de la baliza delata la causa: purpura si agoto su tiempo + // o aborto, amarillo si reviento su techo de memoria. + consola::pintar_desalojo(app.region(), falla.color_baliza()); + return; + } + } +} + +/// FASE 6.2 — la prueba viva de la E/S asincrona. Esta tarea del reactor lee el +/// sector 0 del disco SIN bloquear: cede la CPU mientras el disco trabaja —las +/// apps siguen pintando entre tanto— y la IRQ del disco la reanuda cuando el +/// bloque esta listo. Deja en la consola el resultado y cuantas interrupciones +/// de disco se atendieron — el testigo de que la E/S por sondeo quedo atras. +async fn tarea_sonda_disco() { + let resultado = drivers::disco::leer_bloques(0, 1).await; + let Some(consola) = CONSOLA.get() else { + return; + }; + let mut consola = consola.lock(); + match resultado { + Ok(_) => consola.escribir(&format!( + "disco :: sonda asincrona OK -- {} IRQ de disco atendidas\n", + drivers::disco::pulsos_disco(), + )), + Err(motivo) => { + consola.escribir(&format!("disco :: sonda asincrona fallida -- {motivo}\n")) + } + } + consola.presentar(); +} + +/// Da vida a una aplicacion del userspace: la carga en su region y, si lo +/// logra, la despacha como tarea cooperativa del reactor. Una carga fallida se +/// salda pintando su region con la baliza de desalojo — el kernel no se inmuta. +fn encender_app(ejecutor: &mut Executor, bytecode: &'static [u8], region: RegionPantalla) { + match wasm::AplicacionWasm::cargar(bytecode, region) { + Ok(app) => ejecutor.spawn(tarea_aplicacion(app)), + Err(_) => consola::pintar_desalojo(region, Color::DESALOJO), + } +} + +/// Localiza la mayor region de RAM libre que el cargador reporto — la cantera +/// de la que el DMA del disco tomara sus marcos fisicos. +fn mayor_region_usable(regiones: &MemoryRegions) -> Option<(u64, u64)> { + regiones + .iter() + .filter(|region| matches!(region.kind, MemoryRegionKind::Usable)) + .map(|region| (region.start, region.end)) + .max_by_key(|&(inicio, fin)| fin - inicio) +} + +/// FASE 6.1c — funda el grafo de objetos. Monta el disco virtio-blk, lee o +/// forja el superbloque, reconstruye el indice recorriendo el log y deja +/// constancia visual: cuantos sectores tiene el disco, cuantos objetos viven +/// ya en el grafo y si el arranque encontro —o no— una raiz de la que tirar. +fn informar_almacen() { + // Fundar el almacen ANTES de tomar el cerrojo de la consola: el montaje + // del disco hace E/S por sondeo y nada de ello reclama la consola. + let resultado = almacen::init(); + let Some(consola) = CONSOLA.get() else { + return; + }; + let mut consola = consola.lock(); + match resultado { + Ok(resumen) => { + let estado = if resumen.formateado { + "disco formateado" + } else { + "grafo montado" + }; + consola.escribir(&format!( + "almacen :: {} :: {} sectores :: {} objetos :: raiz {}\n", + estado, + resumen.capacidad, + resumen.objetos, + if resumen.raiz { "presente" } else { "ausente" }, + )); + } + Err(motivo) => { + consola.escribir(&format!("almacen :: fallo :: {motivo}\n")); + } + } + // FASE 6.2 — dejar constancia de la linea de IRQ por la que el disco + // anunciara, ya sin sondeo, el fin de cada transferencia. + match drivers::disco::irq() { + Some(irq) => { + consola.escribir(&format!("disco :: virtio-blk en IRQ {irq} -- E/S asincrona\n")) + } + None => consola.escribir("disco :: IRQ no enrutada -- E/S por sondeo\n"), + } + consola.presentar(); +} + +// ============================================================================= +// PUNTO DE ENTRADA DEL KERNEL +// ============================================================================= + +fn kernel_main(boot_info: &'static mut BootInfo) -> ! { + // --- 1. Recuperar el framebuffer GOP que el firmware nos confio. --- + let framebuffer = match boot_info.framebuffer.as_mut() { + Some(fb) => fb, + None => detener(), + }; + let info: FrameBufferInfo = framebuffer.info(); + let formato: PixelFormat = info.pixel_format; + let pantalla = Pantalla::adoptar(framebuffer, info); + + // Datos para la sonda de disco (Fase 6.1b): el offset al que el cargador + // mapeo la memoria fisica y la mayor region de RAM libre para el DMA. + let offset_fisico = boot_info.physical_memory_offset.into_option(); + let region_dma = mayor_region_usable(&boot_info.memory_regions); + + // --- 2. Encender la baliza: la red de seguridad visual va primero. --- + BALIZA_PANICO.encender( + &pantalla, + codificar(formato, Color::ALERTA), + codificar(formato, Color::OOM), + ); + + // --- 3. Cimientos de fallos e interrupciones (Fases 2.0 y 2.1). --- + gdt::init(); + interrupts::init(); + pic::init(); + + // --- 4. FASE 3 :: fundar el heap. A partir de aqui, `alloc` esta vivo. --- + memory::init(); + + // --- 5. Con el heap activo, fundar lo que depende de el: el canal de + // scancodes, el reloj de fotogramas y la tipografia vectorial. --- + async_system::teclado::init(); + async_system::reloj::init(); + texto::init(); + + // --- 6. Construir el lienzo y la consola; pintar el rotulo inicial, + // ya rasterizado por fontdue, y publicar la consola globalmente. --- + let memoria = match reclamar_memoria_lienzo() { + Some(m) => m, + None => detener(), + }; + let mut lienzo = Lienzo::nuevo( + memoria, + info.width.min(ANCHO_MAX), + info.height.min(ALTO_MAX), + formato, + ); + lienzo.limpiar(Color::LIENZO_EN_REPOSO); + + let mut consola = Consola::nueva(lienzo, pantalla); + consola.escribir("renaser :: fase 6.2 -- E/S de disco asincrona por interrupcion\n"); + consola.presentar(); + CONSOLA.call_once(|| Mutex::new(consola)); + + // --- 6.5. FASE 6.1c :: fundar el subsistema de disco y, sobre el, el grafo + // de objetos: enumerar el bus PCI, montar el transporte virtio-blk, + // y leer o forjar el superbloque del almacen direccionado por + // contenido. El kernel adquiere, por fin, una memoria que perdura. --- + match (offset_fisico, region_dma) { + (Some(offset), Some((inicio, fin))) => { + drivers::disco::init(offset, inicio, fin); + informar_almacen(); + } + _ => { + if let Some(consola) = CONSOLA.get() { + let mut consola = consola.lock(); + consola.escribir("virtio-blk :: omitido -- memoria fisica sin mapear\n"); + consola.presentar(); + } + } + } + + // --- 7. FASE 5/6 :: levantar el reactor y poblar el userspace con CINCO + // aplicaciones WASM concurrentes, cada una en su propia region: + // + // * App 1 — instancia de hello_wasm, a la izquierda, gobernada + // por el teclado. + // * App 2 — segunda instancia del MISMO bytecode, a la derecha: + // un unico modulo en la RAM unificada, dos vidas aisladas. + // * App discola — su `tick` es un bucle cerrado: el escudo de + // COMBUSTIBLE la desaloja (baliza purpura) en su 1er fotograma. + // * App glotona — reclama memoria sin freno: el escudo ESPACIAL + // la desaloja (baliza amarilla) en su 1er fotograma. + // * App cronista — escribe en el GRAFO DE OBJETOS persistente: + // cada arranque deja un objeto enlazado al anterior y pinta una + // celda por arranque. El disco recuerda entre reinicios. + // + // Las interrupciones se habilitan AHORA: el temporizador marcara el + // compas de los fotogramas y la IRQ del teclado difundira cada + // scancode a los canales que las apps consultan. --- + let mut ejecutor = Executor::nuevo(); + encender_app( + &mut ejecutor, + APP_WASM, + RegionPantalla { x: 100, y: 120, ancho: 480, alto: 560 }, + ); + encender_app( + &mut ejecutor, + APP_WASM, + RegionPantalla { x: 700, y: 120, ancho: 480, alto: 560 }, + ); + encender_app( + &mut ejecutor, + DISCOLA_WASM, + RegionPantalla { x: 60, y: 700, ancho: 360, alto: 80 }, + ); + encender_app( + &mut ejecutor, + GLOTONA_WASM, + RegionPantalla { x: 460, y: 700, ancho: 360, alto: 80 }, + ); + encender_app( + &mut ejecutor, + CRONISTA_WASM, + RegionPantalla { x: 860, y: 700, ancho: 360, alto: 80 }, + ); + // FASE 6.2 :: una tarea mas del reactor — no una app WASM— que sondea el + // disco de forma ASINCRONA: la demostracion de que la IRQ del disco + // conduce la E/S sin detener a las aplicaciones visuales. + ejecutor.spawn(tarea_sonda_disco()); + x86_64::instructions::interrupts::enable(); + ejecutor.run(); +} diff --git a/renaser/kernel/src/memory/allocator.rs b/renaser/kernel/src/memory/allocator.rs new file mode 100644 index 0000000..4164c04 --- /dev/null +++ b/renaser/kernel/src/memory/allocator.rs @@ -0,0 +1,42 @@ +// ============================================================================= +// renaser :: kernel/src/memory/allocator.rs — Fase 3 :: el asignador global +// ----------------------------------------------------------------------------- +// Reutilizamos un algoritmo probado (`linked_list_allocator`) en lugar de +// arriesgar un asignador propio a bugs de fragmentacion. El heap es una region +// estatica que PERSISTE durante toda la vida del kernel. +// ============================================================================= + +use linked_list_allocator::LockedHeap; + +use crate::CeldaSync; + +/// 64 MiB de heap para el kernel. La arquitectura estimaba 16, pero `fontdue`, +/// al analizar una tipografia real, exige mas holgura; el manejador de OOM —la +/// franja naranja— fue justamente lo que delato esa cota demasiado corta. +const TAM_HEAP: usize = 64 * 1024 * 1024; + +/// Region de respaldo del heap, alineada a pagina, residente en `.bss`. Su +/// campo solo se alcanza via puntero crudo —asi lo exige `GlobalAlloc`—, de ahi +/// el `allow(dead_code)`: la memoria se usa, aunque no por una via «normal». +#[repr(align(4096))] +#[allow(dead_code)] +struct RegionHeap([u8; TAM_HEAP]); + +/// La memoria fisica del heap. Nace a ceros, no engorda el binario. +static REGION_HEAP: CeldaSync = CeldaSync::nueva(RegionHeap([0u8; TAM_HEAP])); + +/// El asignador global. Todo `alloc::*` —`Box`, `Vec`, `BTreeMap`, `Arc`...— +/// se apoya, en silencio, sobre este. +#[global_allocator] +static ASIGNADOR: LockedHeap = LockedHeap::empty(); + +/// Funda el heap del kernel. Debe invocarse UNA sola vez, en el arranque, +/// antes del primer uso de cualquier estructura de `alloc`. +pub fn init() { + let inicio: *mut u8 = REGION_HEAP.puntero().cast::(); + // SEGURIDAD: la region es estatica, de uso exclusivo del asignador, vive + // tanto como el kernel, y `init` se invoca una unica vez en el arranque. + unsafe { + ASIGNADOR.lock().init(inicio, TAM_HEAP); + } +} diff --git a/renaser/kernel/src/memory/mod.rs b/renaser/kernel/src/memory/mod.rs new file mode 100644 index 0000000..c858b3f --- /dev/null +++ b/renaser/kernel/src/memory/mod.rs @@ -0,0 +1,11 @@ +// ============================================================================= +// renaser :: kernel/src/memory — la memoria dinamica del kernel (Fase 3) +// ----------------------------------------------------------------------------- +// El heap no es, en renaser, una utilidad pasiva al estilo C. Existe para +// sostener algo vivo: la cola de futuros y los reactores asincronos sobre los +// que, fase a fase, se ejecutara el bytecode WASM aislado por software. +// ============================================================================= + +pub mod allocator; + +pub use allocator::init; diff --git a/renaser/kernel/src/pic.rs b/renaser/kernel/src/pic.rs new file mode 100644 index 0000000..7e1ff03 --- /dev/null +++ b/renaser/kernel/src/pic.rs @@ -0,0 +1,147 @@ +// ============================================================================= +// renaser :: kernel/src/pic.rs — Fase 2.1 :: el par 8259 y el metronomo +// ----------------------------------------------------------------------------- +// El controlador de interrupciones 8259 (PIC) nace, por herencia historica, +// con sus vectores solapados sobre los de las excepciones de CPU. Antes de +// encender las interrupciones HAY que remapearlo: desplazar sus vectores +// fuera del rango 0..31. Aqui tambien programamos el PIT, el temporizador +// que dara a renaser su latido regular — el origen de su fluidez. +// ============================================================================= + +use x86_64::instructions::port::Port; + +// --- Puertos del par de 8259 (maestro + esclavo en cascada). --- +const CMD_MAESTRO: u16 = 0x20; +const DATOS_MAESTRO: u16 = 0x21; +const CMD_ESCLAVO: u16 = 0xA0; +const DATOS_ESCLAVO: u16 = 0xA1; + +// --- Puertos del temporizador de intervalos programable (PIT). --- +const PIT_COMANDO: u16 = 0x43; +const PIT_CANAL0: u16 = 0x40; +/// Frecuencia base del cristal del PIT, en Hz. +const PIT_BASE_HZ: u32 = 1_193_182; + +/// Orden de «fin de interrupcion» que el PIC espera tras cada IRQ atendida. +const EOI: u8 = 0x20; + +/// Vector base del PIC maestro tras el remapeo (justo encima de las 32 +/// excepciones reservadas de la arquitectura). +const OFFSET_MAESTRO: u8 = 0x20; +/// Vector base del PIC esclavo tras el remapeo. +const OFFSET_ESCLAVO: u8 = 0x28; + +/// Vector de la IRQ0 — el temporizador (PIT). +pub const VECTOR_TEMPORIZADOR: u8 = OFFSET_MAESTRO; // 0x20 +/// Vector de la IRQ1 — el teclado. +pub const VECTOR_TECLADO: u8 = OFFSET_MAESTRO + 1; // 0x21 + +/// Remapea el par 8259 y programa el PIT a 100 Hz. +/// +/// Debe invocarse una sola vez, tras cargar la IDT y ANTES de habilitar las +/// interrupciones con `sti`. +pub fn init() { + remapear(); + configurar_temporizador(100); +} + +/// Reprograma los vectores del 8259 fuera del rango de las excepciones de CPU. +fn remapear() { + // SEGURIDAD: estos son los puertos de E/S estandar del 8259 en la + // arquitectura PC; la secuencia ICW1..ICW4 es su protocolo de inicio. + unsafe { + let mut cmd_m = Port::::new(CMD_MAESTRO); + let mut dat_m = Port::::new(DATOS_MAESTRO); + let mut cmd_e = Port::::new(CMD_ESCLAVO); + let mut dat_e = Port::::new(DATOS_ESCLAVO); + // Escribir en un puerto inerte da al 8259 el respiro que necesita + // entre palabras de control en hardware antiguo. + let mut respiro = Port::::new(0x80); + + // ICW1 — iniciar la secuencia: en cascada, con ICW4 presente. + cmd_m.write(0x11u8); + respiro.write(0u8); + cmd_e.write(0x11u8); + respiro.write(0u8); + // ICW2 — el remapeo en si: desplazar los vectores lejos de 0..31. + dat_m.write(OFFSET_MAESTRO); + respiro.write(0u8); + dat_e.write(OFFSET_ESCLAVO); + respiro.write(0u8); + // ICW3 — declarar el cableado de la cascada (el esclavo en la IRQ2). + dat_m.write(0b0000_0100u8); + respiro.write(0u8); + dat_e.write(0b0000_0010u8); + respiro.write(0u8); + // ICW4 — modo 8086. + dat_m.write(0x01u8); + respiro.write(0u8); + dat_e.write(0x01u8); + respiro.write(0u8); + // Mascaras: el maestro deja pasar la IRQ0 (temporizador) y la IRQ1 + // (teclado); todo lo demas, en silencio hasta que renaser lo reclame. + dat_m.write(0b1111_1100u8); + dat_e.write(0b1111_1111u8); + } +} + +/// Programa el canal 0 del PIT para que emita la IRQ0 a `frecuencia_hz`. +fn configurar_temporizador(frecuencia_hz: u32) { + let divisor = (PIT_BASE_HZ / frecuencia_hz) as u16; + // SEGURIDAD: 0x43 y 0x40 son los puertos estandar del PIT en el PC. + unsafe { + let mut comando = Port::::new(PIT_COMANDO); + let mut canal0 = Port::::new(PIT_CANAL0); + // Canal 0, acceso lobyte+hibyte, modo 3 (generador de onda cuadrada). + comando.write(0x36u8); + canal0.write((divisor & 0xFF) as u8); + canal0.write((divisor >> 8) as u8); + } +} + +/// Notifica al PIC el «fin de interrupcion» de la IRQ recien atendida. Sin +/// este aviso, el PIC jamas volveria a emitir esa interrupcion. +pub fn fin_de_interrupcion(vector: u8) { + // SEGURIDAD: enviar EOI al puerto de comandos del PIC tras atender su IRQ + // es el cierre obligatorio del protocolo del 8259. + unsafe { + // Si la IRQ provino del esclavo, ambos PIC deben recibir el EOI. + if vector >= OFFSET_ESCLAVO { + Port::::new(CMD_ESCLAVO).write(EOI); + } + Port::::new(CMD_MAESTRO).write(EOI); + } +} + +/// Vector de la IDT que corresponde a una linea de IRQ (0..15). El remapeo dejo +/// las 16 lineas del par 8259 en vectores contiguos desde `OFFSET_MAESTRO`: la +/// IRQ8 cae en `OFFSET_ESCLAVO`, que es justo `OFFSET_MAESTRO + 8`. +pub fn vector_irq(irq: u8) -> u8 { + OFFSET_MAESTRO + irq +} + +/// Levanta la mascara de una linea de IRQ — el PIC empezara a emitirla. Si la +/// linea vive en el PIC esclavo (8..15), abre tambien la cascada del maestro +/// (la IRQ2), sin la cual el esclavo jamas alcanzaria a la CPU. +/// +/// Debe invocarse en el arranque, antes de habilitar las interrupciones. +pub fn desenmascarar(irq: u8) { + // SEGURIDAD: 0x21 y 0xA1 son los puertos de mascara del par 8259 en la + // arquitectura PC; leer-modificar-escribir es la via de tocar una linea + // sola sin perturbar a las demas. + unsafe { + if irq < 8 { + let mut datos = Port::::new(DATOS_MAESTRO); + let mascara = datos.read(); + datos.write(mascara & !(1 << irq)); + } else { + let mut datos_e = Port::::new(DATOS_ESCLAVO); + let mascara_e = datos_e.read(); + datos_e.write(mascara_e & !(1 << (irq - 8))); + // La cascada: el esclavo entrega sus IRQ al maestro por la IRQ2. + let mut datos_m = Port::::new(DATOS_MAESTRO); + let mascara_m = datos_m.read(); + datos_m.write(mascara_m & !(1 << 2)); + } + } +} diff --git a/renaser/kernel/src/sync.rs b/renaser/kernel/src/sync.rs new file mode 100644 index 0000000..5af3f1c --- /dev/null +++ b/renaser/kernel/src/sync.rs @@ -0,0 +1,29 @@ +// ============================================================================= +// renaser :: kernel/src/sync.rs — la celda de inicializacion unica +// ----------------------------------------------------------------------------- +// Las estructuras globales del kernel (GDT, TSS, IDT, el heap...) nacen una +// sola vez, durante el arranque secuencial y de un solo hilo, y despues solo +// se leen. `CeldaSync` envuelve ese unico `unsafe` en una abstraccion comun: +// un contrato de unicidad que el codigo de arranque garantiza por construccion. +// ============================================================================= + +use core::cell::UnsafeCell; + +/// Celda `Sync` para estado global de inicializacion unica. +pub(crate) struct CeldaSync(UnsafeCell); + +// SEGURIDAD: cada celda se escribe una sola vez, durante el arranque, antes de +// que existan interrupciones o concurrencia; despues es de solo lectura. +unsafe impl Sync for CeldaSync {} + +impl CeldaSync { + /// Crea una celda con su valor inicial. + pub(crate) const fn nueva(valor: T) -> Self { + CeldaSync(UnsafeCell::new(valor)) + } + + /// Puntero crudo al contenido. Quien lo usa asume el contrato de unicidad. + pub(crate) fn puntero(&self) -> *mut T { + self.0.get() + } +} diff --git a/renaser/kernel/src/texto.rs b/renaser/kernel/src/texto.rs new file mode 100644 index 0000000..9f71bea --- /dev/null +++ b/renaser/kernel/src/texto.rs @@ -0,0 +1,36 @@ +// ============================================================================= +// renaser :: kernel/src/texto.rs — Fase 3 :: el texto como caso del dibujo +// ----------------------------------------------------------------------------- +// Con el heap activo, el texto deja de ser un mapa de bits estatico. Una +// tipografia vectorial se empotra en el binario y se rasteriza glifo a glifo, +// bajo demanda: el texto se vuelve, literalmente, un caso particular del +// dibujo — la promesa fundacional de renaser. +// ============================================================================= + +use alloc::vec::Vec; + +use fontdue::{Font, FontSettings, Metrics}; +use spin::Once; + +/// La tipografia vectorial, empotrada en el propio binario del kernel. +static FUENTE_TTF: &[u8] = include_bytes!("../assets/font.ttf"); + +/// La fuente ya analizada. Se funde una sola vez, tras activar el heap. +static FUENTE: Once = Once::new(); + +/// Analiza la tipografia empotrada. Requiere el heap ya activo. +pub fn init() { + FUENTE.call_once(|| { + Font::from_bytes(FUENTE_TTF, FontSettings::default()) + .expect("renaser :: la tipografia empotrada es invalida") + }); +} + +/// Rasteriza un glifo al vuelo: devuelve sus metricas de colocacion y un mapa +/// de cobertura (un byte de opacidad, 0..=255, por cada pixel del glifo). +pub fn rasterizar(caracter: char, tam_px: f32) -> (Metrics, Vec) { + FUENTE + .get() + .expect("renaser :: la tipografia no fue fundida") + .rasterize(caracter, tam_px) +} diff --git a/renaser/kernel/src/wasm/env.rs b/renaser/kernel/src/wasm/env.rs new file mode 100644 index 0000000..bbed9d1 --- /dev/null +++ b/renaser/kernel/src/wasm/env.rs @@ -0,0 +1,349 @@ +// ============================================================================= +// renaser :: kernel/src/wasm/env.rs — Fase 4/5/6 :: la matriz de capacidades +// ----------------------------------------------------------------------------- +// El aislamiento de renaser no descansa en `int 0x80` ni en `sysenter`: no hay +// vectores de syscall. Una aplicacion WASM solo puede hacer aquello para lo +// que el kernel le haya inyectado una FUNCION DEL HOST. Esta matriz concede: +// +// * sys_render_frame — componer un fotograma en su region de pantalla; +// * sys_get_scancode — consultar su canal de teclado; +// * sys_object_put — grabar un objeto en el grafo (Fase 6.1c); +// * sys_object_datos — leer la carga util de un objeto; +// * sys_object_hijo — recorrer las aristas del DAG; +// * sys_object_raiz — leer la raiz del grafo; +// * sys_object_fijar_raiz — coronar un objeto como raiz. +// +// 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 +// el runtime lo haga; se verifica aqui, antes de leer o escribir un solo byte. +// +// DOS CLASES DE FALLO. Un puntero fuera de limites es CULPA DE LA APP: se +// devuelve un `Error` que la ABORTA (el kernel la captura y la desaloja). Un +// fallo del almacenamiento —disco, objeto inexistente— NO es culpa de la app: +// se le devuelve un codigo de error negativo, y la app decide que hacer. +// ============================================================================= + +use wasmi::{Caller, Error, Extern, Linker, Memory, StoreLimits}; + +use crate::almacen::Hash; +use crate::async_system::teclado::CanalTeclado; +use crate::grafico::RegionPantalla; + +/// El estado del host adscrito al `Store` de una aplicacion: cuanto necesita +/// una capacidad para servir a ESA app y a ninguna otra — su region de pantalla, +/// su canal de teclado y sus cuotas de recursos. Dos apps jamas comparten nada. +pub(crate) struct ContextoCapacidades { + /// La sub-region de pantalla asignada a la aplicacion. + pub(crate) region: RegionPantalla, + /// El canal de teclado propio de la aplicacion. + pub(crate) canal: CanalTeclado, + /// El techo de recursos de la aplicacion — hoy, su memoria lineal maxima. + /// `wasmi` lo consulta en cada `memory.grow` via `Store::limiter`. + pub(crate) limites: StoreLimits, +} + +/// Recupera la memoria lineal exportada por el modulo. Que no la exporte es un +/// modulo mal formado: se aborta. +fn obtener_memoria(caller: &Caller<'_, ContextoCapacidades>) -> Result { + caller + .get_export("memory") + .and_then(Extern::into_memory) + .ok_or_else(|| Error::new("WASM :: el modulo no exporta su memoria lineal")) +} + +/// VALIDACION INFRANQUEABLE DE LIMITES. Comprueba que `[ptr, ptr + len)` cae +/// entera dentro de la memoria lineal `m` y devuelve ese sub-slice. Un rango +/// que se desborde aborta la app — el `Error` se traduce en una trampa de WASM. +fn rango<'a>(m: &'a [u8], ptr: u32, len: usize, fallo: &'static str) -> Result<&'a [u8], Error> { + let inicio = ptr as usize; + match inicio.checked_add(len) { + Some(fin) if fin <= m.len() => Ok(&m[inicio..fin]), + _ => Err(Error::new(fallo)), + } +} + +/// Lee un hash de 32 bytes de la memoria lineal, con sus limites verificados. +fn leer_hash(m: &[u8], ptr: u32, fallo: &'static str) -> Result { + let bytes = rango(m, ptr, 32, fallo)?; + let mut hash = [0u8; 32]; + hash.copy_from_slice(bytes); + Ok(hash) +} + +/// Inyecta en el enlazador la matriz de capacidades del modulo WASM. Todo lo +/// que no se defina aqui le queda, al modulo, fisicamente fuera de alcance. +/// +/// Devuelve `Err` si una capacidad no se pudo enlazar — un fallo del kernel, +/// no de la app; aun asi se propaga como `Result` para no incendiar nada. +pub(crate) fn enlazar_capacidades( + enlazador: &mut Linker, +) -> Result<(), Error> { + // --- CAPACIDAD 1 :: sys_render_frame(ptr, len) --- + // El modulo entrega (ptr, len) hacia su PROPIA memoria lineal; el kernel + // valida esos limites y, solo entonces, compone el fotograma DENTRO de la + // region asignada a la app. + enlazador.func_wrap( + "renaser", + "sys_render_frame", + |caller: Caller<'_, ContextoCapacidades>, ptr: u32, len: u32| -> Result<(), Error> { + let region = caller.data().region; + + // El fotograma debe medir EXACTAMENTE los pixeles de la region. Un + // tamaño distinto delata a una app que pinta fuera de su ventana: + // se aborta antes de tocar un byte. + let esperado = region.pixeles() * 4; + if len as usize != esperado { + return Err(Error::new( + "WASM :: sys_render_frame con un fotograma ajeno a la region asignada", + )); + } + + let memoria = obtener_memoria(&caller)?; + let datos: &[u8] = memoria.data(&caller); + + // VALIDACION INFRANQUEABLE: si (ptr, len) se sale de la memoria + // lineal del modulo, se aborta la app —no el kernel—. + let marco = rango( + datos, + ptr, + len as usize, + "WASM :: sys_render_frame desbordo la memoria lineal del modulo", + )?; + + // Limites verificados: la region es segura de leer y componer. + crate::volcar_marco_wasm(region, marco); + Ok(()) + }, + )?; + + // --- CAPACIDAD 2 :: sys_get_scancode() -> u32 --- + // Expone, sin bloquear, el siguiente scancode del canal PROPIO de la app. + enlazador.func_wrap( + "renaser", + "sys_get_scancode", + |caller: Caller<'_, ContextoCapacidades>| -> u32 { + caller.data().canal.pop().unwrap_or(0) as u32 + }, + )?; + + // --- CAPACIDAD 3 :: sys_object_put(datos, datos_len, hijos, hijos_cnt, salida) -> i32 --- + // Graba un objeto en el grafo. El modulo entrega, en su memoria lineal, la + // carga util y un arreglo de `hijos_cnt` hashes de 32 bytes (las aristas). + // El kernel escribe el hash resultante —la identidad del objeto— en + // `salida`. Devuelve 0 si el objeto se grabo (o ya existia), -1 si el + // almacenamiento fallo. + enlazador.func_wrap( + "renaser", + "sys_object_put", + |mut caller: Caller<'_, ContextoCapacidades>, + datos_ptr: u32, + datos_len: u32, + hijos_ptr: u32, + hijos_cnt: u32, + salida: u32| + -> Result { + let memoria = obtener_memoria(&caller)?; + + // --- Leer las entradas de la memoria lineal, con limites firmes. --- + let (datos, hijos) = { + let m = memoria.data(&caller); + + let datos = rango( + m, + datos_ptr, + datos_len as usize, + "WASM :: sys_object_put desbordo la memoria lineal (datos)", + )? + .to_vec(); + + // El arreglo de hijos: `hijos_cnt` hashes contiguos de 32 bytes. + let bytes_hijos = (hijos_cnt as usize).checked_mul(32).ok_or_else(|| { + Error::new("WASM :: sys_object_put con un conteo de hijos imposible") + })?; + let crudo = rango( + m, + hijos_ptr, + bytes_hijos, + "WASM :: sys_object_put desbordo la memoria lineal (hijos)", + )?; + let mut hijos: alloc::vec::Vec = + alloc::vec::Vec::with_capacity(hijos_cnt as usize); + for trozo in crudo.chunks_exact(32) { + let mut h = [0u8; 32]; + h.copy_from_slice(trozo); + hijos.push(h); + } + + // Verificar que el hash de salida cabe ANTES de tocar el disco. + rango( + m, + salida, + 32, + "WASM :: sys_object_put desbordo la memoria lineal (salida)", + )?; + + (datos, hijos) + }; + + // --- Grabar. Un fallo del almacen NO es culpa de la app: -1. --- + match crate::almacen::almacenar(datos, hijos) { + Ok(hash) => { + let m = memoria.data_mut(&mut caller); + m[salida as usize..salida as usize + 32].copy_from_slice(&hash); + Ok(0) + } + Err(_) => Ok(-1), + } + }, + )?; + + // --- CAPACIDAD 4 :: sys_object_datos(hash, salida, capacidad) -> i32 --- + // Copia la carga util del objeto `hash` en `salida`. Devuelve el numero de + // bytes copiados, o -1 si el objeto no existe, -2 si `capacidad` no basta, + // -3 si el almacenamiento fallo. + enlazador.func_wrap( + "renaser", + "sys_object_datos", + |mut caller: Caller<'_, ContextoCapacidades>, + hash_ptr: u32, + salida: u32, + capacidad: u32| + -> Result { + let memoria = obtener_memoria(&caller)?; + + let hash = { + let m = memoria.data(&caller); + leer_hash( + m, + hash_ptr, + "WASM :: sys_object_datos desbordo la memoria lineal (hash)", + )? + }; + + let objeto = match crate::almacen::recuperar(&hash) { + Ok(Some(objeto)) => objeto, + Ok(None) => return Ok(-1), + Err(_) => return Ok(-3), + }; + if objeto.datos.len() > capacidad as usize { + return Ok(-2); + } + + // Verificar que el destino cabe, y solo entonces copiar. + { + let m = memoria.data(&caller); + rango( + m, + salida, + objeto.datos.len(), + "WASM :: sys_object_datos desbordo la memoria lineal (salida)", + )?; + } + let n = objeto.datos.len(); + let m = memoria.data_mut(&mut caller); + m[salida as usize..salida as usize + n].copy_from_slice(&objeto.datos); + Ok(n as i32) + }, + )?; + + // --- CAPACIDAD 5 :: sys_object_hijo(hash, indice, salida) -> i32 --- + // Recorre las aristas del DAG. Devuelve el NUMERO de hijos del objeto + // `hash`; si `indice` es valido, ademas escribe el hash de ese hijo en + // `salida`. Devuelve -1 si el objeto no existe, -3 si el almacen fallo. + enlazador.func_wrap( + "renaser", + "sys_object_hijo", + |mut caller: Caller<'_, ContextoCapacidades>, + hash_ptr: u32, + indice: u32, + salida: u32| + -> Result { + let memoria = obtener_memoria(&caller)?; + + let hash = { + let m = memoria.data(&caller); + leer_hash( + m, + hash_ptr, + "WASM :: sys_object_hijo desbordo la memoria lineal (hash)", + )? + }; + + let objeto = match crate::almacen::recuperar(&hash) { + Ok(Some(objeto)) => objeto, + Ok(None) => return Ok(-1), + Err(_) => return Ok(-3), + }; + let total = objeto.hijos.len(); + + // Si el indice apunta a un hijo real, entregar su hash. + if let Some(hijo) = objeto.hijos.get(indice as usize) { + { + let m = memoria.data(&caller); + rango( + m, + salida, + 32, + "WASM :: sys_object_hijo desbordo la memoria lineal (salida)", + )?; + } + let m = memoria.data_mut(&mut caller); + m[salida as usize..salida as usize + 32].copy_from_slice(hijo); + } + Ok(total as i32) + }, + )?; + + // --- CAPACIDAD 6 :: sys_object_raiz(salida) -> i32 --- + // Escribe en `salida` el hash de la raiz del grafo. Devuelve 1 si hay + // raiz, 0 si el grafo aun no tiene ninguna. + enlazador.func_wrap( + "renaser", + "sys_object_raiz", + |mut caller: Caller<'_, ContextoCapacidades>, salida: u32| -> Result { + let memoria = obtener_memoria(&caller)?; + match crate::almacen::raiz() { + Some(hash) => { + { + let m = memoria.data(&caller); + rango( + m, + salida, + 32, + "WASM :: sys_object_raiz desbordo la memoria lineal (salida)", + )?; + } + let m = memoria.data_mut(&mut caller); + m[salida as usize..salida as usize + 32].copy_from_slice(&hash); + Ok(1) + } + None => Ok(0), + } + }, + )?; + + // --- CAPACIDAD 7 :: sys_object_fijar_raiz(hash) -> i32 --- + // Corona el objeto `hash` como raiz del grafo. Devuelve 0 si se logro, -3 + // si el almacenamiento fallo. + enlazador.func_wrap( + "renaser", + "sys_object_fijar_raiz", + |caller: Caller<'_, ContextoCapacidades>, hash_ptr: u32| -> Result { + let memoria = obtener_memoria(&caller)?; + let hash = { + let m = memoria.data(&caller); + leer_hash( + m, + hash_ptr, + "WASM :: sys_object_fijar_raiz desbordo la memoria lineal (hash)", + )? + }; + match crate::almacen::fijar_raiz(hash) { + Ok(()) => Ok(0), + Err(_) => Ok(-3), + } + }, + )?; + + Ok(()) +} diff --git a/renaser/kernel/src/wasm/mod.rs b/renaser/kernel/src/wasm/mod.rs new file mode 100644 index 0000000..5710331 --- /dev/null +++ b/renaser/kernel/src/wasm/mod.rs @@ -0,0 +1,200 @@ +// ============================================================================= +// renaser :: kernel/src/wasm — Fase 4/5 :: el escudo de aislamiento (WASM) +// ----------------------------------------------------------------------------- +// Aqui renaser sustituye las costosas fronteras de hardware (la MMU, los +// anillos de la CPU) por limites MATEMATICOS sobre el bytecode. Una aplicacion +// WebAssembly se ejecuta en su propia memoria lineal; sus unicas puertas al +// exterior son las capacidades que el enlazador del host le concede. Lo que +// no este importado no existe: no hay camino fisico para ejecutarlo. +// +// FASE 5 :: el aislamiento deja de ser solo ESPACIAL (memoria) y pasa a ser +// tambien TEMPORAL (tiempo de CPU). Cada `tick` se ejecuta con un presupuesto +// estricto de COMBUSTIBLE (fuel): si una app lo agota —un bucle infinito, un +// trabajo desmedido—, el runtime lanza una trampa, el kernel recupera el mando +// y la desaloja. Ningun modulo, por discolo que sea, secuestra el procesador. +// ============================================================================= + +pub mod env; + +use wasmi::{ + CompilationMode, Config, Engine, Linker, Module, Store, StoreLimitsBuilder, TrapCode, TypedFunc, +}; + +use crate::grafico::{Color, RegionPantalla}; +use env::ContextoCapacidades; + +/// Combustible concedido a `init`. Cubre con holgura el pintado inicial del +/// fondo de una region a pantalla casi completa — un gasto unico, de arranque. +const FUEL_ARRANQUE: u64 = 20_000_000; + +/// Combustible concedido a cada `tick`. Sobra para un fotograma honesto (unos +/// cientos de miles de operaciones); una app en bucle infinito lo agota en +/// milisegundos y es desalojada. Este numero ES el techo temporal del userspace. +const FUEL_FOTOGRAMA: u64 = 2_000_000; + +/// Techo de memoria lineal por aplicacion: 4 MiB. Un modulo que intente crecer +/// su memoria mas alla es desalojado — el aislamiento ESPACIAL del userspace, +/// gemelo del techo TEMPORAL que impone el combustible. +const TECHO_MEMORIA: usize = 4 * 1024 * 1024; + +/// Por que el kernel da por terminada —desaloja— una aplicacion WASM. +#[derive(Clone, Copy)] +pub enum FallaApp { + /// El modulo no se pudo cargar, validar, enlazar o instanciar. + Carga, + /// La aplicacion agoto su combustible dentro de un `tick`: bucle infinito + /// o trabajo desmedido. El guardarrail TEMPORAL en accion. + SinCombustible, + /// La aplicacion intento crecer su memoria lineal mas alla de su cuota. + /// El guardarrail ESPACIAL en accion. + SinMemoria, + /// La aplicacion ejecuto una trampa: acceso fuera de limites, instruccion + /// `unreachable`, una capacidad violada... su propio codigo la abortó. + Trampa, +} + +impl FallaApp { + /// El color de la baliza de desalojo segun la causa de la falla: amarillo + /// palido si reviento su techo de memoria, purpura para cualquier otra. + pub fn color_baliza(self) -> Color { + match self { + FallaApp::SinMemoria => Color::DESALOJO_MEMORIA, + _ => Color::DESALOJO, + } + } +} + +/// Una aplicacion WebAssembly viva: su estado PERSISTE entre fotogramas. A +/// diferencia de la Fase 4 —que instanciaba y cedia el control de un gesto—, +/// aqui la instancia se conserva y el kernel la hace avanzar `tick` a `tick`. +pub struct AplicacionWasm { + /// El almacen: todo el estado de ESTA instancia — su memoria lineal, sus + /// globales y el contexto de capacidades con su region de pantalla. + almacen: Store, + /// El punto de entrada de fotograma, ya resuelto y con seguridad de tipos. + /// `TypedFunc` es un asa autosuficiente dentro del `Store`: conservada esta, + /// el handle de la `Instance` no aporta nada y no se retiene. + func_tick: TypedFunc<(), ()>, + /// La region de pantalla de la app — su ventana, y donde se tatua su baliza + /// de desalojo si llega a fallar. + region: RegionPantalla, +} + +impl AplicacionWasm { + /// Carga, valida, instancia y arranca una aplicacion WASM aislada, ligada a + /// una region de pantalla. Si algo falla en el camino, se devuelve la falla + /// en lugar de incendiar el kernel. + /// + /// El nuevo ABI del userspace exige dos exportaciones: `init` —invocada una + /// sola vez, aqui— y `tick` —un fotograma de trabajo, invocada despues por + /// el reactor en cada pulso del reloj. + pub fn cargar(bytecode: &[u8], region: RegionPantalla) -> Result { + // 1. El motor, con metricas de combustible y compilacion ANTICIPADA: la + // traduccion del modulo ocurre ahora, de modo que el `fuel` mida + // despues solo EJECUCION, jamas compilacion diferida. + let mut config = Config::default(); + config.consume_fuel(true); + config.compilation_mode(CompilationMode::Eager); + let motor = Engine::new(&config); + + // 2. Validar y traducir el modulo — ya instrumentado con fuel. + let modulo = Module::new(&motor, bytecode).map_err(|_| FallaApp::Carga)?; + + // 3. El almacen, con el contexto de capacidades de ESTA app: su region + // de pantalla, su canal de teclado y su techo de memoria. El canal + // se crea ahora pero se inscribe en la difusion de la IRQ1 al final, + // ya con la app cargada: una carga fallida no deja canales huerfanos. + let canal = crate::async_system::teclado::crear_canal(); + let limites = StoreLimitsBuilder::new() + .memory_size(TECHO_MEMORIA) + // Una expansion denegada se convierte en TRAMPA, no en un -1 que la + // app pudiera ignorar: asi el kernel la captura y la desaloja. + .trap_on_grow_failure(true) + .build(); + let mut almacen = Store::new( + &motor, + ContextoCapacidades { + region, + canal, + limites, + }, + ); + // Ligar el limitador de recursos: `wasmi` lo consultara en cada + // `memory.grow`, tambien durante la instanciacion. + almacen.limiter(|contexto| &mut contexto.limites); + // Dotar de combustible ANTES de instanciar: la instanciacion no debe + // quedarse a cero y abortar. + almacen.set_fuel(FUEL_ARRANQUE).map_err(|_| FallaApp::Carga)?; + + // 4. El enlazador y la matriz de capacidades (ver `env`). + let mut enlazador: Linker = Linker::new(&motor); + env::enlazar_capacidades(&mut enlazador).map_err(|_| FallaApp::Carga)?; + + // 5. Instanciar, resolviendo las importaciones contra las capacidades. + let instancia = enlazador + .instantiate_and_start(&mut almacen, &modulo) + .map_err(|_| FallaApp::Carga)?; + + // 6. Resolver los dos puntos del ABI de fotograma: `init` y `tick`. + let func_init = instancia + .get_typed_func::<(), ()>(&almacen, "init") + .map_err(|_| FallaApp::Carga)?; + let func_tick = instancia + .get_typed_func::<(), ()>(&almacen, "tick") + .map_err(|_| FallaApp::Carga)?; + + // 7. Arranque unico: `init` prepara el estado inicial de la aplicacion. + almacen.set_fuel(FUEL_ARRANQUE).map_err(|_| FallaApp::Carga)?; + func_init + .call(&mut almacen, ()) + .map_err(|_| FallaApp::Carga)?; + + // 8. Con la app ya cargada e instanciada, inscribir su canal de teclado + // en la difusion de la IRQ1: desde aqui recibe cada pulsacion. + crate::async_system::teclado::registrar_canal(&almacen.data().canal); + + Ok(AplicacionWasm { + almacen, + func_tick, + region, + }) + } + + /// Hace avanzar la aplicacion un fotograma. Recarga su presupuesto de + /// combustible y le cede el control con `tick`. Si la app lo agota o ejecuta + /// una trampa, el kernel recupera el mando y la falla se devuelve para que + /// la tarea proceda al desalojo. El kernel nunca pierde el control. + pub fn tick(&mut self) -> Result<(), FallaApp> { + // Recargar el deposito: cada fotograma parte con su techo intacto. + self.almacen + .set_fuel(FUEL_FOTOGRAMA) + .map_err(|_| FallaApp::Trampa)?; + + match self.func_tick.call(&mut self.almacen, ()) { + Ok(()) => Ok(()), + // `as_trap_code` da un codigo publico y univoco para cada causa: + // `OutOfFuel` pliega toda variante de agotamiento de combustible; + // `GrowthOperationLimited` es la cuota de memoria denegada. + Err(error) => match error.as_trap_code() { + Some(TrapCode::OutOfFuel) => Err(FallaApp::SinCombustible), + Some(TrapCode::GrowthOperationLimited) => Err(FallaApp::SinMemoria), + _ => Err(FallaApp::Trampa), + }, + } + } + + /// La region de pantalla asignada a la aplicacion. + pub fn region(&self) -> RegionPantalla { + self.region + } +} + +/// Reconciliacion del ciclo de vida. Cuando una `AplicacionWasm` muere —porque +/// fue desalojada y su tarea concluyo—, su canal de teclado debe darse de baja +/// de la difusion de la IRQ1. Sin esto, el manejador de interrupciones seguiria +/// empujando scancodes a una cola muerta: una fuga lenta pero segura. +impl Drop for AplicacionWasm { + fn drop(&mut self) { + crate::async_system::teclado::cerrar_canal(&self.almacen.data().canal); + } +} diff --git a/renaser/rust-toolchain.toml b/renaser/rust-toolchain.toml new file mode 100644 index 0000000..84f180a --- /dev/null +++ b/renaser/rust-toolchain.toml @@ -0,0 +1,14 @@ +# ============================================================================= +# renaser :: fijacion del toolchain +# ----------------------------------------------------------------------------- +# Nightly por dos razones que PERSISTEN: las dependencias de artefacto +# (`-Zbindeps`) y el script de construccion de la crate `bootloader`, que +# compila su propio cargador UEFI/BIOS y necesita `rust-src` + `llvm-tools`. +# El kernel en si ya NO necesita `build-std`: usa el target nativo precompilado. +# ============================================================================= + +[toolchain] +channel = "nightly" +components = ["rust-src", "llvm-tools", "rustfmt", "clippy"] +targets = ["x86_64-unknown-none", "x86_64-unknown-uefi"] +profile = "minimal"