内核线程

Ubuntu 14.04 32bit

先直观地认识一下

ps -eo pid,comm,cmd

  PID COMMAND         CMD
    1 init            /sbin/init
    2 kthreadd        [kthreadd]
    3 ksoftirqd/0     [ksoftirqd/0]
    5 kworker/0:0H    [kworker/0:0H]
    7 rcu_sched       [rcu_sched]
    8 rcu_bh          [rcu_bh]
    9 migration/0     [migration/0]
   10 watchdog/0      [watchdog/0]
   11 watchdog/1      [watchdog/1]
   12 migration/1     [migration/1]
   13 ksoftirqd/1     [ksoftirqd/1]
   15 kworker/1:0H    [kworker/1:0H]
   16 khelper         [khelper]
   17 kdevtmpfs       [kdevtmpfs]
   18 netns           [netns]
   19 writeback       [writeback]
   20 kintegrityd     [kintegrityd]
   21 bioset          [bioset]
   23 kblockd         [kblockd]
   24 ata_sff         [ata_sff]
   25 khubd           [khubd]
   26 md              [md]
   27 devfreq_wq      [devfreq_wq]
   30 khungtaskd      [khungtaskd]
   31 kswapd0         [kswapd0]
   32 ksmd            [ksmd]
   33 khugepaged      [khugepaged]
   34 fsnotify_mark   [fsnotify_mark]
   35 ecryptfs-kthrea [ecryptfs-kthrea]
   36 crypto          [crypto]
   48 kthrotld        [kthrotld]
   50 scsi_eh_0       [scsi_eh_0]
   51 scsi_eh_1       [scsi_eh_1]
   52 scsi_eh_2       [scsi_eh_2]
   53 scsi_eh_3       [scsi_eh_3]
   77 deferwq         [deferwq]
   78 charger_manager [charger_manager]
  127 kpsmoused       [kpsmoused]
  136 jbd2/sda8-8     [jbd2/sda8-8]
  137 ext4-rsv-conver [ext4-rsv-conver]
  266 upstart-udev-br upstart-udev-bridge --daemon
  272 systemd-udevd   /lib/systemd/systemd-udevd --daemon
  378 kvm-irqfd-clean [kvm-irqfd-clean]
  391 hd-audio0       [hd-audio0]
  438 upstart-socket- upstart-socket-bridge --daemon
  536 jbd2/sda1-8     [jbd2/sda1-8]
  537 ext4-rsv-conver [ext4-rsv-conver]
  544 jbd2/sda6-8     [jbd2/sda6-8]
  545 ext4-rsv-conver [ext4-rsv-conver]
  549 jbd2/sda7-8     [jbd2/sda7-8]
  550 ext4-rsv-conver [ext4-rsv-conver]
....
30017 kworker/0:2     [kworker/0:2]
30688 gvfsd-recent    /usr/lib/gvfs/gvfsd-recent --spawner :1.11 /org/gtk/gvfs/exec_spaw/2

第三列中中括号包裹的命令,对应的进程是内核线程。

内核线程是一种特权进程,有如下特点:

1. 以内核态运行在内核地址空间

2. 不与用户直接交互,因此不需要终端设备

3. 在系统启动时创建,然后一直处于活跃的状态直到系统关闭

这些个内核线程对应的proc/$pid/maps文件都是空的...

时间: 2024-10-08 19:36:58

内核线程的相关文章

用户线程和内核线程

1.内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态.切换完毕要从内核态返回用户态:可以很好的利用smp,即利用多核cpu.windows线程就是这样的.用户态转化为内核态的时候需要进行上下文的切换,是耗时的操作,因为有寄存器值的保存装载,内存缓存的失效和载入,中断程序的执行等. 2. 用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu,目前Linux pthread大体是这么做的. 线程的实现可以分为两类:用

(转)内核线程和用户线程的区别

内核级线程切换由内核控制,当线程进行切换的时候,由用户态转化为内核态.切换完毕要从内核态返回用户态:可以很好的利用smp,即利用多核cpu.windows线程就是这样的. 用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu,目前Linux pthread大体是这么做的. 线程的实现可以分为两类:用户级线程(User-Level Thread)和内核线线程(Kernel-Level Thread),后者又称为内核支持的线程或轻量级进程

linux进程的地址空间,核心栈,用户栈,内核线程

linux进程的地址空间,核心栈,用户栈,内核线程 地址空间: 32位linux系统上,进程的地址空间为4G,包括1G的内核地址空间,和3G的用户地址空间. 内核栈: 进程控制块task_struct中保存了2个page大小的信息. 为什么每一个进程都是用各自的内核栈呢? 引用(http://hi.baidu.com/iruler/blog/item/0c3363f377ccc5c90a46e023.html)“ 假设某个进程通过系统调用运行在内核态(使用这个全局内核堆栈),此时如果被抢占,发生

kobox : key_waitqueue.c -v1 怎样内核线程,怎样使用等待队列

平台:TQ2440 按键驱动 (1)在init中创建一个内核线程作为等待队列的处理函数,该内核线程是一个while(1)死循环,一直检测等待队列的触发条件 /* create a kernel thread */ kthread_run(key_wait_queue_handler, "thread_key_waitqueue", "[key_wait_queue]"); static int key_wait_queue_handler(void *name) {

Linux内核线程kernel thread详解--Linux进程的管理与调度(十)

日期 内核版本 架构 作者 GitHub CSDN 2016-06-02 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的描述 内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程就是内核的分身,一个分身可以处理一件特定事情.内核线程的调度由内核负责,一个内核线程处于阻

内核线程和进程的区别

http://blog.csdn.net/tigerjibo/article/details/8299686 前言: 从 内核的角度来说,它并没有线程这个概念.Linux把所有线程都当做进程来实现.内核并没有准备特别的调度算法或者定义特别的数据结构来表示线程.相反, 线程仅仅被视为一个与其他进程共享某些资源的进程.每个线程都拥有唯一属于自己的task_struct,所以在内核中,它看起来就像是一个普通的进程 (只是该进程和其他一些进程共享某些资源,如地址空间) 一.内核线程 1.内核经常需要在后

Java线程与Linux内核线程的映射关系

Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的.Linux 2.6上的HotSpot使用了NPTL机制,JVM线程跟内核轻量级进程有一一对应的关系.线程的调度完全交给了操作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度,举个例子,在linux下,只要一个Thread.run就会调用一个fork产生一个线程.

用户线程与内核线程的优缺点

转自http://col1.blog.163.com/blog/static/1909775192012719114033352/ 1 .内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态.切换完毕要从内核态返回用户态:可以很好的利用smp,即利用多核cpu.windows线程与Linux pthread大体是这么做的. 2. 用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu, 线程的实现可以分为两类:用户级线

用户线程和内核线程的区别

1 .内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态.切换完毕要从内核态返回用户态:可以很好的利用smp,即利用多核cpu.windows线程就是这样的. 2. 用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu,目前Linux pthread大体是这么做的. 线 程的实现可以分为两类:用户级线程(User-Level Thread)和内核线线程(Kernel-Level Thread),后者又称为内核支持的

kobox : key_waitqueue.c -v1 如何内核线程,如何使用等待队列

平台:TQ2440 按键驱动 (1)在init中创建一个内核线程作为等待队列的处理函数,该内核线程是一个while(1)死循环,一直检測等待队列的触发条件 DECLARE_WAIT_QUEUE_HEAD(key_driver_wq); /* create a kernel thread */ kthread_run(key_wait_queue_handler, "thread_key_waitqueue", "[key_wait_queue]"); static