Browse Source

doc: add problems and TODO part

greatbridf 5 months ago
parent
commit
92cfd5ccee
2 changed files with 8 additions and 0 deletions
  1. 2 0
      doc/boot.md
  2. 6 0
      doc/task.md

+ 2 - 0
doc/boot.md

@@ -20,4 +20,6 @@ MBR 代码使用 BIOS 功能从磁盘读取 Stage1 到内存地址 0x1000 并跳
 
 在 Rust 中的内核初始化阶段,首先调用 `init_thiscpu` 函数初始化当前 CPU 的状态,包括设置 GDT 和 TSS。接着,初始化中断控制器和定时器。然后,初始化多任务处理系统,包括创建调度器和空闲任务。接下来,挂载文件系统,并加载 init 进程。init 进程是一个 init 脚本,使用 busybox 运行,用于配置文件系统环境并且启动真正的用户 init进程。最后,内核进入正常运行状态,准备处理用户请求和执行应用程序。整个过程确保内核从启动到运行的过程顺利进行,并为后续的操作系统功能提供基础。
 
+## 还需要做的改进
 
+我们希望实现多平台多架构兼容,但是启动的这个位置我们还没有做多平台共通的接口。一个想法是可以将所有这些 bootstrap 用的代码都放到 arch 中,在一系列的初始化操作都完成以后,再将控制权交给共通部分的函数处。这个实现正在完成过程当中。

+ 6 - 0
doc/task.md

@@ -140,3 +140,9 @@ Eonix内核中的会话和进程组机制是任务管理系统的重要组成部
 会话与进程组的管理由`ProcessList`模块实现,新会话通过`Session::new`创建,进程组通过`Session::new_group`添加到会话。移除进程组时,如果会话中无其他进程组,会自动解除与控制终端的绑定。`ProcessList`提供方法查找会话和进程组,如`try_find_session`和`try_find_pgroup`。信号通过`ProcessGroup::raise`广播到整个进程组,或通过`Session::raise_foreground`广播到前台进程组。
 
 会话和进程组与信号机制紧密协作,提供多层次的任务控制能力。会话通过前台进程组分发信号,实现广播,可以控制用户当前交互作业。用户可以通过绑定的终端发送信号(如`SIGSTOP`或`SIGCONT`)控制作业状态切换。当会话领导进程终止时,内核会自动释放绑定的控制终端,并将会话中所有进程移至后台。
+
+## 实现中遇到的问题
+
+当前实现中,进程中对于其子线程、子进程,以及会话和进程组中对于所有成员的引用的设计可能会造成不一致。比如我们在移除一个进程的时候,需要将这个进程从其父进程的子进程表中删除,还需要将其从进程组和会话的成员列表中删除。同时在添加进程的时候要注意把这个进程加到这些表里。我们在这些过程当中有多个位置都要注意,一不小心就会导致内核崩溃。想到的一个解决办法就是用侵入式链表改良,将这几个过程合起来,降低复杂性。
+
+还需要实现`clone`系统调用,用于实现 *POSIX* 标准中的线程。