⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 context.c.txt

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻 TXT
字号:
any mistakes,send email to netxiong@263.net


本文件主要提供tq_context调度任务队列,一种安全的任务队列,因为他不存在中断问题,只是使用信号量进行同步。所以考虑的问题比较少。使用安全。

***********************基本数据结构**************************************
static DECLARE_TASK_QUEUE(tq_context);	//声明一个tq_context,和tq_timer一样。
*************************************************************************


**********************基本函数***************************
(1):int start_context_thread(void)
	#初始化函数
	#使用kernel_thread(context_thread, NULL, CLONE_FS | CLONE_FILES)
	 建立一个内核线程。

(2):static int context_thread(void *dummy)
	#内核线程主程序
	# for (;;) 主要的部分是一个死循环	
	    set_task_state(curtask, TASK_INTERRUPTIBLE);将当前线程设置成INTERRUPTIBLE型
	    add_wait_queue(&context_task_wq, &wait);设置一个等待队列
	    if (TQ_ACTIVE(tq_context))线检测一下是否tq_context任务队列有元素等待执行
                       set_task_state(curtask, TASK_RUNNING);如果有,把当前进程在设置为可执行状态
	    schedule();进行调度   	
	    run_task_queue(&tq_context); //被 schedule_task唤醒了,说明有元素被挂接到了tq_context					上面,取出来执行。
	    循环执行。在此进入休眠状态。直到被schedule_task唤醒。

(3):int schedule_task(struct tq_struct *task)
	#ret = queue_task(task, &tq_context);	//将task加入到任务队列中去。
	# wake_up(&context_task_wq);		//唤醒context_thread进程。

##注意:schedule_task和context_thread是相辅相成的一对函数。
*************************************************************************





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -