akern-gkgoat-fork/kernel/src/messaging.rs

68 lines
1.4 KiB
Rust
Raw Normal View History

//! Interprocess communication.
2022-03-02 08:38:22 -06:00
use crate::{proccess::PID, time::Time};
/// 128 Bytes
pub type Tiny = [u8; 128];
2022-03-02 08:38:22 -06:00
/// 1 KiB
pub type Small = [u8; 1024];
2022-03-02 08:38:22 -06:00
/// 65.536 KiB
pub type Medium = [u8; 65536];
/// 1MiB
pub type Large = [u8; 1048576];
/// 16MiB
pub type Huge = [u8; 16777216];
/// An internal message to be held in a process message
pub enum Message {
/// A Tiny message
///
/// The message is 128 bytes long
Tiny(Tiny),
/// A Small message
///
/// The message is 1 KiB long
Small(Small),
/// A Medium message
///
/// The message is 65.536 KiB long
Medium(Medium),
/// A Large message
///
/// The message is 1 MiB long
Large(Large),
/// A Huge message
///
/// The message is 16 MiB long
Huge(Huge),
}
/// A message that can be sent between processes
pub struct ProcessMessage {
/// The sender of the message
pub to_pid: PID,
/// The receiver of the message
pub from_pid: PID,
/// The message
pub message: Message,
/// The time the message was sent
pub sender_time: Time,
/// The time the message was received
pub receiver_time: Time,
}
#[derive(Debug)]
/// An enum of all possible errors that can occur when sending a message
pub enum MessagingError {
/// The message is too large to be sent
MessageTooLarge,
/// The reciever of the message is not valid
ProcessNonExistant,
2022-03-07 12:21:16 -06:00
/// The message Queue is full
TooManyMessages,
}