feat: integra renaser (kernel SASOS bare-metal) al monorepo
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 <noreply@anthropic.com>
This commit is contained in:
Generated
+7
@@ -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"
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user