Skip to main content

SystemState

Struct SystemState 

Source
pub struct SystemState {
    pub now: Option<Instant>,
    pub scheduled_wakers: ScheduledWakerQueue,
    pub times: CpuTimes,
    pub executor: Option<Rc<dyn Executor>>,
    pub processes: BTreeMap<Pid, Process>,
    pub foreground: Option<Pid>,
    pub file_system: FileSystem,
    pub home_dirs: HashMap<String, PathBuf>,
    pub path: UnixString,
}
Expand description

State of the virtual system

Fields§

§now: Option<Instant>

Current time

To make sure scheduled wakers are woken up at the right time, use advance_time to update the current time instead of directly modifying this field.

§scheduled_wakers: ScheduledWakerQueue

Priority queue of wakers scheduled to be woken up at specific times

§times: CpuTimes

Consumed CPU time statistics

§executor: Option<Rc<dyn Executor>>

Task manager that can execute asynchronous tasks

The virtual system uses this executor to run (virtual) child processes. If executor is None, VirtualSystem::new_child_process will fail.

§processes: BTreeMap<Pid, Process>

Processes running in the system

§foreground: Option<Pid>

Process group ID of the foreground process group

Note: The current implementation does not support the notion of controlling terminals and sessions. This item may be replaced with a more correct implementation in the future.

§file_system: FileSystem

Collection of files existing in the virtual system

§home_dirs: HashMap<String, PathBuf>

Map from user names to their home directory paths

VirtualSystem::getpwnam_dir looks up its argument in this dictionary.

§path: UnixString

Standard path returned by VirtualSystem::confstr_path

Implementations§

Source§

impl SystemState

Source

pub fn advance_time(&mut self, new_current_time: Instant)

Sets the current time to new_current_time and wakes up any wakers scheduled to be woken up by that time.

Source

pub fn select_all(_: &RefCell<Self>)

👎Deprecated since 0.13.0:

you no longer need to call this function manually

Does nothing.

This function is a no-op and is only provided for backward compatibility. It is not necessary to call this function manually, as virtual processes are now automatically woken up when they are ready to make progress. If you have existing code that calls this function, you can safely remove those calls.

This function used to perform select on all processes in the system.

Trait Implementations§

Source§

impl Clone for SystemState

Source§

fn clone(&self) -> SystemState

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SystemState

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SystemState

Source§

fn default() -> SystemState

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.