区别和联系

我们经常提到线程、线程组、内核进程、用户进程、轻量级进程等词汇,那么他们之间有什么区别和联系呢?

首先,我们需要明确一点,Linux下并没有真正意义上的线程,甚至可以说没有进程这个概念,Linux下只有task,其对应的数据结构为task_struct,这里为了方便说明以及按照比较主流的说法,我们将task称之为进程。

对于一个进程来说,它一定是运行在内存的某个连续或不连续的区域,先以用户进程为例。

用户进程和内核进程

对于Linux来说,有两个概念叫做内核空间和用户空间,以32位x86架构的Linux为例,Linux的虚拟地址空间为4GB,其中前1GB称为内核空间,后3GB称为用户空间,进程运行在内核空间时称为内核态,运行在用户空间称之为用户态。对于用户态进程来说,出于程序设计方便和内存安全的角度等原因,为每个用户态进程引入了独立的虚拟地址空间,其被映射到用户空间。

用户进程,平时运行在用户态,有自己的虚拟地址空间,但是可以通过中断、系统调用等内陷到内核态。
内核进程,没有独立的地址空间,所有内核线程的地址空间都是一样的,没有自己的地址空间,所以它们的”current->mm”都为空,其运行在内核空间,本身就是内核的一部分或者说是内核的分身。

线程、轻量级进程、线程组和用户进程

我们开始说到,linux下没有真正意义上的线程,那么linux下的线程是什么呢?

我们说过Linux下只有task,对应的数据结构为task_struct,task_strcut中就包含了task所拥有的各种资源,如果一个运行在用户空间的task独占task_struct的所有资源,我们说它是一个用户进程,当若干个task要共享资源时,我们把这些task称之为LWP(轻量级线程)。

Linux的线程只是共享了资源的进程,所以在Linux下,线程其实就是LWP,而那些共享了资源的task组合在一起,我们称之为线程组。

即对于普通的用户进程,我们可以认为是只有一个LWP的线程组,但对于一个有着多线程的进程(线程组),其中的每一个线程都是LWP,组内共享资源。在一个普通进程内创建线程时,就是在线程组内增加LWP。

进程的创建

在Linux下,有着这几个创建进程(task)的函数:
fork
vfork
clone
pthread_create
kernel_thread
所有的这些函数,最终都是在调用do_fork(),只是传入的参数不同

  1. fork(sys_fork)在调用do_fork()时,clone_flags没有置位任何clone标志位,即创建的进程不共享任何数据。
  2. vfork(sys_vfork)在调用do_fork()时,置为了CLONE_VFORK CLONE_VM,即共享VM,以及当mm_release时子进程唤醒父进程
  3. clone(sys_clone)本身只进行clone_flags的传递
  4. pthread_create 则将CLONE_VM CLONE_FS CLONE_FILES CLONE_SIGHAND等标志位置位,即共享VM,共享fs info,共享打开的文件,共享信号句柄和阻塞的信号? 即除了栈是独立的,其他都是共享的,所以在linux中,线程仅仅是一个使用共享资源的轻量级进程
  5. kernel_thread 在传递的参数基础上增加了CLONE_VM和CLONE_UNTRACED。
  • kernel_thread 只能由内核进程调用,创建的进程没有独立虚拟地址空间,只能运行在内核空间,为内核进程。
  • fork,创建的进程与父进程不共享资源,而是写时复制,故而创建的是用户进程
  • vfork,带有CLONE_VM标志位,故而创建的是LWP
  • pthread_create,共享各类资源,创建的也是LWP

关于fork vfork clone pthread_create kernel_thread 以及 do_fork更进一步的细节,先挖个坑,以后再填

Linux下内核进程、用户进程和轻量级进程(LWP)的理解相关推荐

  1. linux父进程中显示子进程pid,请教linux下c语言函数fork父进程打印子进程的PID

    请教linux下c语言函数fork父进程打印子进程的PID 关注:296  答案:2  信息版本:手机版 解决时间 2019-01-14 04:55 雨不眠的下 2019-01-13 12:23 用于 ...

  2. python将Linux下使用top命令获取的进程信息进行分析做可视化展示

    python将Linux下使用top命令获取的进程信息进行分析做可视化展示 版本 版本 作者 日期 备注 v1.0 ZY 2020.11.10 初版完成 文章目录 python将Linux下使用top ...

  3. linux下如何批量杀进程,Linux下如何批量Kill多个进程

    你知道Linux下如何批量Kill多个进程吗?灵活使用linux系统对于我们的学习和日常工作是非常重要的,那么下面我们就跟爱站小编一起去看看Linux下批量Kill多个进程的方法. ps -ef|gr ...

  4. 进程、轻量级进程(LWP)、线程

    进程.轻量级进程(LWP).线程 进程:程序执行体,有生命期,用来分配资源的实体 线程:分配CPU的实体. 用户空间实现,一个线程阻塞,所有都阻塞. 内核实现,不会所用相关线程都阻塞.用LWP实现,用 ...

  5. 转载_进程、轻量级进程(LWP)、线程

    进程.轻量级进程(LWP).线程 进程.轻量级进程(LWP).线程 进程:程序执行体,有生命期,用来分配资源的实体 线程:分配CPU的实体. 用户空间实现,一个线程阻塞,所有都阻塞. 内核实现,不会所 ...

  6. linux限制单个用户使用,linux下限制用户使用系统资源

    linux下限制用户使用系统资源 除了可以对用户设置磁盘配额以及权限做限制以外还可以使用ulimit可以对所有用户的core文件大小,数据段大小,最多可使用的CPU事件和最多可打开的文件数目等做限制, ...

  7. Linux下创建用户、切换用户、删除用户

    Linux下创建用户: useradd tooker #创建用户tooker passwd tooker #给用户tooker设置密码,如果没有设置密码该用户不能用 useradd -g users ...

  8. linux下普通用户如何使用80端口启动程序

    linux下普通用户如何使用80端口启动程序 http://blog.csdn.net/shootyou/article/details/6750230 大家都知道默认情况下linux的1024以下端 ...

  9. linux下普通用户更改密码原理(S权限)、SetUID

    linux下普通用户更改密码原理(S权限) 首先,我们来看  /etc/passwd  和 /etc/shadow  文件的权限: 可以看到passwd文件,所有者有读写权限,其他用户只能读 而sha ...

最新文章

  1. Java 分布式系统下的 9 点设计与实现
  2. angular ajax get post 参数,AngularJS - $ http.post发送请求参数而不是JSON的任何方式?...
  3. python双引号报错_Python中select语句中的双引号”“怎么处理
  4. 利用计算机可以对物体的运动情况,2018-2019学年高中物理第05章曲线运动专题5.3实验:研究平抛运动情景分组训练新人教版必修2.docx...
  5. Win知识 - 程序是怎样跑起来的——系统调用和高级编程语言的移植性
  6. Golang教程:类型
  7. STM32 C++编程 004 Adc (数模转换)类
  8. 12c集群日志位置_关于Oracle 12c的集群监控(CHM)
  9. iOS 控件宽高字体大小适配方法
  10. couchbase php,数据库大全-之-Couchbase
  11. jQuery监听鼠标滚轮事件
  12. window10家庭版设置Administrator用户net user administrator /active:yes
  13. 【读书笔记】巴比伦富翁的理财课
  14. 修改图片exif信息
  15. 计算机可以实现u盘和硬盘格式化,“资源管理器”和“计算机”窗口都可以实现U盘和硬盘格式化...
  16. 《淘宝店铺营销推广一册通》一2.3 热门赚钱行业网店成功秘诀
  17. 大数据哪个省才是高考地狱_是一名数据科学家,确实是地狱附近最性感的工作...
  18. 夏令营 | 推免 | 研究生复试简历制作总结
  19. 登山赛车2服务器正在维护什么意思,登山赛车2无法打开怎么办 登山赛车2登录不了解决方案...
  20. 创建一个Servlet项目流程(入门)

热门文章

  1. 和利时PLC主从站通讯
  2. const violate
  3. 【架构设计】作为架构师你应该掌握的画图技术
  4. NET 3行代码实现文字转语音功能
  5. SQL Server 数据库中数据库表导出为Excel表格
  6. K-mean(多维度)聚类算法(matlab代码)
  7. 群体遗传分析—LD连锁不平衡
  8. 能测试成绩的学习软件,普通话学习测试这个软件上,我平均成绩能达到二甲,请问如果在真正的普通话考试上,我大概能得到什么等级...
  9. CLDS(劳动力动态调查)2012-2016数据
  10. iOS企业证书的申请教程