计算机在运行时,是如何确定当前处于用户态还是内核态的
答案:1 悬赏:70 手机版
解决时间 2021-03-31 08:39
- 提问者网友:ミ烙印ゝ
- 2021-03-30 13:59
计算机在运行时,是如何确定当前处于用户态还是内核态的
最佳答案
- 五星知识达人网友:人间朝暮
- 2021-03-30 14:14
对于一个处于RUNNING状态的进程, 如果此时它没有占用CPU, 则在上次发生进程切换时, 它可能运行于用户态或内核态.
假设在发生进程切换时它运行于内核态, 那它可能是通过系统调用或者是异常(如缺页异常)的方式进入到内核态的.
又假设在发生进程切换时它运行于用户态, 那它只能是通过中断进入到内核态. 进而被切换掉.
而通过中断 系统调用或异常这三种方式进入到内核态时, 有一个不同之处就在于在压栈时, 内核栈中的出错代码那个地方.
如果是由于中断进入到内核, 那么在该进程的内核栈的EIP指针下面压入栈的值应该是 (中断号-256)
而如果是由于异常进入到内核的, 那么在该位置处, 压入栈的值应该是异常的出错代码, 并且在压栈时会将其再设置为-1; 如果是由于系统调用进入到内核的, 那么在该位置处, 其值为系统调用号.
望采纳,谢谢!
假设在发生进程切换时它运行于内核态, 那它可能是通过系统调用或者是异常(如缺页异常)的方式进入到内核态的.
又假设在发生进程切换时它运行于用户态, 那它只能是通过中断进入到内核态. 进而被切换掉.
而通过中断 系统调用或异常这三种方式进入到内核态时, 有一个不同之处就在于在压栈时, 内核栈中的出错代码那个地方.
如果是由于中断进入到内核, 那么在该进程的内核栈的EIP指针下面压入栈的值应该是 (中断号-256)
而如果是由于异常进入到内核的, 那么在该位置处, 压入栈的值应该是异常的出错代码, 并且在压栈时会将其再设置为-1; 如果是由于系统调用进入到内核的, 那么在该位置处, 其值为系统调用号.
望采纳,谢谢!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯