【第7章】区分系统进程和用户进程

本文介绍了如何在操作系统中区分系统进程(如TTY)和用户进程(如A、B、C)。通过修改PCB表、TASK表和进程栈,将系统进程设置为运行在RING1,用户进程运行在RING3。此外,还更新了调度程序以区别处理这两类进程的调度。最后,调整了描述符的DPL以确保权限级别正确。
摘要由CSDN通过智能技术生成

     现在我们的OS已经有4个进程在运行了,分别是TTY和A,B,C。其中ABC是实验性的进程,并不属于OS的一部分,而TTY进程则负责键盘的输入并在显示器中输出的任务,我们的OS要是没有它,就等于是个哑巴。所以我们有必要将它们区分开来,把TTY进程称为系统进程,把A,B,C进程称为用户进程。在程序实现上也就是让系统进程运行在RING1上,而让用户进程运行在RING3上。

     下面就来对程序进行修改,对于系统进程和用户进程的PCB表和TASK表区分开来,而在之前是在一起的,进程栈的空间也得区分开来。分别在global.h和global.c中添加:

Code:
  1. extern PCB User_PCB_Table[];       
  2. extern TASK User_Task_Table[];       
  3. extern u8 User_Proc_Stack_Space_Total[];     
Code:
  1. PCB User_PCB_Table[USER_PROC_NUM];       
  2. u8 User_Proc_Stack_Space_Total[USER_PROC_STACK_SIZE_TOTAL];       
  3. u8 Proc_Stack_Space_Total[PROC_STACK_SIZE_TOTAL];       
  4. TASK Task_Table[PROC_NUM] = { {tty,PROC_TTY_STACK_SIZE} };       
  5. TASK User_Task_Table[USER_PROC_NUM] = { {Proc_A,PROC_A_STACK_SIZE},       
  6.                                         {Proc_B,PROC_B_STACK_SIZE},       
  7.                                         {Proc_C,PROC_C_STACK_SIZE}       
  8.                                       };     

     对应的宏也要修改,在proc.h中:

Code:
  1. #define PROC_NUM                         1       
  2. #define USER_PROC_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值