Linux内核里线程,进程的区别
发布日期:2021-05-19 20:29:43 浏览次数:21 分类:精选文章

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

从内核的工程角度来看,它并不真正支持线程这个概念。Linux将所有所谓的线程都当成了进程来实现。内核并未专门开发调度算法或者设计特殊数据结构来处理线程。在内核中,线程仅仅被视为一个与其他进程共享资源(如地址空间)的进程。每个线程都有属于自己的task_struct,这使得它在内核中看起来和普通进程一样。

内核线程的工作方式

  • 内核线程的用途

    内核线程是用于执行那些需要在后台运行的操作的。这些任务通常涉及内核内部的管理工作或需要持续运行的系统服务。

  • 与普通进程的区别

    内核线程的地址空间与其他进程共享,具体表现为其mm结构体的指针为空。尽管在这个层面上看起来内核线程与普通进程不同,但在功能上它们却有许多相似之处。内核线程可以通过正常的调度机制被调度,也可以被其他进程抢占。

  • 内核线程的创建方式

    内核线程可以通过调用kernel_thread()函数来创建。该函数与我们常用的clone()系统调用的行为很相似,只是增加了一个标志位参数,来指定线程的创建模式。调用完成后,父线程将退出,返回一个指向子线程task_struct的指针。新创建的线程会立即开始执行指定的函数,并传递给它需要使用的参数。

  • 内核线程的运行特性

    如果没有外部事件需要其介入,内核线程通常会一直运行其在创建时所指定的函数。这样的函数通常会包含一种自我调度机制。例如,通过一个无限循环来等待外部事件的到来。在事件被触发时,外部进程可能会唤醒该线程,完成当前工作后该线程会再次进入休眠状态。

  • 这样一来,内核线程就成为了一个既能享受内核调度机制,又可以表示为独立进程的实体。这使得它在内核中与普通进程的处理方式相比,两者看起来更为统一。

    上一篇:Linux内核哈希表分析与应用
    下一篇:字符串比较函数-strcasecmp()和strncasecmp()

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月27日 05时59分17秒