现在我们的OS已经有4个进程在运行了,分别是TTY和A,B,C。其中ABC是实验性的进程,并不属于OS的一部分,而TTY进程则负责键盘的输入并在显示器中输出的任务,我们的OS要是没有它,就等于是个哑巴。所以我们有必要将它们区分开来,把TTY进程称为系统进程,把A,B,C进程称为用户进程。在程序实现上也就是让系统进程运行在RING1上,而让用户进程运行在RING3上。
下面就来对程序进行修改,对于系统进程和用户进程的PCB表和TASK表区分开来,而在之前是在一起的,进程栈的空间也得区分开来。分别在global.h和global.c中添加:
- extern PCB User_PCB_Table[];
- extern TASK User_Task_Table[];
- extern u8 User_Proc_Stack_Space_Total[];
- PCB User_PCB_Table[USER_PROC_NUM];
- u8 User_Proc_Stack_Space_Total[USER_PROC_STACK_SIZE_TOTAL];
- u8 Proc_Stack_Space_Total[PROC_STACK_SIZE_TOTAL];
- TASK Task_Table[PROC_NUM] = { {tty,PROC_TTY_STACK_SIZE} };
- TASK User_Task_Table[USER_PROC_NUM] = { {Proc_A,PROC_A_STACK_SIZE},
- {Proc_B,PROC_B_STACK_SIZE},
- {Proc_C,PROC_C_STACK_SIZE}
- };
对应的宏也要修改,在proc.h中:
- #define PROC_NUM 1
- #define USER_PROC_