正在加载
请稍等

菜单

红楼飞雪 梦

15526773247

文章

内核线程

android 嵌入式开发, linux开发学习 by

内核线程(thread)或叫守护进程(daemon),在操作系统中占据相当大的比例,当Linux操作系统启动以后,尤其是Xwindow也启动以后,你可以用”ps”命令查看系统中的进程,这时会发现很多以”d”结尾的进程名,这些进程就是内核线程。

内核线程也可以叫内核任务,它们周期性地执行,例如,磁盘高速缓存的刷新,网络连接的维护,页面的换入换出等等。在Linux中,内核线程与普通进程有一些本质的区别,从以下几个方面可以看出二者之间的差异:

  • 内核线程执行的是内核中的函数,而普通进程只有通过系统调用才能执行内核中的函数。
  • 内核线程只运行在内核态,而普通进程既可以运行在用户态,也可以运行在内核态。
  • 因为内核线程指只运行在内核态,因此,它只能使用大于PAGE_OFFSET(3G)的地址空间。另一方面,不管在用户态还是内核态,普通进程可以使用4GB的地址空间。

内核线程是由kernel_thread( )函数在内核态下创建的,这个函数所包含的代码大部分是内联式汇编语言,但在某种程度上等价于下面的代码:

int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{
    pid_t p;
    p = clone( 0, flags | CLONE_VM );
    if ( p )        /* parent */
        return p;
    else {          /* child */
        fn(arg);
        exit(  );
   }
}

系统中大部分的内核线程是在系统的启动过程中建立的

 

11 2015-09

 

我要 分享

 

 

本文 作者

 

相关 文章