Merge branch 'thread_scheduler' of gitlab.istic.univ-rennes1.fr:simpleos/burritos into thread_scheduler

This commit is contained in:
François Autin 2023-03-13 15:09:50 +01:00
commit 5b4683c736
No known key found for this signature in database
GPG Key ID: 343F5D382E1DD77C
3 changed files with 31 additions and 1 deletions

View File

@ -30,6 +30,7 @@ impl<'a> System<'a> {
} }
} }
/// use thread_manager setter to send it system instance
pub fn freeze(&'a mut self) { pub fn freeze(&'a mut self) {
self.thread_manager.system.set(Option::Some(self)); self.thread_manager.system.set(Option::Some(self));
} }

View File

@ -1,5 +1,16 @@
#![warn(missing_docs)]
#![warn(clippy::missing_docs_in_private_items)]
//! Crate burritos ((BurritOS Using Rust Really Improves The Operating System)
//!
//! Burritos is an educational operating system written in Rust
//! running on RISC-V emulator.
/// Contain hardware simulated part of the machine
mod simulator; mod simulator;
mod kernel; mod kernel;
/// module containing useful tools which can be use in most part of the OS to ease the development of the OS
pub mod utility; pub mod utility;
use kernel::system::System; use kernel::system::System;
@ -7,5 +18,6 @@ use simulator::machine::Machine;
fn main() { fn main() {
let machine = Machine::init_machine(); let machine = Machine::init_machine();
let _system = System::new(machine); let mut system = System::new(machine);
system.freeze();
} }

View File

@ -1,9 +1,13 @@
/// Data structure and definition of a genericsingle-linked LIFO list.
///
/// This is a
#[derive(PartialEq)] #[derive(PartialEq)]
pub struct List<T: PartialEq> { pub struct List<T: PartialEq> {
head: Link<T>, head: Link<T>,
} }
type Link<T> = Option<Box<Node<T>>>; type Link<T> = Option<Box<Node<T>>>;
#[derive(PartialEq)] #[derive(PartialEq)]
@ -13,6 +17,8 @@ struct Node<T> {
} }
impl<T: PartialEq> List<T> { impl<T: PartialEq> List<T> {
/// Create an empty list
pub fn new() -> Self { pub fn new() -> Self {
List { head: None } List { head: None }
} }
@ -94,18 +100,26 @@ impl<T: PartialEq> List<T> {
found found
} }
/// Return true if the list is empty, false otherwise
pub fn is_empty(&self) -> bool { pub fn is_empty(&self) -> bool {
self.head.is_none() self.head.is_none()
} }
/// Turn the list into an iterator for use in a for loop per example.
///
/// When you iter using into_iter, elements are remove from the list
pub fn into_iter(self) -> IntoIter<T> { pub fn into_iter(self) -> IntoIter<T> {
IntoIter(self) IntoIter(self)
} }
/// Turn the list into an iterator for use in a for loop
///
/// When you iter using this method, elements are dereferenced
pub fn iter(&self) -> Iter<'_, T> { pub fn iter(&self) -> Iter<'_, T> {
Iter { next: self.head.as_deref() } Iter { next: self.head.as_deref() }
} }
/// Same as iter but make the iterator mutable
pub fn iter_mut(&mut self) -> IterMut<'_, T> { pub fn iter_mut(&mut self) -> IterMut<'_, T> {
IterMut { next: self.head.as_deref_mut() } IterMut { next: self.head.as_deref_mut() }
} }
@ -120,6 +134,7 @@ impl<T: PartialEq> Drop for List<T> {
} }
} }
/// Iterator structure for use in a for loop, pop elements before returning it
pub struct IntoIter<T: PartialEq>(List<T>); pub struct IntoIter<T: PartialEq>(List<T>);
impl<T: PartialEq> Iterator for IntoIter<T> { impl<T: PartialEq> Iterator for IntoIter<T> {
@ -130,6 +145,7 @@ impl<T: PartialEq> Iterator for IntoIter<T> {
} }
} }
/// Iterator structure for use in a for loop, dereference before returning it
pub struct Iter<'a, T> { pub struct Iter<'a, T> {
next: Option<&'a Node<T>>, next: Option<&'a Node<T>>,
} }
@ -144,6 +160,7 @@ impl<'a, T> Iterator for Iter<'a, T> {
} }
} }
/// Same as Iter structure, returned item are mutable
pub struct IterMut<'a, T> { pub struct IterMut<'a, T> {
next: Option<&'a mut Node<T>>, next: Option<&'a mut Node<T>>,
} }