kernel/proc.h
进程相关定义
kernel/proc.h中存放了绝大多数进程相关的宏与数据结构,是整个操作系统中至关重要的一部分。
上下文/语境(context)
自然,一个操作系统不能也不应该从头到尾不间歇地执行下去。如果中途发生了严重的错误,系统必须能及时停止并返回原先状态。而如果中途需要处理更重要的事务,系统还要保存当前任务的状态以便处理完后继续工作。这样的异常及中断都涉及到寄存器的变化。
context的作用便是进行寄存器的清除及恢复。它保存了基本的数据寄存器(s0~s11),同时保存了返回时需要的地址ra及栈顶指针sp。xv6一般将其与kernel/swtch.S搭配来实现切换。
// 为系统上下文切换保存寄存器
struct context {
uint64 ra;
uint64 sp;
// 保存被调用方数据
uint64 s0;
uint64 s1;
uint64 s2;
uint64 s3;
uint64 s4;
uint64 s5;
uint64 s6;
uint64 s7;
uint64 s8;
uint64 s9;
uint64 s10;
uint64 s11;
};CPU/hart
CPU为处理进程的基本的单元,但和我们平常理解的CPU略有不同。现实中的CPU指一个处理器件,内部可能有多个处理核。而在这里,CPU指的是一次处理一条指令的单线程单元,而不是特指某个硬件结构。官方文档中有时也会出现核(core),硬件线程(hart/hard thread)的术语,它们实际上指的是同一件事物。
struct CPU给出了当前CPU元数据的一个抽象表示。
这些信息被保存在CPUS中,方便查询。数目上限为NCPU(=8)。
陷阱帧(trapframe)
进程(process)
接下来的部分为本节最后也是最为关键的部分——process。
一个process需要提供以下内容:
便于识别与区分的身份信息:id号码...
掌握的内存资源:代码的运行空间,使用的文件,占用大小,当前内存指向...;
进程的状态以及相互关系:进程状态,父进程,是否被杀死...;
调度接口:上下文,等待链,返回状态,锁...
最后更新于
这有帮助吗?