ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux驱动之阻塞机制

2022-05-20 13:03:44  阅读:172  来源: 互联网

标签:状态 TASK 阻塞 调用 EXIT linux 进程 驱动 wait


设计驱动阻塞机制,通过等待队列wait_queue来实现

1.schedules之后,等待信号,函数就退出了,原因是什么?********
答:
signal_pending( current )―――》检查当前进程是否有信号处理,返回不为0表示有信号需要处理。
if(signal_pending(current)){
ret = -ERESTARTSYS;
return ret;
}
返回-ERESTARTSYS这个值,会触发系统调用再次调用。
参考链接https://blog.csdn.net/qq_33160790/article/details/65450365
2.__set_current_state(TASK_INTERRUPTIBLE),还有哪些状态可以设置,或者含义是什么?
TASK_RUNNING : 进程处于可运行状态,但并不意味着进程已经实际上已分配到 CPU ,它可能会一直等到调度器选中它。该状态只是确保进程一旦被 CPU 选中时立马可以运行,而无需等待外部事件。

TASK_INTERRUPTIBLE : 这是针对等待某事件或其他资源而睡眠的进程设置的。在内核发送信号给该进程时表明等待的事件已经发生或资源已经可用,进程状态变为 TASK_RUNNING,此时只要被调度器选中就立即可恢复运行。

TASK_UNINTERRUPTIBLE : 处于此状态,不能由外部信号唤醒,只能由内核亲自唤醒。

TASK_STOPPED : 表示进程特意停止运行。比如在调试程序时,进程被调试器暂停下来。

TASK_TRACED : 本来不属于进程状态,用于从停止的进程中,将当前被调试的那些进程与常规进程区分开来。

下面常量既可以用于 struct task_struct 的进程状态字段,也可以用于 exit_state 字段(该字段明确的用于退出进程):

EXIT_ZOMBIE : 僵尸状态。

EXIT_DEAD : 处于该状态, 表示 wait 系统调用已经发出,而进程完全从系统移除之前的状态。只有多个线程对同一个进程发出 wait 调用时,该状态才有意义(为了防止其他执行线程在同一个进程也执行wait()类系统调用,而把进程的状态由僵死状态(EXIT_ZOMBIE)改为撤销状态(EXIT_DEAD)。)。

标签:状态,TASK,阻塞,调用,EXIT,linux,进程,驱动,wait
来源: https://www.cnblogs.com/gaoshanxiaolu/p/16291956.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有