feat: implement capability-based memory management foundation
This commit is contained in:
29
kernel/src/cap/object.rs
Normal file
29
kernel/src/cap/object.rs
Normal file
@@ -0,0 +1,29 @@
|
||||
use crate::mem::address::PhysAddr;
|
||||
use core::sync::atomic::{AtomicUsize, Ordering};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum ObjectType {
|
||||
Untyped,
|
||||
Frame,
|
||||
CNode,
|
||||
ThreadBlock,
|
||||
PageTable,
|
||||
}
|
||||
|
||||
pub struct KernelObject {
|
||||
pub phys_addr: PhysAddr,
|
||||
pub size_bits: u8,
|
||||
pub obj_type: ObjectType,
|
||||
pub ref_count: AtomicUsize,
|
||||
pub owner_id: u64,
|
||||
}
|
||||
|
||||
impl KernelObject {
|
||||
pub fn add_ref(&self) {
|
||||
self.ref_count.fetch_add(1, Ordering::Relaxed);
|
||||
}
|
||||
|
||||
pub fn release(&self) -> bool {
|
||||
self.ref_count.fetch_sub(1, Ordering::Release) == 1
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user