tawasuyu

tawasuyu/brahman

Rust 332TOML 127JSON 17Markdown 154710 Definitions

⎇ 6e30dc2d7288b691aec553b8261f818c6f9dbba9 renaser/kernel/src/sync.rs Rust · 29 lines · 1.3 KB History Who touched what raw

feat: integra renaser (kernel SASOS bare-metal) al monorepo e2272c0ed · sergio ·

1// =============================================================================
2//  renaser :: kernel/src/sync.rs — la celda de inicializacion unica
3// -----------------------------------------------------------------------------
4//  Las estructuras globales del kernel (GDT, TSS, IDT, el heap...) nacen una
5//  sola vez, durante el arranque secuencial y de un solo hilo, y despues solo
6//  se leen. `CeldaSync` envuelve ese unico `unsafe` en una abstraccion comun:
7//  un contrato de unicidad que el codigo de arranque garantiza por construccion.
8// =============================================================================
9
10use core::cell::UnsafeCell;
11
12/// Celda `Sync` para estado global de inicializacion unica.
13pub(crate) struct CeldaSync<T>(UnsafeCell<T>);
14
15// SEGURIDAD: cada celda se escribe una sola vez, durante el arranque, antes de
16// que existan interrupciones o concurrencia; despues es de solo lectura.
17unsafe impl<T> Sync for CeldaSync<T> {}
18
19impl<T> CeldaSync<T> {
20    /// Crea una celda con su valor inicial.
21    pub(crate) const fn nueva(valor: T) -> Self {
22        CeldaSync(UnsafeCell::new(valor))
23    }
24
25    /// Puntero crudo al contenido. Quien lo usa asume el contrato de unicidad.
26    pub(crate) fn puntero(&self) -> *mut T {
27        self.0.get()
28    }
29}