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:
sergio
2026-05-22 14:37:14 +00:00
parent 1c6aafbc24
commit e2272c0ed3
55 changed files with 6668 additions and 0 deletions
+42
View File
@@ -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<RegionHeap> = 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::<u8>();
// 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);
}
}
+11
View File
@@ -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;