- 实验指导书:https://learningos.github.io/ucore_os_webdocs/lab4/lab4_3_1_lab_steps.html
- 优秀的博客:https://kiprey.github.io/2020/08/uCore-4/
内核线程管理
关键结构:
struct proc_struct { enum proc_state state; // Process state int pid; // Process ID int runs; // the running times of Proces uintptr_t kstack; // Process kernel stack volatile bool need_resched; // need to be rescheduled to release CPU? struct proc_struct *parent; // the parent process struct mm_struct *mm; // Process's memory management field struct context context; // Switch here to run process struct trapframe *tf; // Trap frame for current interrupt uintptr_t cr3; // the base addr of Page Directroy Table(PDT) uint32_t flags; // Process flag char name[PROC_NAME_LEN + 1]; // Process name list_entry_t list_link; // Process link list list_entry_t hash_link; // Process hash list };
熟悉第一个线程第二个线程的创建以及简单调度。
该实验的总体流程就是创建第一个二个线程,然后调度到第二个线程执行一个打印函数然后释放资源。
kstack: 每个线程都有一个内核栈,并且位于内核地址空间的不同位置。对于内核线程,该栈就是运行时的程序使用的栈;而对于普通进程,该栈是发生特权级改变的时候使保存被打断的硬件信息用的栈。后续可进一步看出所有内核线程的内核虚地址空间(也包括物理地址空间)是相同的。
所有内核线程直接使用共同的 ucore 内核内存空间,这些内核线程都应该是从属于同一个唯一的“大内核进程”—uCore 内核。
标签:struct,Process,Ucore,list,线程,内核,lab4,相关 From: https://www.cnblogs.com/wuyun--wy/p/17064507.html