进程管理主要是完成进程的创建、退出、状态的转换、进程切换
1、进程的创建。进程的创建主要完成几个任务,从创建进程对象开始,也就是为PCB分配内存,然后分配相应的资源,例如内存、IO设备等,分配好资源后,如果程序处于外存,还要将程序从外存读入,这个过程可以称为装载,装载完成后,初始化进程的运行环境,例如各个寄存器的初始值,然后根据初始状态设置PCB,最后将进程放入调度队列中,等待调度。
2、进程的退出。进程的退出主要是处理进程占用资源的释放,例如占用的内存,关闭已经打开的内核对象,如文件等。释放完成后,将自身从调度列表中删除,并将PCB归还系统。
3、进程切换。进程切换主要是完成将进程放入CPU运行的工作。
4、进程状态的转换。也就是处理进程在各个状态之间的转换的操作,通常是睡眠和等待
以上是偏于理论性质的内容,对实际的实现没有太多的帮助。真正的实现需要考虑太多如何做的问题。对于具体的问题,例如,如何分配进程对象?没有分页机制的情况下如何分配内存?有分页机制的情况下如何分配内存?如何实现内核共享而用户空间独立?等等其实这些才是学习者关心的。
Lenix通过以下几个程序来实现进程管理这些任务。
void Proc_initial(void);
proc_t * Proc_create(const char * name,void * entry,void * param,void * stack);
void Proc_exit(int code);
void * Proc_switch_prepare(void * sp,proc_t * next);
void Proc_switch_to(proc_t * next);
void Proc_sched(void);