From a03f3280572b8a965b1b04c7350c330ecc33c99a Mon Sep 17 00:00:00 2001 From: chyyuu Date: Mon, 4 Apr 2022 03:57:37 +0000 Subject: [PATCH] deploy: e7084e4a96712674d48cfc5dca2b573227683ea1 --- ch9-log/os/task/process/index.html | 2 +- .../process/struct.ProcessControlBlock.html | 6 ++--- ch9-log/os/task/task/enum.TaskStatus.html | 8 +++---- ch9-log/os/task/task/index.html | 2 +- .../os/task/task/struct.TaskControlBlock.html | 2 +- ch9-log/src/os/task/id.rs.html | 4 ++-- ch9-log/src/os/task/process.rs.html | 24 ++++++++++++++++++- ch9-log/src/os/task/task.rs.html | 2 ++ 8 files changed, 37 insertions(+), 13 deletions(-) diff --git a/ch9-log/os/task/process/index.html b/ch9-log/os/task/process/index.html index 7a3b52bc..0d655786 100644 --- a/ch9-log/os/task/process/index.html +++ b/ch9-log/os/task/process/index.html @@ -2,6 +2,6 @@
-

Module os::task::process

source · []

Structs

+

Module os::task::process

source · []

Structs

\ No newline at end of file diff --git a/ch9-log/os/task/process/struct.ProcessControlBlock.html b/ch9-log/os/task/process/struct.ProcessControlBlock.html index 5ed1c09c..1638ed93 100644 --- a/ch9-log/os/task/process/struct.ProcessControlBlock.html +++ b/ch9-log/os/task/process/struct.ProcessControlBlock.html @@ -5,9 +5,9 @@

Struct os::task::process::ProcessControlBlock

source · []
pub struct ProcessControlBlock {
     pub pid: PidHandle,
     inner: UPIntrFreeCell<ProcessControlBlockInner>,
-}

Fields

pid: PidHandleinner: UPIntrFreeCell<ProcessControlBlockInner>

Implementations

Only support processes with a single thread.

-

Only support processes with a single thread.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+}

Fields

pid: PidHandleinner: UPIntrFreeCell<ProcessControlBlockInner>

Implementations

Only support processes with a single thread.

+

Only support processes with a single thread.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

diff --git a/ch9-log/os/task/task/enum.TaskStatus.html b/ch9-log/os/task/task/enum.TaskStatus.html index 2de57649..8c32ecbd 100644 --- a/ch9-log/os/task/task/enum.TaskStatus.html +++ b/ch9-log/os/task/task/enum.TaskStatus.html @@ -2,16 +2,16 @@
pub enum TaskStatus {
+    

Enum os::task::task::TaskStatus

source · []
pub enum TaskStatus {
     Ready,
     Running,
     Blocking,
-}

Variants

Ready

Running

Blocking

Trait Implementations

Returns a copy of the value. Read more

+}

Variants

Ready

Running

Blocking

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

This method tests for self and other values to be equal, and is used +

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

diff --git a/ch9-log/os/task/task/index.html b/ch9-log/os/task/task/index.html index d907cfb5..504e5aeb 100644 --- a/ch9-log/os/task/task/index.html +++ b/ch9-log/os/task/task/index.html @@ -2,7 +2,7 @@
-

Module os::task::task

source · []

Structs

+

Module os::task::task

source · []

Structs

Enums

\ No newline at end of file diff --git a/ch9-log/os/task/task/struct.TaskControlBlock.html b/ch9-log/os/task/task/struct.TaskControlBlock.html index c9cc2393..aeae1a42 100644 --- a/ch9-log/os/task/task/struct.TaskControlBlock.html +++ b/ch9-log/os/task/task/struct.TaskControlBlock.html @@ -6,7 +6,7 @@ pub process: Weak<ProcessControlBlock>, pub kstack: KernelStack, pub inner: UPIntrFreeCell<TaskControlBlockInner>, -}

Fields

process: Weak<ProcessControlBlock>kstack: KernelStackinner: UPIntrFreeCell<TaskControlBlockInner>

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+}

Fields

process: Weak<ProcessControlBlock>kstack: KernelStackinner: UPIntrFreeCell<TaskControlBlockInner>

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

diff --git a/ch9-log/src/os/task/id.rs.html b/ch9-log/src/os/task/id.rs.html index f97edfcd..b282ac95 100644 --- a/ch9-log/src/os/task/id.rs.html +++ b/ch9-log/src/os/task/id.rs.html @@ -406,7 +406,7 @@ let process = self.process.upgrade().unwrap(); let mut process_inner = process.inner_exclusive_access(); // alloc user stack - kprintln!("[KERN] task::id::TaskUserRes::alloc_user_res(): alloc user stack"); + kprintln!("[KERN] task::id::TaskUserRes::alloc_user_res(): alloc user stack for TCB"); let ustack_bottom = ustack_bottom_from_tid(self.ustack_base, self.tid); let ustack_top = ustack_bottom + USER_STACK_SIZE; process_inner.memory_set.insert_framed_area( @@ -415,7 +415,7 @@ MapPermission::R | MapPermission::W | MapPermission::U, ); // alloc trap_cx - kprintln!("[KERN] task::id::TaskUserRes::alloc_user_res(): alloc trap_cx"); + kprintln!("[KERN] task::id::TaskUserRes::alloc_user_res(): alloc trap_cx for TCB"); let trap_cx_bottom = trap_cx_bottom_from_tid(self.tid); let trap_cx_top = trap_cx_bottom + PAGE_SIZE; process_inner.memory_set.insert_framed_area( diff --git a/ch9-log/src/os/task/process.rs.html b/ch9-log/src/os/task/process.rs.html index a7fa9719..3b280376 100644 --- a/ch9-log/src/os/task/process.rs.html +++ b/ch9-log/src/os/task/process.rs.html @@ -274,6 +274,17 @@ 271 272 273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284
use super::id::RecycleAllocator;
 use super::manager::insert_into_pid2process;
 use super::TaskControlBlock;
@@ -410,9 +421,10 @@
         let mut process_inner = process.inner_exclusive_access();
         process_inner.tasks.push(Some(Arc::clone(&task)));
         drop(process_inner);
+        kprintln!("[KERN] task::process::new(): insert <pid, PCB> in PID2PCB BTreeMap");
         insert_into_pid2process(process.getpid(), Arc::clone(&process));
         // add main thread to scheduler
-        kprintln!("[KERN] task::process::new(): add_task(task): add main thread to tscheduler");
+        kprintln!("[KERN] task::process::new(): add_task(task): add main thread to scheduler");
         add_task(task);
         kprintln!("[KERN] task::process::new() end");
         process
@@ -479,10 +491,13 @@
         let mut parent = self.inner_exclusive_access();
         assert_eq!(parent.thread_count(), 1);
         // clone parent's memory_set completely including trampoline/ustacks/trap_cxs
+        kprintln!("[KERN] task::process::fork(): clone parent's memory_set for child");
         let memory_set = MemorySet::from_existed_user(&parent.memory_set);
         // alloc a pid
+        kprintln!("[KERN] task::process::fork(): alloc a new pid for child");
         let pid = pid_alloc();
         // copy fd table
+        kprintln!("[KERN] task::process::fork(): copy fd table for child");
         let mut new_fd_table: Vec<Option<Arc<dyn File + Send + Sync>>> = Vec::new();
         for fd in parent.fd_table.iter() {
             if let Some(file) = fd {
@@ -492,6 +507,7 @@
             }
         }
         // create child process pcb
+        kprintln!("[KERN] task::process::fork(): new child PCB with new pid, memory_set, fd_table, ...");
         let child = Arc::new(Self {
             pid,
             inner: unsafe {
@@ -512,8 +528,10 @@
             },
         });
         // add child
+        kprintln!("[KERN] task::process::fork(): add child link in parent' children Vec");
         parent.children.push(Arc::clone(&child));
         // create main thread of child process
+        kprintln!("[KERN] task::process::fork(): TaskControlBlock::new(): create main thread of child process");
         let task = Arc::new(TaskControlBlock::new(
             Arc::clone(&child),
             parent
@@ -528,16 +546,20 @@
             false,
         ));
         // attach task to child process
+        kprintln!("[KERN] task::process::fork(): attach child TCB to child PCB");
         let mut child_inner = child.inner_exclusive_access();
         child_inner.tasks.push(Some(Arc::clone(&task)));
         drop(child_inner);
         // modify kstack_top in trap_cx of this thread
+        kprintln!("[KERN] task::process::fork(): modify child's kstack_top in trap_cx of child");
         let task_inner = task.inner_exclusive_access();
         let trap_cx = task_inner.get_trap_cx();
         trap_cx.kernel_sp = task.kstack.get_top();
         drop(task_inner);
+        kprintln!("[KERN] task::process::fork(): insert <child pid, child PCB> in PID2PCB BTreeMap");
         insert_into_pid2process(child.getpid(), Arc::clone(&child));
         // add this thread to scheduler
+        kprintln!("[KERN] task::process::fork(): add_task(child task): add child thread to scheduler");
         add_task(task);
         kprintln!("[KERN] task::process::fork() end");
         child
diff --git a/ch9-log/src/os/task/task.rs.html b/ch9-log/src/os/task/task.rs.html
index 1466394e..806c0f4e 100644
--- a/ch9-log/src/os/task/task.rs.html
+++ b/ch9-log/src/os/task/task.rs.html
@@ -80,6 +80,7 @@
 77
 78
 79
+80
 
use super::id::TaskUserRes;
 use super::{kstack_alloc, KernelStack, ProcessControlBlock, TaskContext};
 use crate::trap::TrapContext;
@@ -134,6 +135,7 @@
         kprintln!("[KERN] TaskControlBlock::new() begin");
         let res = TaskUserRes::new(Arc::clone(&process), ustack_base, alloc_user_res);
         let trap_cx_ppn = res.trap_cx_ppn();
+        kprintln!("[KERN] TaskControlBlock::new(): alloc kernel stack for TCB");
         let kstack = kstack_alloc();
         let kstack_top = kstack.get_top();
         kprintln!("[KERN] TaskControlBlock::new() end");