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:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user