TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE

TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE 的区别
TASK_INTERRUPTIBLE是可以被信号和wake_up()唤醒的,当信号到来时,进程会被设置为可运行。
而TASK_UNINTERRUPTIBLE只能被wake_up()唤醒。

信号本质

信号是在软件层次上对中断机制的一种模拟,软中断

信号来源

信号事件的发生有两个来源:

硬件来源:(比如我们按下了键盘或者其它硬件故障);

软件来源:最常用发送信号的系统函数是kill, raise,
alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作。

区分是什么原因唤醒进程,用signal_pending( current
);

检查当前进程是否有信号处理,返回不为0表示有信号需要处理。-ERESTARTSYS
表示信号函数处理完毕后重新执行信号函数前的某个系统调用。也就是说,如果信号函数前有发生系统调用,在调度用户信号函数之前,内核会检查系统调用的返回
值,看看是不是因为这个信号而中断了系统调用.如果返回值-ERESTARTSYS,并且当前调度的信号具备-ERESTARTSYS属性,系统就会在用
户信号函数返回之后再执行该系统调用。

实例:

186 static int inet_csk_wait_for_connect(struct sock *sk, long timeo)
187 {
188 struct inet_connection_sock *icsk = inet_csk(sk);
189 DEFINE_WAIT(wait);
190 int err;
191
192 /*
193 * True wake-one mechanism for incoming connections: only
194 * one process gets woken up, not the 'whole herd'.
195 * Since we do not 'race & poll' for established sockets
196 * anymore, the common case will execute the loop only once.
197 *
198 * Subtle issue: "add_wait_queue_exclusive()" will be added
199 * after any current non-exclusive waiters, and we know that
200 * it will always _stay_ after any new non-exclusive waiters
201 * because all non-exclusive waiters are added at the
202 * beginning of the wait-queue. As such, it's ok to "drop"
203 * our exclusiveness temporarily when we get woken up without
204 * having to remove and re-insert us on the wait queue.
205 */
206 for (;;) {
207 prepare_to_wait_exclusive(sk->sk_sleep, &wait,
208 TASK_INTERRUPTIBLE);
209 release_sock(sk);
210 if (reqsk_queue_empty(&icsk->icsk_accept_queue))
211 timeo = schedule_timeout(timeo);
212 lock_sock(sk);
213 err = 0;
214 if (!reqsk_queue_empty(&icsk->icsk_accept_queue))
215 break;
216 err = -EINVAL;
217 if (sk->sk_state != TCP_LISTEN)
218 break;
219 err = sock_intr_errno(timeo);
220 if (signal_pending(current))
221 break;
222 err = -EAGAIN;
223 if (!timeo)
224 break;
225 }
226 finish_wait(sk->sk_sleep, &wait);
227 return err;
228 }

TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE的更多相关文章

  1. 睡眠--TASK_INTERRUPTIBLE and TASK_UNINTERRUPTIBLE

    http://i.cnblogs.com/EditPosts.aspx?opt=1   Two states are associated with sleeping, TASK_INTERRUPTI ...

  2. android开发读书笔记

    第九章心得: HAL ( Hardware Abstraction Layer,硬件抽象腔,〉是建立在Linux驱动之上的一套翻字库.这套程序 j率并不属于 Linux 内核, 而是属于 Linux ...

  3. Linux内核创建一个新进程

    张雨梅   原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 创建新进程 如果同一个程序被多 ...

  4. 《Linux内核分析》之第四章读书笔记

    4.1多任务 多任务操作系统:同时并发地交互执行多个进程的操作系统 多任务操作系统会使多个进程处于堵塞或者睡眠状态.这些任务尽管位于内存,但是并不处于可运行状态.这些进程利用内核堵塞自己,直到某一事件 ...

  5. 20135202闫佳歆--week 8 课本第4章学习笔记

    第四章 进程调度 一.多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态. ...

  6. linux进程调度之 FIFO 和 RR 调度策略

    转载 http://blog.chinaunix.net/uid-24774106-id-3379478.html    linux进程调度之 FIFO 和 RR 调度策略 2012-10-19 18 ...

  7. Linux驱动设计——阻塞和同步

    阻塞和非阻塞是设备访问的两种基本方式,阻塞和非阻塞驱动程序使用时,经常会用到等待队列. 阻塞和非阻塞 阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.被挂起的 ...

  8. 使用latencytop深度了解你的系统的延迟(转)

    转载自系统技术非业余研究 http://blog.yufeng.info/archives/1239 我们在系统调优或者定位问题的时候,经常会发现多线程程序的效率很低,但是又不知道问题出在哪里,就知道 ...

  9. 《Linux内核设计与实现》读书笔记(十)- 内核同步方法【转】

    转自:http://www.cnblogs.com/wang_yb/archive/2013/05/01/3052865.html 内核中提供了多种方法来防止竞争条件,理解了这些方法的使用场景有助于我 ...

随机推荐

  1. Android开发随笔之ScrollView嵌套GridView[ 转]

    今天在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全,为了解决这个问题查了N多资料,某个谷歌的 ...

  2. 团队项目的NABC(截图软件)

    我们小组要开发的软件是基于windows上的截图软件,其NABC如下. 1.need: 首先,截图工具是几乎每个用户都会用到的,不管是在工作中,还是在学习上,其针对的人群从学生到上班族不等, 所以,他 ...

  3. Word图片版式设置问题

    word里面插入图片,版式设置为嵌入式,又显示不完整:设置上下,图片又跑到页面上方空白处.无论怎么设置,都不满意. 以为是word的问题,后来网络搜索才发现,如果段落行距为固定值的话,图片改为嵌入型后 ...

  4. Why Every Professional Should Consider Blogging

    转自http://www.pixelstech.net/article/1327829407-Why-Every-Professional-Should-Consider-Blogging ften ...

  5. 动态生成C# Lambda表达式

    转载:http://www.educity.cn/develop/1407905.html,并整理! 对于C# Lambda的理解我们在之前的文章中已经讲述过了,那么作为Delegate的进化使用,为 ...

  6. Careercup - Google面试题 - 4699414551592960

    2014-05-06 13:34 题目链接 原题: we have a random list of people. each person knows his own height and the ...

  7. Windows桌面开发者的必备软件

    如果你新安装好了一台WindowsXP或者Windows7的机器,作为一个开发人员,我建议安装下面这些软件: 1,WinMerge. http://winmerge.org/ 2, Lua for w ...

  8. 【Integer To Roman】cpp

    题目: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from ...

  9. 在线自动下载最新版本jquery

    <script src="http://code.jquery.com/jquery-latest.js">

  10. 类模板的困扰 LNK2019 (转)

    原文地址:http://www.eetop.cn/blog/html/93/493893-14903.html 在使用类模板技术时,可在.h中实现,也可在.h和.cpp中分开实现,若用.h实现,不要在 ...