浏览代码

Merge branch 'master' into patch-add-file-mapping

MemoryShore 11 月之前
父节点
当前提交
91222a37a5
共有 3 个文件被更改,包括 39 次插入1 次删除
  1. 17 1
      kernel/src/filesystem/procfs/mod.rs
  2. 11 0
      kernel/src/filesystem/vfs/file.rs
  3. 11 0
      kernel/src/process/mod.rs

+ 17 - 1
kernel/src/filesystem/procfs/mod.rs

@@ -157,7 +157,7 @@ impl ProcFSInode {
         };
         // 传入数据
         let pdata: &mut Vec<u8> = &mut pdata.data;
-
+        // name
         pdata.append(
             &mut format!("Name:\t{}", pcb.basic().name())
                 .as_bytes()
@@ -174,17 +174,32 @@ impl ProcFSInode {
         let priority = sched_info_guard.policy();
         let vrtime = sched_info_guard.sched_entity.vruntime;
 
+        // State
         pdata.append(&mut format!("\nState:\t{:?}", state).as_bytes().to_owned());
+
+        // Tgid
+        pdata.append(&mut format!("\nTgid:\t{}", pcb.tgid().into()).into());
+
+        // pid
         pdata.append(
             &mut format!("\nPid:\t{}", pcb.pid().into())
                 .as_bytes()
                 .to_owned(),
         );
+
+        // ppid
         pdata.append(
             &mut format!("\nPpid:\t{}", pcb.basic().ppid().into())
                 .as_bytes()
                 .to_owned(),
         );
+
+        // fdsize
+        pdata.append(&mut format!("\nFDSize:\t{}", pcb.fd_table().read().fd_open_count()).into());
+
+        // kthread
+        pdata.append(&mut format!("\nKthread:\t{}", pcb.is_kthread() as usize).into());
+
         pdata.append(&mut format!("\ncpu_id:\t{}", cpu_id).as_bytes().to_owned());
         pdata.append(&mut format!("\npriority:\t{:?}", priority).as_bytes().to_owned());
         pdata.append(
@@ -192,6 +207,7 @@ impl ProcFSInode {
                 .as_bytes()
                 .to_owned(),
         );
+
         pdata.append(&mut format!("\nvrtime:\t{}", vrtime).as_bytes().to_owned());
 
         if let Some(user_vm) = pcb.basic().user_vm() {

+ 11 - 0
kernel/src/filesystem/vfs/file.rs

@@ -614,6 +614,17 @@ impl FileDescriptorVec {
         return res;
     }
 
+    /// 返回 `已经打开的` 文件描述符的数量
+    pub fn fd_open_count(&self) -> usize {
+        let mut size = 0;
+        for fd in &self.fds {
+            if fd.is_some() {
+                size += 1;
+            }
+        }
+        return size;
+    }
+
     /// @brief 判断文件描述符序号是否合法
     ///
     /// @return true 合法

+ 11 - 0
kernel/src/process/mod.rs

@@ -672,6 +672,17 @@ impl ProcessControlBlock {
         return Self::do_create_pcb(name, kstack, true);
     }
 
+    /// # 函数的功能
+    ///
+    /// 返回此函数是否是内核进程
+    ///
+    /// # 返回值
+    ///
+    /// 若进程是内核进程则返回true 否则返回false
+    pub fn is_kthread(&self) -> bool {
+        return matches!(self.flags(), &mut ProcessFlags::KTHREAD);
+    }
+
     #[inline(never)]
     fn do_create_pcb(name: String, kstack: KernelStack, is_idle: bool) -> Arc<Self> {
         let (pid, ppid, cwd) = if is_idle {