鱼C论坛

 找回密码
 立即注册
查看: 3097|回复: 1

[技术交流] kernel thread与进程描述符

[复制链接]
发表于 2016-3-29 11:02:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/***********kernel thread的创建*****************/
#include<linux/sched.h>       //wake_up_process()
#include<linux/kthread.h>     //kthread_creat,kthread_run()
#include<err.h>      //IS_ERR(),PTR_ERR()
struct task_struct *kthread_create(int (*threadfn)(void*),void *data
\
const char namefmt[],.....)   //创建内核线程
@threadfn:该新建的线程要执行的函数。关键是该函数要正确的睡眠,等待,执行,以
                                  //达到在空闲无事时让出CPU。
@data:传给线程函数的参数。
@namefmt:格式化的线程名。
struct task_struct *kthread_run(int (*threadfn)(void*),void *data,const char* name)
//常也用该函数创建,是对上面函数的宏
void kthread_stop(struct task_struct *kthread);
@kthread:结束一个线程,注意该线程必须此时在运行,否则永远都结束不了它了。
int kthread_should_stop(void)//常用在线程函数里面,测试该线程是否该停止执行




进程描述符 struct task_struct--------linux/sched.h,包含管理一个进程的所有信息,
比如打开的文件,地址空间,挂起的信号,进程状态-----内核中,
所有描述符用双链表连接起来----存放于该进程内核栈尾端
asm/thread_info.h-----struct thread_info位于进程内核栈尾端,内含指向task_struct结构的指针
宏current指向当前运行的进程task_struct;进程状态:TASK_RUNNING,TASK_INTERRUPTILE,
TASK_UNINTERRUPTIBLE,TASK_ZOMBLE(僵死态,子进程已经已结束运行,但父进程还未调用wait4()),
TASK_STOPPED(进程停止执行,比如收到SIGSTOP,SIGTSTP,SIGTIN,SIGTTOU等信号,将进入此状态。
set_task_state(task,state);/*设置指定进程为指定状态,对smp有特殊处理*/
set_current_state(state),task->state=state与上类似。
程序执行了系统调用或者触发某个异常,陷入内核空间执行,称为内核“代表进程执行”处于进程上下文。
next_task(task)宏,prev_task(task)宏,for_each_process(task)宏;
/*获取进程队列中下一个进程PCB指针,上一个进程PCB指针,遍历整个进程队列*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-6-14 10:42:09 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 02:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表