操作系统 | 关于进程、线程、用户线程、内核线程

一、进程和线程

进程:操作系统分配资源的最小单位

线程:CPU调度的最小单位

  • 每个线程共享进程的代码段
  • 每个线程共享进程的数据段
  • 每个线程共享进程的堆
  • 每个线程都有自己的栈和一些私有的数据,所以相互之间可以不受影响

以上的意思就是进程是线程的”容器“,而线程是可以被CPU调度的最小单元。

执行流:逻辑上独立的指令区域,简单点就是能上CPU执行的,它具有:

  • 内存资源
  • 一套寄存器映像
  • 独立体现在每个执行流都有自己的

线程就是一套机制,为一般的代码块创造上下文环境,从而让代码块独立,使这块代码块能被调度器认可,从而能被专门调度到处理器上执行。

比如一个进程上有多个函数,那么对函数A pthread_create,其实就是为函数A创建上下文,让它成为了能在CPU上执行的独立指令区域,即执行流。

线程本质上就是函数。[1]

代码块(函数) + 上下文 = 执行流(线程),可被OS调度。

进程 = 资源 + 线程

二、用户级线程和内核级线程

根据运行环境和调度者的身份,线程可分为内核线程和用户线程。人为分的,CPU无所谓你内核还是用户。

  • 内核线程运行在内核空间,由内核来调度
  • 用户线程运行在用户空间,线程库调度

这句话很有意思,比如POSIX线程标准,为了可移植性,其实内核根本不知道有用户线程,pthread_create创造了多个线程后,如何能够并发?由POSIX的调度器来操作,一般某个权威机构发布线程库后,开发人员在用户进程中调用此库中的方法创建、结束线程等。线程库中一定存在着线程调度器[1]

那操作系统怎么给这些用户线程分配时间片运行呢?

答案是内核线程。操作系统只能“看到”内核线程,当进程的一个内核线程获得CPU的使用权后,它就加载并运行一个用户线程。可以说内核线程相当于用户线程运行的”容器“。[2]

三、Linux下调用pthread库创建的线程是用户级线程还是内核级线程的问题?

可以参考这个问题下[大河]的回答。

Linux下调用pthread库创建的线程是属于用户级线程还是内核级线程?

大致意思:

如果你 1:使用2.6的内核的系统平台,2:你的gcc支持NPTL (现在一般都支持),那么你编译出来的多线程程序,就是“内核级”线程了。

线程库为了移植性,只是在用户代码中实现了多线程。

例如在1:N模型中,一个内核线程对应多个用户线程,当操作系统调度至这个内核线程时,需要一个“线程库”(eg. POSIX pthread库) 中间层负责N个用户态线程的调度。

对于Linux而言,采用的是1: 1模型。

四、 参考资料

[1] 《操作系统真象还原》,作者郑钢,P406-P408

[2] 《Linux高性能服务器编程》,作者游双,P269

操作系统 | 关于进程、线程、用户线程、内核线程相关推荐

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

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

  2. 操作系统之进程管理:4、线程与多线程

    4.线程与多线程 思维导图 线程 进程的不足 什么是线程 为什么要引入线程 引入线程的好处 线程的特点 多线程 思维导图 用户级线程(ULT) 内核级线程 一对一模型 多对一模型 多对多模型 思维导图 ...

  3. java线程和linux线程,Java线程与Linux内核线程的映射关系

    Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上仍是轻量级进程(LWP). Java里的线程是由JVM来管理的,它如何对应到操做 ...

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

    http://blog.sina.com.cn/s/blog_605f5b4f010198b5.html Linux从内核2.6開始使用NPTL (Native POSIX Thread Librar ...

  5. java线程和linux线程,【转】Java线程与Linux内核线程的映射关系

    [暴力,STL,水]UVa 1523 - Helicopter Since ancient time, people have been dreaming of flying in the sky. ...

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

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

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

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

  8. 【Java 并发编程】线程池机制 ( 测试线程开销 | 启动线程分析 | 用户态 | 内核态 | 用户线程 | 内核线程 | 轻量级进程 )

    文章目录 一.测试线程开销 1.正常测试 2.不创建线程 3.只创建不启动线程 4.只启动不等待执行完成 二.分析测试结果 1.启动线程分析 2.用户线程与内核线程 3.轻量级进程 4.验证 Java ...

  9. Linux 操作系统原理 — 进程与线程管理

    目录 文章目录 目录 前言 进程与线程 内核线程,用户线程与轻量级进程 内核线程 轻量级进程 用户线程 轻量级进程与用户线程的区别 用户线程与轻量级进程的混合模式 用户线程和内核线程的区别 线程的实现 ...

最新文章

  1. R语言dplyr包使用mutate函数生成新的数据列(不改变原数据列)实战
  2. PHP闭包(Closure)初探
  3. 10---Net基础加强
  4. android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...
  5. MongoDB学习2——Windows 使用mongo连接数据库
  6. php连接oracle很慢是什么原因_通过DB LINK插入速度很慢的问题
  7. 什么是 ARM 架构处理器?
  8. 快速确定HIve表中数据是否重复
  9. 基于sklearn的西瓜数据集的SVR回归实现
  10. 隐马尔可夫模型简单介绍
  11. PHP批量上传一次点击选中多个
  12. 各个国家 不同字符集的unicode 编码范围
  13. ##DBUtils工具类的正确使用(一)
  14. 京东2017实习生Java.md
  15. Win10系统下如何修改电脑名称?windows10更改电脑名称的方法
  16. 【COCOS2DX-BOX2D游戏开发之二】 Box2d教程链接
  17. 【人工智能 Open AI】解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明。
  18. 四款职场效率神器,飞速提高你的工作效率
  19. html 取消settimeout,JavaScript中停止执行setInterval和setTimeout事件的方法
  20. python回调廖雪蜂_廖雪峰Python总结4

热门文章

  1. mac上投屏android_傲软投屏Mac版-傲软投屏for Mac下载 V1.2.9.1-PC6苹果网
  2. 高中物理如何计算机械能,高中物理怎么判断机械能的增大或减小
  3. Linux 防火墙操作(CentOS)
  4. STM32单片机K型热电偶温度采集及控制温控模块MAX6675热电偶LCD1602
  5. 嵌入式硬件开发工程师的工作内容
  6. 多张图片怎么合成gif?
  7. 珠峰峰顶首次5G通话背后的中国“荣耀”时刻
  8. Linux-剪切重命名命令
  9. 食品品牌全案项目清单 - 塔望3W消费战略全案服务清单
  10. iPhone Backgrounder终极教程