context.c.txt

来自「linux内核学习笔记 希望想看的人可以很快下载到」· 文本 代码 · 共 39 行

TXT
39
字号
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 + =
减小字号Ctrl + -
显示快捷键?