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
  • 相关阅读:
    Roce ofed 环境搭建与测试
    Ubuntu 1804 搭建NFS服务器
    Redhat 8.0.0 安装与网络配置
    Centos 8.1 安装与网络配置
    SUSE 15.1 系统安装
    VSpare ESXi 7.0 基本使用(模板、iso、SRIOV)
    VSpare ESXi 7.0 服务器安装
    open SUSE leap 15.1 安装图解
    KVM虚拟机网卡连接网桥
    GitHub Action一键部署配置,值得拥有
  • 原文地址:https://www.cnblogs.com/zygote/p/13543879.html
Copyright © 2011-2022 走看看