wait_event_interruptible和down_interruptible [问题点数:30分]

Bbs1
本版专家分:20
结帖率 93.75%
Bbs1
本版专家分:20
Bbs6
本版专家分:8357
Blank
红花 2016年7月 Linux/Unix社区大版内专家分月排行榜第一
2016年3月 Linux/Unix社区大版内专家分月排行榜第一
Blank
黄花 2016年12月 Linux/Unix社区大版内专家分月排行榜第二
Bbs1
本版专家分:20
Bbs1
本版专家分:20
Bbs6
本版专家分:8357
Blank
红花 2016年7月 Linux/Unix社区大版内专家分月排行榜第一
2016年3月 Linux/Unix社区大版内专家分月排行榜第一
Blank
黄花 2016年12月 Linux/Unix社区大版内专家分月排行榜第二
Bbs1
本版专家分:20
关于down_interruptible函数
if(<em>down_interruptible</em>(&dev->sem))rn return -ERESTARTSYS;rn其中dev->sem是用于实现互斥的信号量rn请问这两行代码是什么意思?因为<em>down_interruptible</em>正常情况下是返回0的,这里它不是正常返回,到底是因为没能拿到信号量,还是因为被中断了呢?rn另外,顺便问一下:能否用通俗的话讲讲ERESTARTSYS,EAGAIN到底表示什么?
wake_up_interruptible和wait_event_interruptible问题
小弟写了实现一个read阻塞程序,但是在唤醒过程中报错,第一次唤醒成功,第二次就不行了。望大虾们帮忙。rnerror如下:rnirq7: nobody cared rn rnPid: 0, comm: swapper rnCPU: 0 rnPC is at default_idle+0x4c/0x54 rnLR is at arch_idle+0x10/0x14 rnpc : [] lr : [] Not tainted rnsp : c022dfa0 ip : c022dfa0 fp : c022dfac rnr10: 6001cd90 r9 : 41069264 r8 : 6001cdc0 rnr7 : c02b7440 r6 : c022ffdc r5 : c0023704 r4 : c022c000 rnr3 : 60000013 r2 : 0005217f r1 : 0005317f r0 : 00000000 rnFlags: nZCv IRQs on FIQs on Mode SVC_32 Segment kernel rnControl: 5317F Table: 60F54000 DAC: 00000017 rn[] (show_regs+0x0/0x4c) from [] (report_bad_irq+0x6c/0xcc) rnr4 = C022DF58 rn[] (report_bad_irq+0x0/0xcc) from [] (do_level_IRQ+0x8c/0xc)rnr5 = 00000007 r4 = C027C12C rn[] (do_level_IRQ+0x0/0xc8) from [] (asm_do_IRQ+0x54/0x150) rnr6 = 00000001 r5 = C027C12C r4 = 00000007 rn[] (asm_do_IRQ+0x0/0x150) from [] (__irq_svc+0x38/0x8c) rn[] (default_idle+0x0/0x54) from [] (cpu_idle+0x5c/0xa0) rn[] (cpu_idle+0x0/0xa0) from [] (__init_end+0x30/0x38) rnr6 = C022FCDC r5 = C027DA3C r4 = C02A2DFC rn[] (__init_end+0x0/0x38) from [] (start_kernel+0x140/0x178) rn[] (start_kernel+0x0/0x178) from [] (0x60008094) rn[] (dump_stack+0x0/0x14) from [] (report_bad_irq+0x70/0xcc) rn[] (report_bad_irq+0x0/0xcc) from [] (do_level_IRQ+0x8c/0xc)rnr5 = 00000007 r4 = C027C12C rn[] (do_level_IRQ+0x0/0xc8) from [] (asm_do_IRQ+0x54/0x150) rnr6 = 00000001 r5 = C027C12C r4 = 00000007 rn[] (asm_do_IRQ+0x0/0x150) from [] (__irq_svc+0x38/0x8c) rn[] (default_idle+0x0/0x54) from [] (cpu_idle+0x5c/0xa0) rn[] (cpu_idle+0x0/0xa0) from [] (__init_end+0x30/0x38) rnr6 = C022FCDC r5 = C027DA3C r4 = C02A2DFC rn[] (__init_end+0x0/0x38) from [] (start_kernel+0x140/0x178) rn[] (start_kernel+0x0/0x178) from [] (0x60008094) rnhandlers: rn[] (ir_in_irq+0x0/0x24 [ir]) rn第二次在执行 wake_up_interruptible(&ir_wait_q)这句话的过程中,打印如下信息:rnirq7: nobody cared rn rnPid: 413, comm: ir_check_stream rnCPU: 0 rnPC is at ir_open+0x3c/0x64 [ir] rnLR is at ir_open+0x3c/0x64 [ir] rnpc : [] lr : [] Not tainted rnsp : c065be78 ip : 00000000 fp : c065be88 rnr10: c0f3de88 r9 : c0e4fa7c r8 : c023bf98 rnr7 : 0000003d r6 : 00000001 r5 : c023bea8 r4 : 00000000 rnr3 : 00000004 r2 : c1869410 r1 : 00000004 r0 : 00000000 rnFlags: Nzcv IRQs on FIQs on Mode SVC_32 Segment user rnControl: 5317F Table: 60650000 DAC: 00000015 rn[] (show_regs+0x0/0x4c) from [] (report_bad_irq+0x6c/0xcc) rnr4 = C065BE30 rn[] (report_bad_irq+0x0/0xcc) from [] (do_level_IRQ+0x8c/0xc)rnr5 = 00000007 r4 = C027C12C rn[] (do_level_IRQ+0x0/0xc8) from [] (asm_do_IRQ+0x54/0x150) rnr6 = 00000001 r5 = C027C12C r4 = 00000007 rn[] (asm_do_IRQ+0x0/0x150) from [] (__irq_svc+0x38/0x8c) rn[] (ir_open+0x0/0x64 [ir]) from [] (misc_open+0x28c/0x458) rnr4 = BF00D0E0 rn[] (misc_open+0x0/0x458) from [] (chrdev_open+0x1b8/0x1e0) rn[] (chrdev_open+0x0/0x1e0) from [] (__dentry_open+0x138/0x2)rn[] (__dentry_open+0x0/0x2b0) from [] (filp_open+0x7c/0x98) rn[] (filp_open+0x0/0x98) from [] (do_sys_open+0x44/0xd0) rnr7 = 00000005 r6 = 00000004 r5 = 00000180 r4 = 00000002 rn[] (do_sys_open+0x0/0xd0) from [] (sys_open+0x10/0x14) rn[] (sys_open+0x0/0x14) from [] (ret_fast_syscall+0x0/0x2c) rn[] (dump_stack+0x0/0x14) from [] (report_bad_irq+0x70/0xcc) rn[] (report_bad_irq+0x0/0xcc) from [] (do_level_IRQ+0x8c/0xc)rnr5 = 00000007 r4 = C027C12C rn[] (do_level_IRQ+0x0/0xc8) from [] (asm_do_IRQ+0x54/0x150) rnr6 = 00000001 r5 = C027C12C r4 = 00000007 rn[] (asm_do_IRQ+0x0/0x150) from [] (__irq_svc+0x38/0x8c) rn[] (ir_open+0x0/0x64 [ir]) from [] (misc_open+0x28c/0x458) rnr4 = BF00D0E0 rn[] (misc_open+0x0/0x458) from [] (chrdev_open+0x1b8/0x1e0) rn[] (chrdev_open+0x0/0x1e0) from [] (__dentry_open+0x138/0x2)rn[] (__dentry_open+0x0/0x2b0) from [] (filp_open+0x7c/0x98) rn[] (filp_open+0x0/0x98) from [] (do_sys_open+0x44/0xd0) rnr7 = 00000005 r6 = 00000004 r5 = 00000180 r4 = 00000002 rn[] (do_sys_open+0x0/0xd0) from [] (sys_open+0x10/0x14) rn[] (sys_open+0x0/0x14) from [] (ret_fast_syscall+0x0/0x2c) rnhandlers: rn[] (ir_in_irq+0x0/0x24 [ir])
wait_for_completion 和wait_event_interruptible 区别
看了一下wait_for_completion 和<em>wait_event_interruptible</em>rnrn这两个除了建立用不同的函数之外,功能是一样的,都可以等另外一边的动作完成,在执行这边,而且源码里两者rn都包含了schedule调度rnrnrn那么completion 和 waitqueue有什么区别呢,我是指实际上的东西,请不要把书本的拿过来,谢谢了。rn
wait_event_interruptible_timeout和schedule_timeout的区别
一、适用情况 <em>wait_event_interruptible</em>_timeout和schedule_timeout的区别 当在某个硬件驱动程序中使用<em>wait_event_interruptible</em>_timeout时,执行的继续可以通过以下两种方式获得: 1.其他人在等待队列上调用了wake_up 2.超时到期。 而调用schedule_timeout的进程始终会在超时到期时被唤醒。 二、
Linux驱动中的 wait_event_interruptible 与 wake_up_interruptible 深度理解
<em>wait_event_interruptible</em> 与 wake_up_interruptible 深度分析
关于wait_event_timeout
关于wait_event_timeout 标签(空格分隔): 等待队列 http://bbs.chinaunix.net/thread-3615327-1-1.html do {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbs
wait_event_interruptible()和wait_up_interruptible()
休眠 所谓休眠就是让出CPU 然后并不返回 <em>wait_event_interruptible</em>(wq, condition) condition = 0 ///休眠 condition = 1 ///唤醒 <em>wait_event_interruptible</em>()和wait_up_interruptible() <em>wait_event_interruptible</em>...
wait_event_interruptible 使用方法
1. 关于 <em>wait_event_interruptible</em>() 和 wake_up()的使用   读一下<em>wait_event_interruptible</em>()的源码,不难发现这个函数先将 当前进程的状态设置成TASK_INTERRUPTIBLE,然后调用schedule(), 而schedule()会将位于TASK_INTERRUPTIBLE状态的当前进程从runqueue 队列中删除。从runq...
wait_event_interruptible()函数耗时
最近子再linux下作摄像头,用的是s3c6410,rn发现读取一帧数据耗时0.1s,一直追踪到samsung fimc驱动中的函数rn<em>wait_event_interruptible</em>()rn该函数用了0.1s,哪些原因导致它用这么长时间呢,如何降低到0.01s以内?rn我对linux驱动不是很了解,希望各位大神帮帮忙。rn
Linux(内核)信号量源码解析(非系统调用)
1.信号量概述------------------------------------------------nnnLinux中提供了两种信号量,一种用于内核程序中,一种用于应用程序中。nn由于这里讲解的是内核编程的知识,所以只对内核中的信号量进行详细讲述。nn自旋锁和信号量的区别:nn自旋锁:会一直检测是否可以上锁,因此当有锁可用时,自旋锁的反应快速nn信号量:没有锁后会进行休眠,直到有锁后被...
read函数中wait_event_interruptible无法唤醒,求助。
问题简介:rn1,CPU的一个GPIO口配置为中断响应功能(以确定该口可以配置为中断),高电平触发,该口连接功能芯片的的IRQ口,IRQ口平时为低电平,当有数据要发送给CPU时,IRQ变为高电平,然后CPU读取数据。rnrn2,现在的问题是下面的read函数可以读取第一帧数据,但是之后再调用时会一直挂在<em>wait_event_interruptible</em>处,表现为<em>wait_event_interruptible</em>长时间没有退出。通过示波器观察,确实是有一个中断产生的,IRQ线有一个向高跳变。rnrn求教大家,可能的原因和解决方法,非常感谢。rn源码如下:rnrnstatic ssize_t scull_dev_read(struct file *filp, char __user *buf,rn size_t count, loff_t *offset)rnrn struct scull_dev *scull_dev = filp->private_data;rn char tmp[MAX_BUFFER_SIZE];rn int ret;rnrn mutex_lock(&scull_dev->read_mutex);rnrn if (!gpio_get_value(scull_dev->irq_gpio)) rn if (filp->f_flags & O_NONBLOCK) rn ret = -EAGAIN;rn goto fail;rn rnrn scull_dev->irq_enabled = true;rn enable_irq(scull_dev->client->irq);rn ret = <em>wait_event_interruptible</em>(scull_dev->read_wq,rn gpio_get_value(scull_dev->irq_gpio));rnrn scull_disable_irq(scull_dev);rnrn if (ret)rn goto fail;rnrn rnrn /* Read data */rn ret = i2c_master_recv(scull_dev->client, tmp, count);rn mutex_unlock(&scull_dev->read_mutex);rnrn if (ret < 0) rn pr_err("%s: i2c_master_recv returned %d\n", __func__, ret);rn return ret;rn rn if (ret > count) rn pr_err("%s: received too many bytes from i2c (%d)\n",rn __func__, ret);rn return -EIO;rn rn if (copy_to_user(buf, tmp, ret)) rn pr_warning("%s : failed to copy to user space\n", __func__);rn return -EFAULT;rn rn return ret;rnrnfail:rn mutex_unlock(&scull_dev->read_mutex);rn return ret;rn
内核--任务调度--等待
内核经常进行进程的调度,下面是等待队列的使用:nn wait_event - sleep until a condition gets true.   n * The process is put to sleep (TASK_UNINTERRUPTIBLE) until then * @condition evaluates to true. The @condition is checke
单单一个wait_event_interruptible()就能唤醒自己?
<em>wait_event_interruptible</em>()。该函数修改task的状态为TASK_INTERRUPTIBLE,意味着改进程将不会继续运行直到被唤醒,然后被添加到等待队列wq中。rn在<em>wait_event_interruptible</em>()中首先判断condition是不是已经满足,如果是则直接返回0,否则调用__<em>wait_event_interruptible</em>(),并用__ret来存放返回值rn---------------------------------------------------------------rn#define <em>wait_event_interruptible</em>(wq, condition) \rn( \rn int __ret = 0; \rn if (!(condition)) \rn __<em>wait_event_interruptible</em>(wq, condition, __ret);\rn __ret; \rn)rn<em>wait_event_interruptible</em>() __<em>wait_event_interruptible</em>()rn__<em>wait_event_interruptible</em>()首先定义并初始化一个wait_queue_t变量__wait,其中数据为当前进程current,并把__wait入队。rn rn在无限循环中,__<em>wait_event_interruptible</em>()将本进程置为可中断的挂起状态,反复检查condition是否成立,如果成立rn则退出,如果不成立则继续休眠;[color=#FF0000]条件满足后,即把本进程运行状态置为运行态,并将__wait从等待队列中清除掉[/color],从而进程能够调度运行。如果进程当前有rn异步信号(POSIX的),则返回-ERESTARTSYS。rnrn那既然这样,也就是单单一个<em>wait_event_interruptible</em>()就能唤醒自己 ?rn我在某处rnint flag = 0;rn<em>wait_event_interruptible</em>(wq,flag !=0);rn就会睡眠了,那我在其他函数里:flag =1 ;rn按照上面的说法,进程就唤醒了??那要wake_up_interruptible()干嘛???? rn
请问在调用wait_event_interruptible()后,如果等待的条件一直都不满足,有timer_list 可不可以制定一个超时跳出wait_event_interruptible()?
请问在调用<em>wait_event_interruptible</em>()后,如果等待的条件一直都不满足,但是又想在一定时间内返回,该怎么办啦?rn我在调用<em>wait_event_interruptible</em>()前加了一个timer_list,(add(timer)),但是好像不管用,超时了还是不跳出sleep。请问需要等待一个事件的发生,如果在一定时间内该事件还没有发生就超时跳出,该怎么实现啦
请问:down_interruptible能被信号中断是什么意思
本人刚接触内核编程,对<em>down_interruptible</em>能被信号中断不大理解。如果获得信号,程序可以继续运行,否则休眠。那么什么叫被信号中断呢。请各位高手解释一下,谢谢!
Linux内核线程kthread
内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,它只在 内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。让模块在加载后能一直运行下去的方法——内核线程。要创建一个内核线程有许多种方法,我们这里要学的是最简单的一种。打开include/linux/kthread.h,你就看到了它全部的API,一共三个函数。nstruct task_struct kt
linux设备驱动中的阻塞与非阻塞(一)
这两天在搞linux驱动的阻塞和非阻塞,困扰了两天,看了不少博客,有了点自己的想法,也不知是否对错,但还是写写吧,让各位大神给我指点指点。n        首先说说什么是阻塞和非阻塞的概念:阻塞操作就是指进程在操作设备时,由于不能获取资源或者暂时不能操作设备时,系统就会把进程挂起,被挂起的进程会进入休眠状态并且会从调度器的运行队列移走,放到等待队列中,然后一直休眠,直到该进程满足可操作的条件,再
Linux内核API完全参考手册(第2版).邱铁(带详细书签).pdf
经过十年多的Linux操作系统教学与Linux内核实践开发,目前很难找到一本能够详细讲解Linux内核API的参考书。目前出版的Linux方面很多图书相似度很大,基本上可以分为以下三种:1. Linux内核分析。这类书一般都很老,版本陈旧。与当前最新的内核差别很大。2. Linux操作系统。以原理为主,以实例为辅,一般都设计成操作系统课上的常用实例。3. Linux上层应用函数库。这些图书不便于内核开发,因为内核开发所需要的API恰恰很少提及。因此计划编写一本适合最新的Linux内核3.0版本,指导思想是基于PC机完成所有代码分析与实例练习,增强其通用性。 在近五年的教学与大学生创新实践开发中,在已经积累经验的基础上编写Linux内核API,以“Linux内核模块式API开发与实例验证”为主线,以阶梯式前进的方式,使读者能够低起点、高效率的学习理论、深入实践,从而为LINUX内核开发打下一定的基础。全书共分10章,书定稿后约90万字,约500页,并配有实例代码。 作者简介 邱铁 博士,拥有超过10年的Linux使用和开发经验。从高中时代起就对嵌入式电子及控制技术产生了浓厚的兴趣,并且具有多项发明创造。大学毕业后开始涉足精彩的开源世界,特别是在Linux开放源码系统方面,做了大量的工作。他创立了飞翔电子工作室,专门进行嵌入式与开放源代码开发。2009年参加中国嵌入式系统课件大赛并获得一等奖。著作有《ARM嵌入式系统结构与编程》《Linux应用与开发典型实例精讲》《Linux环境下Qt4图形界面与MySQL编程》。 周玉 硕士,飞翔电子工作室主要成员,主要从事ARM、Linux方面的工作,曾参加全国大学生嵌入式设计大赛,参与完成的“基于S3C6410的全智能物联网自组织与智能车导航设计”获得大赛特等奖,熟悉Linux驱动、内核编程及应用开发,参与编写《Linux环境下Qt4图形界面与MySQL编程》。 本书特色 全面介绍Linux内核API开发与编程的手册; 对Linux内核系统知识进行精心策划,以内核模块方式对内核API进行系统分析; 基于系统功能模块内部,内核API以函数名称排序,方便快速检索; 立足于基础,高效学习理论配合内核API经典实例,深入Linux编程实践; 为Linux内核开发与编程提供高效指导与参考。 本书范例源代码可以到华章网站(www.hzbook.com)下载。 图书前言 进入21世纪以来,IT技术以前所未有的速度向前发展。Linux作为源码开放的操作系统,在众多的爱好者和网络黑客的共同努力下,不断成长并趋于完善。由于GNU计划所开发的各种组件和系统发行版所必备的软件可以运行于Linux内核之上,整个内核符合GNU通用公共许可证(GNU General Public License),使得Linux在PC、服务器以及嵌入式系统开发等领域得到了广泛的应用。 作者在长期的Linux内核开发中发现,当前介绍内核API方面的书籍很少。目前市面的关于Linux内核编程开发方面的书可以分为三类:第一类,Linux内核分析,所分析的内核源代码版本一般相对较早,而对于最新版本的内核源代码很少提及;第二类,Linux编程类,主要是以用户层面上的编程为主,一般涉及用户API;第三类,嵌入式Linux开发,相对于特定的硬件平台,只对所用到的特定内核API进行简要说明。对于Linux内核编程开发,需要全面了解内核API,而目前市面上找不到一本能够全面介绍最新的Linux内核API的图书,这也正是本书写作的目的所在。 本书的编写工作从2015年6月开始,所有的内核API验证实例基于最新的Linux内核源代码3.19.3版本。经过近十一个月的源代码分析、编程实践与实例验证,对常用的内核API进行系统归纳,并编写了典型验证程序,使理论分析与实际编程实现统一。分析的内核API模块包括:内核模块机制API、进程管理内核API、进程调度内核API、中断机制内核API、时间与定时机制内核API、内存管理内核API、内核同步机制API、文件系统内核API和设备驱动及设备管理模块内核API。 在实例编写过程中,感谢邓莹莹参与了部分实例的验证,以及机械工业出版社华章公司编辑为本书的出版所做的工作。另外,笔者听取了同事、同行专家意见和建议,并参阅了大量中文、外文文献和网络论坛的精华资料,特别是活跃在开放源代码社区的Linux爱好者,在此向他们表示感谢。 由于Linux更新速度较快,再加上编者所具备知识的广度和深度所限,书中存在的错误与不当之处请各位同仁批评指正。对于书中的问题,读者可以发送到E-mail:qiutie@ieee.org,能够及时与笔者交流,以便再版时更正与完善。 编者 2016年5月1日于大连 本书特色 全面介绍Linux内核API开发与编程的手册; 对Linux内核系统知识进行精心策划,以内核模块方式对内核API进行系统分析; 基于系统功能模块内部,内核API以函数名称排序,方便快速检索; 立足于基础,高效学习理论配合内核API经典实例,深入Linux编程实践; 为Linux内核开发与编程提供高效指导与参考。 本书主要内容 Linux内核模块机制API Linux进程管理内核API Linux进程调度内核API Linux中断机制内核API Linux内存管理内核API Linux内核定时机制API Linux内核同步机制API Linux文件系统内核API Linux设备驱动与设备管理API 本书范例源代码可以到华章网站(www.hzbook.com)下载。 作者简介 邱铁 周玉 编著:邱 铁 博士,拥有超过10年的Linux使用和开发经验。从高中时代起就对嵌入式电子及控制技术产生了浓厚的兴趣,并且具有多项发明创造。大学毕业后开始涉足精彩的开源世界,特别是在Linux开放源码系统方面,做了大量的工作。他创立了飞翔电子工作室,专门进行嵌入式与开放源代码开发。2009年参加中国嵌入式系统课件大赛并获得一等奖。著作有《ARM嵌入式系统结构与编程》《Linux应用与开发典型实例精讲》《Linux环境下Qt4图形界面与MySQL编程》。 周 玉 硕士,飞翔电子工作室主要成员,主要从事ARM、Linux方面的工作,曾参加全国大学生嵌入式设计大赛,参与完成的“基于S3C6410的全智能物联网自组织与智能车导航设计”获得大赛特等奖,熟悉Linux驱动、内核编程及应用开发,参与编写《Linux环境下Qt4图形界面与MySQL编程》。 前言 第1章 Linux内核API分析必备知识 1 1.1 Linux内核编程注意事项 1 1.2 本书中模块编译Makefile模板 2 1.3 内核调试函数printk 3 1.4 内核编译与定制 5 1.4.1 获得Linux内核与补丁 5 1.4.2 准备编译需要的工具 5 1.4.3 解压内核 6 1.4.4 给内核打补丁 6 1.4.5 设定编译选项 7 1.4.6 编译与安装内核 9 1.4.7 创建initramfs 10 1.4.8 设置grub 11 1.4.9 启动选项 12 1.5 温馨提示 12 本章参考文献 13 第2章 内核模块机制API 14 2.1 函数:__module_address( ) 14 2.2 函数:__module_text_address( ) 16 2.3 函数:__print_symbol( ) 19 2.4 函数:__symbol_get( ) 22 2.5 函数:__symbol_put( ) 25 2.6 函数:find_module( ) 27 2.7 函数:find_symbol( ) 31 2.8 函数:module_is_live( ) 36 2.9 函数:module_put( ) 38 2.10 函数:module_refcount( ) 40 2.11 函数:sprint_symbol( ) 42 2.12 函数:symbol_put_addr( ) 45 2.13 函数:try_module_get( ) 48 本章参考文献 50 第3章 Linux进程管理内核API 51 3.1 函数:__task_pid_nr_ns( ) 51 3.2 函数:find_get_pid( ) 54 3.3 函数:find_pid_ns( ) 56 3.4 函数:find_vpid( ) 58 3.5 函数:get_pid( ) 60 3.6 函数:get_task_mm( ) 62 3.7 函数:mmput( ) 66 3.8 函数:ns_of_pid( ) 68 3.9 函数:pid_nr( ) 70 3.10 函数:pid_task( ) 72 3.11 函数:pid_vnr( ) 74 3.12 函数:put_pid( ) 76 3.13 函数:task_active_pid_ns( ) 78 3.14 函数:task_tgid_nr_ns( ) 80 本章参考文献 82 第4章 Linux 进程调度内核API 83 4.1 函数:__wake_up( ) 83 4.2 函数:__wake_up_sync( ) 88 4.3 函数:__wake_up_sync_key( ) 91 4.4 函数:abort_exclusive_wait( ) 94 4.5 函数:add_wait_queue( ) 99 4.6 函数:add_wait_queue_exclusive( ) 102 4.7 函数:autoremove_wake_function( ) 105 4.8 函数:complete( ) 109 4.9 函数:complete_all( ) 112 4.10 函数:completion_done( ) 115 4.11 函数:current_thread_info( ) 118 4.12 函数:default_wake_function( ) 121 4.13 函数:do_exit( ) 124 4.14 函数:finish_wait( ) 126 4.15 函数:init_waitqueue_entry( ) 130 4.16 函数:init_waitqueue_head( ) 132 4.17 函数:kthread_create_on_node( ) 134 4.18 函数:kthread_stop( ) 136 4.19 函数:prepare_to_wait( ) 138 4.20 函数:prepare_to_wait_exclusive( ) 142 4.21 函数:remove_wait_queue( ) 147 4.22 函数:sched_setscheduler( ) 150 4.23 函数:set_cpus_allowed_ptr( ) 154 4.24 函数:set_user_nice( ) 157 4.25 函数:task_nice( ) 160 4.26 函数:try_wait_for_completion( ) 162 4.27 函数:wait_for_completion( ) 166 4.28 函数:wait_for_completion_interruptible_timeout( ) 169 4.29 函数:wait_for_completion_killable( ) 173 4.30 函数:wait_for_completion_timeout( ) 177 4.31 函数:wake_up_process( ) 180 4.32 函数:yield( ) 183 本章参考文献 185 第5章 Linux中断机制内核API 187 5.1 函数:__tasklet_hi_schedule( ) 187 5.2 函数:__tasklet_schedule( ) 190 5.3 函数:disable_irq( ) 193 5.4 函数:disable_irq_nosync( ) 193 5.5 函数:disable_irq_wake( ) 196 5.6 函数:enable_irq( ) 199 5.7 函数:enable_irq_wake( ) 201 5.8 函数:free_irq( ) 204 5.9 函数:irq_set_chip( ) 205 5.10 函数:irq_set_chip_data( ) 209 5.11 函数:irq_set_irq_type( ) 212 5.12 函数:irq_set_irq_wake( ) 214 5.13 函数:remove_irq( ) 217 5.14 函数:request_irq( ) 221 5.15 函数:request_threaded_irq( ) 225 5.16 函数:setup_irq( ) 229 5.17 函数:tasklet_disable( ) 232 5.18 函数:tasklet_disable_nosync( ) 234 5.19 函数:tasklet_enable( ) 236 5.20 函数:tasklet_hi_schedule( ) 237 5.21 函数:tasklet_init( ) 241 5.22 函数:tasklet_kill( ) 243 5.23 函数:tasklet_schedule( ) 245 5.24 函数:tasklet_trylock( ) 247 5.25 函数:tasklet_unlock( ) 248 本章参考文献 251 第6章 Linux内存管理内核API 252 6.1 函数:__free_pages( ) 252 6.2 函数:__get_free_pages( ) 253 6.3 函数:__get_vm_area( ) 255 6.4 函数:__krealloc( ) 258 6.5 函数:alloc_pages( ) 261 6.6 函数:alloc_pages_exact( ) 264 6.7 函数:find_vma( ) 266 6.8 函数:find_vma_intersection( ) 270 6.9 函数:free_pages( ) 272 6.10 函数:free_pages_exact( ) 273 6.11 函数:get_unmapped_area( ) 274 6.12 函数:get_zeroed_page( ) 276 6.13 函数:kcalloc( ) 278 6.14 函数:kfree( ) 280 6.15 函数:kmalloc( ) 281 6.16 函数:kmem_cache_alloc( ) 283 6.17 函数:kmem_cache_create( ) 285 6.18 函数:kmem_cache_destroy( ) 288 6.19 函数:kmem_cache_free( ) 289 6.20 函数:kmem_cache_zalloc( ) 290 6.21 函数:kmemdup( ) 292 6.22 函数:ksize( ) 295 6.23 函数:kstrdup( ) 298 6.24 函数:kstrndup( ) 299 6.25 函数:kzalloc( ) 301 6.26 函数:memdup_user( ) 303 6.27 函数:mempool_alloc( ) 306 6.28 函数:mempool_alloc_pages( ) 308 6.29 函数:mempool_alloc_slab( ) 311 6.30 函数:mempool_create( ) 313 6.31 函数:mempool_destroy( ) 316 6.32 函数:mempool_free( ) 317 6.33 函数:mempool_free_pages( ) 318 6.34 函数:mempool_free_slab( ) 318 6.35 函数:mempool_kfree( ) 319 6.36 函数:mempool_kmalloc( ) 320 6.37 函数:mempool_resize( ) 322 6.38 函数:nr_free_buffer_pages( ) 325 6.39 宏:page_address( ) 326 6.40 宏:page_cache_get( ) 328 6.41 宏:page_cache_release( ) 330 6.42 函数:page_zone( ) 331 6.43 宏:probe_kernel_address( ) 334 6.44 函数:probe_kernel_read( ) 336 6.45 函数:vfree( ) 338 6.46 函数:vma_pages( ) 339 6.47 函数:vmalloc( ) 341 6.48 函数:vmalloc_to_page( ) 343 6.49 函数:vmalloc_to_pfn( ) 345 6.50 函数:vmalloc_user( ) 347 本章参考文献 349 第7章 Linux内核定时机制API 350 7.1 函数:__round_jiffies( ) 350 7.2 函数:__round_jiffies_relative( ) 352 7.3 函数:__round_jiffies_up( ) 354 7.4 函数:__round_jiffies_up_relative( ) 356 7.5 函数:add_timer( ) 358 7.6 函数:current_kernel_time( ) 359 7.7 函数:del_timer( ) 361 7.8 函数:del_timer_sync( ) 364 7.9 函数:do_gettimeofday( ) 367 7.10 函数:do_settimeofday( ) 369 7.11 函数:get_seconds( ) 372 7.12 函数:getnstimeofday( ) 374 7.13 函数:init_timer( ) 376 7.14 函数:init_timer_deferrable( ) 378 7.15 函数:init_timer_key( ) 380 7.16 函数:init_timer_on_stack( ) 382 7.17 函数:init_timer_on_stack_key( ) 385 7.18 函数:mktime( ) 387 7.19 函数:mod_timer( ) 389 7.20 函数:mod_timer_pending( ) 392 7.21 函数:ns_to_timespec( ) 394 7.22 函数:ns_to_timeval&#40; &#41; 396 7.23 函数:round_jiffies( ) 398 7.24 函数:round_jiffies_relative( ) 401 7.25 函数:round_jiffies_up( ) 404 7.26 函数:round_jiffies_up_relative( ) 406 7.27 函数:set_normalized_timespec( ) 409 7.28 函数:setup_timer( ) 411 7.29 函数:setup_timer_on_stack( ) 413 7.30 函数:timer_pending( ) 415 7.31 函数:timespec_add_ns( ) 417 7.32 函数:timespec_compare( ) 420 7.33 函数:timespec_equal( ) 422 7.34 函数:timespec_sub( ) 424 7.35 函数:timespec_to_ns( ) 426 7.36 函数:timeval_compare( ) 428 7.37 函数:timeval_to_ns( ) 431 7.38 函数:try_to_del_timer_sync( ) 433 本章参考文献 435 第8章 Linux内核同步机制API 436 8.1 函数:atomic_add( ) 436 8.2 函数:atomic_add_negative( ) 438 8.3 函数:atomic_add_return( ) 440 8.4 函数:atomic_add_unless( ) 442 8.5 函数:atomic_cmpxchg( ) 444 8.6 函数:atomic_dec( ) 446 8.7 函数:atomic_dec_and_test( ) 448 8.8 函数:atomic_inc( ) 449 8.9 函数:atomic_inc_and_test( ) 451 8.10 函数:atomic_read( ) 453 8.11 函数:atomic_set( ) 453 8.12 函数:atomic_sub( ) 455 8.13 函数:atomic_sub_and_test( ) 457 8.14 函数:atomic_sub_return( ) 459 8.15 函数:down( ) 461 8.16 函数:<em>down_interruptible</em>( ) 463 8.17 函数:down_killable( ) 465 8.18 函数:down_read( ) 468 8.19 函数:down_read_trylock( ) 470 8.20 函数:down_timeout( ) 472 8.21 函数:down_trylock( ) 474 8.22 函数:down_write( ) 476 8.23 函数:down_write_trylock( ) 479 8.24 函数:downgrade_write( ) 481 8.25 宏:init_rwsem( ) 483 8.26 函数:read_seqbegin( ) 486 8.27 函数:read_seqretry( ) 488 8.28 函数:sema_init( ) 490 8.29 宏:seqlock_init( ) 492 8.30 函数:up( ) 494 8.31 函数:up_read( ) 496 8.32 函数:up_write( ) 497 8.33 函数:write_seqlock( ) 498 8.34 函数:write_sequnlock( ) 498 本章参考文献 499 第9章 Linux文件系统内核API 500 9.1 函数:__mnt_is_readonly( ) 500 9.2 函数:current_umask( ) 502 9.3 函数:d_alloc( ) 504 9.4 函数:d_find_alias( ) 507 9.5 函数:dput( ) 510 9.6 函数:fget( ) 512 9.7 函数:generic_fillattr( ) 515 9.8 函数:get_fs_type( ) 517 9.9 函数:get_max_files( ) 520 9.10 函数:get_super( ) 522 9.11 函数:have_submounts( ) 525 9.12 函数:I_BDEV( ) 527 9.13 函数:inode_add_bytes( ) 529 9.14 函数:inode_get_bytes( ) 531 9.15 函数:inode_set_bytes( ) 533 9.16 函数:inode_sub_bytes( ) 535 9.17 函数:is_bad_inode( ) 537 9.18 函数:make_bad_inode( ) 538 9.19 函数:may_umount( ) 540 9.20 函数:may_umount_tree( ) 542 9.21 函数:mnt_want_write( ) 544 9.22 函数:notify_change( ) 545 9.23 函数:put_unused_fd( ) 547 9.24 函数:unshare_fs_struct( ) 549 9.25 函数:vfs_fstat( ) 551 9.26 函数:vfs_getattr( ) 553 9.27 函数:vfs_statfs( ) 556 本章参考文献 559 第10章 Linux 设备驱动及设备管理API 560 10.1 函数:__class_create( ) 560 10.2 函数:__class_register( ) 562 10.3 函数:cdev_add( ) 563 10.4 函数:cdev_alloc( ) 564 10.5 函数:cdev_del( ) 566 10.6 函数:cdev_init( ) 572 10.7 宏:class_create( ) 577 10.8 函数:class_destroy( ) 578 10.9 宏:class_register( ) 581 10.10 函数:class_unregister( ) 582 10.11 函数:device_add( ) 589 10.12 函数:device_create( ) 589 10.13 函数:device_del( ) 592 10.14 函数:device_destroy( ) 592 10.15 函数:device_initialize( ) 599 10.16 函数:device_register( ) 606 10.17 函数:device_rename( ) 607 10.18 函数:device_unregister( ) 613 10.19 函数:get_device( ) 620 10.20 函数:put_device( ) 621 10.21 函数:register_chrdev( ) 625 10.22 函数:unregister_chrdev( ) 626 10.23 部分相关函数说明 634 本章参考文献 635 附录 Linux内核API快速检索表 636
强连通分量及缩点tarjan算法解析
强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Time, DFN[N], Low[N]; DFN[i]表示 遍历到 i 点时是第几次dfs Low[u] 表示 以u点为父节点的 子树 能连接到 [栈中] 最上端的点   int
jquery/js实现一个网页同时调用多个倒计时(最新的)
jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js //js2 var plugJs={ stamp:0, tid:1, stampnow:Date.parse(new Date())/1000,//统一开始时间戳 ...
关于SpringBoot bean无法注入的问题(与文件包位置有关)
问题场景描述整个项目通过Maven构建,大致结构如下: 核心Spring框架一个module spring-boot-base service和dao一个module server-core 提供系统后台数据管理一个module server-platform-app 给移动端提供rest数据接口一个module server-mobile-api 其中server-platform-app 与
使用NASM和CL(或LINK)写HelloWorld
原文地址:http://www.tech-juice.org/2011/02/26/assembler-tutorial-hello-world-with-nasm-and-cl-exe-or-link-exe/ 前言 ... 编译汇编代码 我们来编译链接这个名为helloworld.asm的汇编代码 ; This is a Win32 console prog
linux上安装Docker(非常简单的安装方法)
最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例, 可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。 仓库:类似代码仓库,是Docker集中存放镜像文件的场所。 简单介绍一
WebView内存泄漏解决方法
销毁webview的方式 从 mWebView.removeAllViews(); /**、 * 这里内存泄漏了,因为它的父容器在退出前没有被销毁,所以就会持有引用,内存泄漏 * */ // mWebView.destroy(); 改为 在 Android 5.1 系统上,在项目中遇到一个WebView引起的问题,每打开一个带webview的界面,退出后,这个act
Java项目如何记录日志
Java项目如何记录日志http://blog.csdn.net/goodleiwei/article/details/7059589
搭建图片服务器《二》-linux安装nginx
nginx是个好东西,Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占
Ubuntu 16.04升级4.6.4内核
前两周升级了ubuntu 16.04 出现了关机卡死的情况,查了下可能是系统内核(4.4.0)bug导致的,所以打算升级下内核。 查看已经安装了的内核 sudo dpkg --get-selections |grep linux 查看当前使用的内核版本 uname -a 首先到内核下载网页下载不同版本的内核,我自己下载的是4.6.4稳定版。 >>>内核下载地址 64位 lin
利用N来管理nodejs的版本问题
n是Node的一个模块,作者是TJ Holowaychuk(鼎鼎大名的Express框架作者) 安装很简单: $ sudo npm install -g n 安装完成之后,直接输入n后输出当前已经安装的node版本以及正在使用的版本(前面有一个o),你可以通过移动上下方向键来选择要使用的版本,最后按回车生效。 $ n     0.10.1      0.10.15  o   0.10
【Python】Python2与Python3的不同
前言 Python作为一种连接各种语言的胶水语言,以其自身优势在系统开发、web开发、网络爬虫、数据挖掘、深度学习等多方面均有广泛使用,Python也有其特殊之处:Python2.x与Python3.x并不兼容。今天看到消息说Python基金会宣布在2020年元旦开始将不提供任何Python 2.x的支持,所以觉得有必要再重新整理一下Python这两个版本间的差异。 编码 Python3源码...
特斯拉森算法快速矩阵相乘算法
特斯拉森算法快速矩阵相乘:讲八次乘法简化为七次n^2.81远小于n^3.http://blog.csdn.net/ljn393124204/article/details/17149153
网络金融犯罪及侦查对策论文下载
〔摘要〕由于金融业电子化趋势的加快,网络金融犯1 h }.上升趋势,深入研究网络金融犯1h已经势在必 行。网络技术的发展,使得网络金融犯罪的隐蔽性更强,社会危害性更人。在进行这类案件侦查时,应注重计 算机技术与侦查技术相结合,全而收集各种证据,同时要加强地}x_间的侦查协作,针刘一网络金融犯罪的特点, 灵活使川各种侦查策略。 相关下载链接:[url=//download.csdn.net/download/ellegrace/2183570?utm_source=bbsseo]//download.csdn.net/download/ellegrace/2183570?utm_source=bbsseo[/url]
mrp经典 小屏mrp游戏下载
很经典的mrp游戏相信会物超所值 无聊时玩玩…… 相关下载链接:[url=//download.csdn.net/download/F540844704/2847961?utm_source=bbsseo]//download.csdn.net/download/F540844704/2847961?utm_source=bbsseo[/url]
用java登陆新浪微博下载
httpclient方式登陆,以及发布微博 相关下载链接:[url=//download.csdn.net/download/icecolour/3292953?utm_source=bbsseo]//download.csdn.net/download/icecolour/3292953?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 怎么学习互联网大数据 村干部学习大数据心得
我们是很有底线的