1
0
mirror of https://github.com/sgmarz/osblog.git synced 2024-11-23 18:06:20 +04:00

Get set up to support file descriptors in user space.

This commit is contained in:
Stephen Marz 2020-05-19 09:27:57 -04:00
parent 7db18179a6
commit 0b83a3629a
3 changed files with 18 additions and 9 deletions

View File

@ -7,7 +7,7 @@
// The frequency of QEMU is 10 MHz
pub const FREQ: u64 = 10_000_000;
// Let's do this 250 times per second for switching
pub const CONTEXT_SWITCH_TIME: u64 = FREQ / 250;
pub const CONTEXT_SWITCH_TIME: u64 = FREQ / 500;
/// In 64-bit mode, we're given three different modes for the MMU:
/// 0 - The MMU is off -- no protection and no translation PA = VA

View File

@ -169,7 +169,7 @@ impl File {
pid: my_pid,
root: zalloc(1) as *mut Table,
state: ProcessState::Running,
data: ProcessData::zero(),
data: ProcessData::new(),
sleep_until: 0,
program: zalloc(program_pages) };

View File

@ -10,6 +10,7 @@ use crate::{cpu::{build_satp,
SatpMode,
TrapFrame,
Registers},
fs::Inode,
page::{alloc,
dealloc,
map,
@ -249,7 +250,7 @@ pub fn add_kernel_process(func: fn()) -> u16 {
pid: my_pid,
root: zalloc(1) as *mut Table,
state: ProcessState::Running,
data: ProcessData::zero(),
data: ProcessData::new(),
sleep_until: 0,
program: null_mut()
};
@ -334,7 +335,7 @@ pub fn add_kernel_process_args(func: fn(args_ptr: usize), args: usize) -> u16 {
pid: my_pid,
root: zalloc(1) as *mut Table,
state: ProcessState::Running,
data: ProcessData::zero(),
data: ProcessData::new(),
sleep_until: 0,
program: null_mut(),
};
@ -501,7 +502,7 @@ impl Process {
pid: unsafe { NEXT_PID },
root: zalloc(1) as *mut Table,
state: ProcessState::Running,
data: ProcessData::zero(),
data: ProcessData::new(),
sleep_until: 0,
program: null_mut()
};
@ -570,7 +571,6 @@ impl Drop for Process {
/// Since we're storing ownership of a Process in the linked list,
/// we can cause it to deallocate automatically when it is removed.
fn drop(&mut self) {
// println!("Dropping process {}", self.get_pid());
// We allocate the stack as a page.
dealloc(self.stack);
// This is unsafe, but it's at the drop stage, so we won't
@ -589,6 +589,13 @@ impl Drop for Process {
}
}
pub enum FileDescriptor {
File(Inode),
Device(usize),
Network,
Unknown,
}
// The private data in a process contains information
// that is relevant to where we are, including the path
// and open file descriptors.
@ -596,16 +603,18 @@ impl Drop for Process {
// private process data. This is essentially our resource control block (RCB).
#[allow(dead_code)]
pub struct ProcessData {
environ: BTreeMap<String, String>
environ: BTreeMap<String, String>,
fdesc: BTreeMap<u16, FileDescriptor>,
}
// This is private data that we can query with system calls.
// If we want to implement CFQ (completely fair queuing), which
// is a per-process block queuing algorithm, we can put that here.
impl ProcessData {
pub fn zero() -> Self {
pub fn new() -> Self {
ProcessData {
environ: BTreeMap::new()
environ: BTreeMap::new(),
fdesc: BTreeMap::new(),
}
}
}