zoukankan      html  css  js  c++  java
  • 《精通linux设备驱动程序开发》第3章内核组件 学习笔记

    内核线程,是一种在内核空间实现后台任务的方式。

    1. 创建内核线程

    在内核被唤醒后,会激活一个用户模式辅助程序,并将切当的身份代码桩底给他。使用kernel_thread()可以创建内核线程:

    ret = kernel_thread(mythread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);

    2 .进程状态和等待队列

    等待事件过程中将mythread置于睡眠状态的代码片段:

    add_wait_queue(&myevent_waitqueue, &wait);
    
    for (; ; ) {
    /*  */
    Set_current_state(TASK_INTERRUPTIBLE);
    Schedule();  /* Relinquish the processor*/
    /* Point A */
    /* ... */
    }
    
    set_current_state(TASK_RUNNING);
    Remove_wait_queue(&myevent_waitqueue, &wait);

    进程队列用于存放需要等待事件和系统资源的线程。入列和出列的操作分别通过调用add_wait_queue()和remove_wait_queue()完成,唤醒队列中的任务通过wake_up_interruptible()完成。

    内核线程可以处于如下状态:

    运行状态(TASK_RUNNING),处于调度器的运行队列(run queue)中,等待CPU时间分给它;

    可被打断的睡眠状态(TASK_INTERRUPTIBLE),等待一个事件的发生;

    不可被打断的睡眠状态,信号发生不会导致该进程被重新放入运行队列;

    停止状态(TASK_STOPPED),收到了某些信号已经停止执行;

    追踪状态(TASK_TRACED),正在使用内核的ptrace支持;拦截一个进程;

    僵死状态(EXIT_ZOMBIE),进程已经被终止,但是其父进程并未等待它完成;

    stay hungry, stay foolish
  • 相关阅读:
    Nubiers to follow
    pp to write
    Reading source code
    build opencv with python support
    add monitor resolution
    Install cv2.so for Anaconda
    axios 上传下载显示进度
    vant 上传图片 图片回显 是base64
    多个时间段 合并
    热部署
  • 原文地址:https://www.cnblogs.com/zygote/p/13543879.html
Copyright © 2011-2022 走看看