schedule_work

时间:2024-08-24 14:34:26编辑:分享君

linux 内核中,工作队列和线程有什么区别

work queue是一种bottom half,中断处理的后半程,强调的是动态的概念,即work是重点,而queue是其次。
wait queue是一种「任务队列」,可以把一些进程放在上面睡眠等待某个事件,强调静态多一些,重点在queue上,即它就是一个queue,这个queue如何调度,什么时候调度并不重要
等待队列在内核中有很多用途,尤其适合用于中断处理,进程同步及定时。这里只说,进程经常必须等待某些事件的发生。例如,等待一个磁盘操作的终止,等待释放系统资源,或者等待时间经过固定的间隔。
等待队列实现了在事件上的条件等待,希望等待特定事件的进程把放进合适的等待队列,并放弃控制权。因此。等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒进程。
等待队列由循环链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头,等待队列头是一个类型为wait_queue_head_t的数据结构。
等待队列链表的每个元素代表一个睡眠进程,该进程等待某一事件的发生,描述符地址存放在task字段中。然而,要唤醒等待队列中所有的进程有时并不方便。例如,如果两个或多个进程在等待互斥访问某一个要释放的资源,仅唤醒等待队列中一个才有意义。这个进程占有资源,而其他进程继续睡眠可以用DECLARE_WAIT_QUEUE_HEAD(name)宏定义一个新的等待队列,该宏静态地声明和初始化名为name的等待队列头变量。 init_waitqueue_head()函数用于初始化已动态分配的wait queue head变量等待队列可以通过DECLARE_WAITQUEUE()静态创建,也可以用init_waitqueue_head()动态创建。进程放入等待队列并设置成不可执行状态。
工作队列,workqueue,它允许内核代码来请求在将来某个时间调用一个函数。用来处理不是很紧急事件的回调方式处理方法.工作队列的作用就是把工作推后,交由一个内核线程去执行,更直接的说就是写了一个函数,而现在不想马上执行它,需要在将来某个时刻去执行,那就得用工作队列准没错。
如果需要用一个可以重新调度的实体来执行下半部处理,也应该使用工作队列。是唯一能在进程上下文运行的下半部实现的机制。这意味着在需要获得大量的内存时、在需要获取信号量时,在需要执行阻塞式的I/O操作时,都会非常有用。


linux内核工作队列怎么工作的

Linux 2.6内核使用了不少工作队列来处理任务,他在使用上和 tasklet最大的不同是工作队列的函数可以使用休眠,而tasklet的函数是不允许使用休眠的。
工作队列的使用又分两种情况,一种是利用系统共享的工作队列来添加自己的工作,这种情况处理函数不能消耗太多时间,这样会影响共享队列中其他任务的处理;另外一种是创建自己的工作队列并添加工作。

(一)利用系统共享的工作队列添加工作:

第一步:声明或编写一个工作处理函数
  void my_func();
第二步:创建一个工作结构体变量,并将处理函数和参数的入口地址赋给这个工作结构体变量
  DECLARE_WORK(my_work,my_func,&data); //编译时创建名为my_work的结构体变量并把函数入口地址和参数地址赋给它;
  如果不想要在编译时就用DECLARE_WORK()创建并初始化工作结构体变量,也可以在程序运行时再用INIT_WORK()创建
  struct work_struct my_work; //创建一个名为my_work的结构体变量,创建后才能使用INIT_WORK()
  INIT_WORK(&my_work,my_func,&data); //初始化已经创建的my_work,其实就是往这个结构体变量中添加处理函数的入口地址和data的地址,通常在驱动的open函数中完成
  第三步:将工作结构体变量添加入系统的共享工作队列
  schedule_work(&my_work); //添加入队列的工作完成后会自动从队列中删除
  或schedule_delayed_work(&my_work,tick); //延时tick个滴答后再提交工作
  (二)创建自己的工作队列来添加工作
  第一步:声明工作处理函数和一个指向工作队列的指针
  void my_func();
  struct workqueue_struct *p_queue;
  第二步:创建自己的工作队列和工作结构体变量(通常在open函数中完成)
  p_queu=create_workqueue("my_queue"); //创建一个名为my_queue的工作队列并把工作队列的入口地址赋给声明的指针
  struct work_struct my_work;
  INIT_WORK(&my_work, my_func, &data); //创建一个工作结构体变量并初始化,和第一种情况的方法一样
  第三步:将工作添加入自己创建的工作队列等待执行
  queue_work(p_queue, &my_work);
  //作用与schedule_work()类似,不同的是将工作添加入p_queue指针指向的工作队列而不是系统共享的工作队列
  第四步:删除自己的工作队列
  destroy_workqueue(p_queue); //一般是在close函数中删除


英文作息表怎么写?

Winter vacation schedule 寒假作息表:Seven o'clock 七点钟;Get up 起床;Seven thirty 七点半;Eat breakfast 吃早餐;Eight o'clock 八点钟;Eleven thirty 锻炼;Nine o'clock 九点钟;Do homework 写作业;Eleven o'clock十一点钟;To have lunch 吃午饭;Eleven thirty 十一点半;Eleven thirty 锻炼;Twelve thirty 十二点半;Play玩耍;At one o'clock in the afternoon 下午一点钟;Do homework 写作业;At three o'clock in the afternoon 下午三点钟;Afternoon tea 下午茶;At four thirty in the afternoon 下午四点半;Play 玩耍;At five thirty in the afternoon 下午五点半;Eat dinner 吃晚饭;At six thirty in the afternoon 晚上六点半;Sleep 睡觉。英语翻译技巧:1、省略翻译法这与最开始提到的增译法相反,就是要求你把不符合汉语,或者英语的表达的方式、思维的习惯或者语言的习惯的部分删去,以免使所翻译出的句子沉杂累赘。2、合并法合并翻译法就是把多个短句子或者简单句合并到一起,形成一个复合句或者说复杂句,多出现在汉译英的题目里出现,比如最后会翻译成定语从句、状语从句、宾语从句等等。3、拆分法当然,英译汉的时候,就要采取完全相反的战术——拆分法,即把一个长难句细细拆分为一个个小短句、简单句,并适当补充词语,是句子通顺。最后,注意还需要按照汉语习惯调整语序,达到不仅能看懂而且不拗口的目标。

作息时间英语怎么说?

问题一:“作息时间表” 英语怎么说的? 作息时间表:work-rest schedule

问题二:作息时间的英文怎么说 I get up around 7 and 7:10 every morning. I eat breakfast at 7:30. After eating breakfast, I start on my homework at 8 o'clock. After I finish doing my homework, I go watch some TV at 11:15 a.m. I go eat lunch at 12 o'clock. After lunch, I go play badminton. Then I read some books around 3 and 4 in the afternoon. I eat dinner at 6 o'clock at night, and then go to bed around 9 and 9:30.
希望对你有帮助~
天上~
注:作息时间:time schedule

问题三:作息时间 英文怎么说 Work Schedual

问题四:“作息时间表”用英语怎么说? time table

问题五:作息时间 英文怎么说 作息时间
Timetable
work and rest time

问题六:我的作息时间完全混乱了用英语怎么说。。 My sleeping schedule is pletely messed up

问题七:我的生活作息时间比较有规律,用英文怎么翻译 I keep regular hours.

问题八:"这是我的作息时间表"用英语怎么说 this is my schedule.

问题九:上班时间,工作时间用英语怎么说 如你所问的话应该是business hour、也可写作shop hours
但是商店营业时间可以直接写 Open XX A.M.-XX P.M. 或者 Opening time

问题十:作息时间的英文怎么说 I get up around 7 and 7:10 every morning. I eat breakfast at 7:30. After eating breakfast, I start on my homework at 8 o'clock. After I finish doing my homework, I go watch some TV at 11:15 a.m. I go eat lunch at 12 o'clock. After lunch, I go play badminton. Then I read some books around 3 and 4 in the afternoon. I eat dinner at 6 o'clock at night, and then go to bed around 9 and 9:30.
希望对你有帮助~
天上~
注:作息时间:time schedule


上一篇:黄帝内经抗衰老秘方

下一篇:天津历史文化