翻阅很多资料,综合了各处所述进程在进行系统调用之后的状态会如何的解答,以下是我个人理解,欢迎各位读者纠错。
PS: 特别感谢以下这个帖子,看完他们的讨论我才茅塞顿开,非常感谢!
一个运行态的用户进程在执行系统调用命令(系统调用命令编译后,包含若干参数以及陷入指令)之后
首先向操作系统传递各种参数
然后执行陷入指令,保存现场
操作系统由用户态转变为内核态(这里注意,仅仅是CPU的模式变了,进程还是那个进程,即用户态/内核态是说CPU模式,进程运行态/阻塞态是另一回事,某方面来说,二者互不相干)
进程开始执行系统调用,此时,如果系统调用的内容为调度CPU以外的系统资源,则分为以下两种情况:
1.资源空闲,可以直接使用,则进程使用资源,同时保存现场,转为阻塞态,当使用完资源时,资源向进程发出信号,进程转为就绪态;
2.资源被占用,需要排队,则进程开始排队,同时保存现场,转为阻塞态,当排到该进程时,转为就绪态,然后当等待到CPU时,转为情况1;
当使用完了资源,进程再次运行时,此时,资源依然被本进程占用着,需要释放掉资源,恢复现场,还是处于内核态,然后此时相当于系统调用已经执行完成,然后就恢复现场,返回用户态了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)