博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在驱动程序中改变进程状态并调用schedule()
阅读量:2350 次
发布时间:2019-05-10

本文共 1104 字,大约阅读时间需要 3 分钟。

理解Linux进程状态切换

static ssize_t xxx_write(struct file *file, const char *buffer, size_t count, loff_t *ppos){    ...     DECLARE_WAITQUEUE(wait, current); /* 定义等待队列,初始化一个名为name的等待队列  */    add_wait_queue(&xxx_wait, &wait); /* 添加等待队列,将等待队列wait添加到等待队列头xxx_wait指向的等待队列链表中 */    ret = count;    /* 等待设备缓冲区可写 */    do {        avail = device_writable(...);        if (avail < 0)            __set_current_state(TASK_INTERRUPTIBLE); /* 改变进程状态,直接采用current->state = TASK_INTERRUPTIBLE也可行,类似有__add_current_state() */        if (avail < 0) {            if (file->f_flags & O_NONBLOCK) { /* 非阻塞 */                if(!ret)                    ret = -EAGAIN;                goto out;            }               schedule();     /* 调度其他进程执行 */            if (signal_pending(current)) { /* 如果是因为信号唤醒 */                if(!ret)                    ret = -ERESTARTSYS;                goto out;            }           }       }while (avail < 0);     /* 写设备缓冲区 */    device_write(...);    out:    remove_wait_queue(&xxx_wait, &wait); /* 将等待队列移出等待队列头 */    set_current_state(TASK_RUNNING); /* 设置进程状态为TASK_RUNNING */    return ret;}

转载地址:http://qshvb.baihongyu.com/

你可能感兴趣的文章
Myeclipse的不足之一,struts 配置 action
查看>>
input /button链接方法
查看>>
CSS,font-family,好看,常用,中文,字体(更新中)
查看>>
struts2跳转后CSS和js失效的问题
查看>>
jenkins使用入门-----常规配置&遇到的坑
查看>>
Git使用基础---基础命令的使用
查看>>
Python3自定义模块导入---小白详解
查看>>
C语言基础---8.const的理解、左值&右值的理解
查看>>
C语言基础---5.数组相关详解:入门(一维数组 & 二维数组 & 应用案例)
查看>>
C语言基础---15.指针&数组名&数组地址&变量对应的加减法---图解篇
查看>>
C语言基础---14.指针数组 & 数组指针---图解篇
查看>>
C语言基础---11.数组相关常见的坑(字符数组、字符指针、strcpy与=区别)
查看>>
C语言基础---12.const使用(数组指针、指针常量,常量指针、常量指针常量、常量数组)
查看>>
Python经典算法(小白入门系列)------选择排序
查看>>
Python经典算法(小白入门系列)------希尔排序
查看>>
Flask-SQLAlchemy分组查询 & 查询后排序 & 更新数据 & 删除数据 ---ORM(6)
查看>>
Linux-----通过定时任务(crontab) 执行shell + python
查看>>
正则---re模块的基础用法(re.match() /单个字符匹配/ 多个字符匹配)
查看>>
Flask_sqlalchemy-------AttributeError: ‘str‘ object has no attribute ‘microseconds‘
查看>>
一次惨痛的教训:被pnscan病毒攻击的经过
查看>>