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

内核线程也可以叫内核任务,它们周期性地执行,例如,磁盘高速缓存的刷新,网络连接的维护,页面的换入换出等等。在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( );
}
}

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

注1:

(1)Linux 守护进程概述

Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等。
守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行。守护进程经常以超级用户(root)权限运行,因为它们要使用特殊的端口(1-1024)或访问某些特殊的资源。
一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程。守护进程是非交互式程序,没有控制终端,所以任何输出,无论是向标准输出设备stdout还是标准出错设备stderr的输出都需要特殊处理。

(2)工作原理(以网络服务为例,除此之外还有系统服务(eg:atd crond))

Linux 守护进程的工作模式是服务器/客户机(Server/Client),服务器在一个特定的端口上监听(Listen)等待客户连接,连接成功后服务器和客户端通过端口进行数据通信。守护进程的工作就是打开一个端口,并且监听(Listen)等待客户连接。如果客户端产生一个连接请求,守护进程就创建(Fork)一个子服务器响应这个连接,而主服务器继续监听其他的服务请求。

(3)工作模式

Linux 守护进程有两种工作模式:stand-alone模式和xinetd模式。
(1)stand-alone模式 
独立运行的守护进程由init负责管理,所有独立运行守护进程的脚本在/etc/rc.d/init.d/目录下。独立运行的守护进程工作方式称作stand-alone,是Unix传统的C/S模式的访问模式。服务器监听(Listen)在一个特点的端口上等待客户端的联机。如果客户端产生一个连接请求,守护进程就创建(Fork)一个子服务器响应这个连接,而主服务器继续监听。工作在stand-alone模式下的网络服务有route、gated、web服务器等。在Linux系统中通过stand-alone工作模式启动的服务由/etc/rc.d/下面对应的运行级别当中的符号链接启动。 
(2)xinetd模式 
从守护进程的概念可以看出, 对于系统所要求的每一种服务,都必须运行一个监听某个端口连接所发生的守护进程,这意味着资源浪费。为了解决这个问题,Linux引进了"网络守护进程服务程序"的概念。Redhat Linux使用的网络守护进程是xinted(eXtended InterNET Daemon)。和stand-alone模式相比xinetd模式也称 InternetSuper-Server(超级服务器)。xinetd能够同时监听多个指定的端口,在接受用户请求时,他能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求。可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给那个程序处理,然后启动相应的守护进程。
和stand-alone工作模式相比,系统不必为每一个网络服务进程监听其服务端口,运行xinetd守护进程就可以同时监听所有服务端口,这样就降低了系统开销,保护系统资源。但是对于访问量大、经常出现并发访问时,xinetd想要频繁启动对应的网络服务进程,反而会导致系统性能下降。 一般来说系统一些负载高的服务,比如Apache、sendmail等服务是单独启动的。而其他服务类型都可以使用xinetd超级服务器管理。
查看系统为Linux服务提供那种模式方法在Linux命令行可以使用pstree命令可以看到两种不同方式启动的网络服务。

(4)Linux 守护进程管理

Linux提供了几种不同的守护进程管理工具: ntsysv、chkconfig等,可以根据具体需要灵活运用。 
(1)ntsysv 
ntsysv 工具为启动或关闭由xinetd管理的服务提供了简单的界面,也可以使用 ntsysv 来配置运行级别。按照默认设置,只有当前运行级别会被配置。要配置不同的运行级别,使用 --level 选项来指定一个或多个运行级别。比如,命令 ntsysv --level 345 配置运行级别3、4、和5。使用上下箭头来上下查看列表。使用空格键来选择或取消选择服务,或用来"按"「确定」和「取消」按钮。要在服务列表和「确定」、「取消」按钮中切换,使用[Tab]键。* 标明某服务被设为启动。[F1] 键会弹出每项服务的简短描述。 
(3)chkconfig 
Chkconfig工具可以用来启动或停止服务。
chkconfig --list 命令显示系统服务列表,以及这些服务在运行级别0到6中已被启动(on)还是停止(off),还显示xinetd管理的系统服务。
chkconfig 还能用来设置某一服务在某一指定的运行级别内被启动还是被停运。比如,要在运行级别3、4、5中停运 nfs 服务,使用下面的命令: chkconfig--level 345 nfs off 

守护进程(内核线程和普通进程)相关推荐

  1. 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...

  2. linux 内核线程与普通进程的区别

    linux 内核通过内核线程这种方式来实现在后台运行一些操作. 内核线程是在内核空间中单独存在的标准进程.内核线程与普通进程最大的不同在于: 内核线程没有地址空间.内核线程只能工作于内核空间,不能上下 ...

  3. linux线程能删除自身吗,Linux内核本身和进程的区别 内核线程、用户进程、用户...

    这个概念是很多人都混淆的了,我也是,刚开始无法理解OS时,把Linux内核也当做一个进程. 其实内核本身不是以进程形式存在的,最多在初始化的过程中表现得就像一个进程,但是内核绝对没有进程的数据结构ta ...

  4. 进程和线程的区别 进程间的通信方式

    进程和线程都是操作系统实现并发执行的基本单元,但有以下区别: 1.资源拥有:进程有独立的地址空间,拥有系统资源的拷贝,线程共享进程的资源.进程间通信较麻烦,线程间通信简单. 2.执行单元:进程是程序的 ...

  5. 用户进程与内核进程是一一对应的吗_用户线程、内核线程和轻量级进程

    这一篇再继续就线程进行一些更深层次的研究 线程所需的资源 进程中各个线程共享代码.数据和文件等资源,记录线程运行状态的空间(TCB)每个线程单独有一个 每个进程都需要它自己私有的线程控制块(TCB) ...

  6. Linux 操作系统原理 — 用户进程、用户线程、内核线程、轻量级进程、协程的区别与联系

    目录 文章目录 目录 面向线程设计的 Linux 操作系统 用户进程(User Process) 用户进程的创建与销毁 进程的生命周期状态机 用户进程的调度 用户进程间通信 用户进程的子进程 用户线程 ...

  7. linux c进程和线程脑图,进程和线程

    关于进程和线程,你需要理解下面这张脑图中的重点 进程 操作系统中最核心的概念就是 进程,进程是对正在运行中的程序的一个抽象.操作系统的其他所有内容都是围绕着进程展开的. 在多道程序处理的系统中,CPU ...

  8. python的进程和线程定位_Python | 进程 线程的理解拾遗

    进程和线程的理解 线程是操作系统能够进行预算调度的最小单位,它包含在进程中是进程中的实际运作单位. Linux 进程有父进程和子进程,window 系统的进程是平等关系 一个标准的线程有线程 ID , ...

  9. python 协程、进程、线程_Python的进程、线程和协程 · Donzy’s Blogs

    0.前言 在计算机技术领域,吞吐量(throughput)是计算机在指定的一段时间内完成编程技术如何影响.本文主要讨论Python的多进程.多线程及协程等编程技术在不同场景下对系统吞吐量的影响. 1. ...

最新文章

  1. 在工作中有被动转主动的体会_积极主动应对眼前的一切,就是对自己最好的犒赏...
  2. 对一个伪装成微信的加固病毒的分析
  3. IBM服务器四大系列解析
  4. 消息称微软计划收购GitHub,估值超50亿美元
  5. 笔记本电脑键盘切换_全球首款折叠屏笔记本电脑ThinkPad X1 Fold:5G高速互联拥抱PC场景融合时代...
  6. ddr5内存上市时间_辣评烩:SK海力士首发DDR5内存:频率冲上5600MHz
  7. 4g 中bis代表什么_BIS的完整形式是什么?
  8. java as操作_java 对类型的基本操作小结
  9. 哈工大大数据实验_大数据创新实验室丨警大智慧警务学院人才培养打造新引擎...
  10. 很多人认为,因为我们是平民,做生意试不了错,输不起,试错成本太高
  11. Canvas绘图基本用法
  12. Android Studio 查询RecyclerView最新依赖方法
  13. 三人表决器实验报告总结_三人表决器实验报告.doc
  14. 电子信息工程专业概论_本科专业介绍 | 电子信息工程
  15. 林子雨大数据java练习
  16. 虚拟机怎么启动共享文件服务器,VMware虚拟机中ubuntu启用本地文件共享的设置方法...
  17. c++ map是有序还是无序的_实现有序map之go
  18. 名人博客阅读摘要三:外部排序
  19. Ubuntu18.04 Ceres Solver
  20. PEGA(Low-Code App Builder)Describing a data object

热门文章

  1. YouTube 赚钱套路:搬运抖音视频能月入上万美金?
  2. 美国移民局的I797表原件和I129表是什么呢
  3. solr的schema.xml配置属性解释
  4. ASP.NET用户个性化设置Profile——配置2 (转)
  5. 设计模式:javascript原型式继承
  6. 了解Web项目前后端分离开发流程,这一篇就够了
  7. Java读取Excel表格中的数据
  8. IDEA引入本地jar包的几种方法
  9. iOS设置状态栏颜色
  10. ubuntu20.0.4切换清华源_5G(NR)网络中“软切换”双活协议栈(DAPS)介绍