操作系统之进程、线程、协程

发表于:2020-4-23 09:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Sunmeok    来源:稀土掘金

  首先必须知道内核等概念
  内核
  内核的本质是一个软件,其作用是为了控制计算机资源如:控制磁盘IO、CPU资源等,提供上层程序的应用环境。
  系统调用
  就是一种不能再化简的系统操作,但是系统调用过于繁琐,因此封装了公用函数库供程序员使用,而shell是一种命令行工具,用来解释命令。
  进程:
  是代码静态指令的集合,进程是程序的动态执行过程的描述。为了避免某个任务过长占用资源,因此引入了pcb等概念让进程能够并发执行。进程的文章很多,这里不再赘述。
  线程:
  线程为什么会被引进,最早的进程都是内核中实现的,通过内核直接进行调度。
  1)两个进程相互切换,既要保存进程状态和数据又要负责切换进程。
  这两件事情使得进程的切换较为繁琐和沉重。因此引入线程,一个进程管理多个线程。进程只负责管理数据,每次系统切换时只需要进行线程的切换即可。
  这些都是单核系统的情况下,线程的作用
  2)时间回到线程没有被创造时,我们出现了多核cpu,支持了多个进程并行执行。如果只有一个进程,那么执行的时间依旧没有改变,也就是说多核提升了多个进程总任务的执行时间,但是没法提升单个进程的执行完其任务的时间。
  因此, 我们提出线程的概念,假如多个cpu只有一个进程,我们将进程的多个执行操作分隔,交给每一个线程执行,每个cpu核心负责一个线程,也就是说线程成为了最小调度单元,内核只需要控制线程即可,多个cpu可以控制同意进程的多个线程加速操作,这样就算一个进程也可以充分利用多核的优势。
  注意:这里所说的线程就是 内核线程 ,依然通过内核调用。如下图
  这种概念虽然很好,可是需要对内核进行修改,而内核过于复杂,因此首先在用户程序的层次实现了线程的概念,通过一个线程管理器进行线程的管理,也就是 用户线程 。如下图:
  我们发现用户线程仍然是通过单核心控制的。没法实现真正意义上的并行。并且当用户线程陷入系统调用,如执行IO等操作,依旧会阻塞当前进程。使得当前进程无法进行任何操作。因为内核是不知道用户线程的存在,它只知道进程的存在,当用户线程通知进程需要IO时,此时这个进程就会阻塞。
  这确实是用户线程的问题,但是有点在于:切换用户线程不需要操作系统进行切换,避免了 状态转换 (因为内核的操作都是需要内核态的权限才能执行。而内核线程是在内核的实现,每次转换都需要切换至内核态级别执行才可以,而用户线程则不需要)。因此会快很多
  用户态和内核态:
  指的是两种cpu的运行级别,不同的级别对应着不同的权限,内核态级别最高,可以执行内核各种操作,而用户态则不行。这么做是为了安全性。
  内核态用户态指的是级别 而 用户线程和内核线程指的是不同层面的线程实现 ,没什么直接关系。

本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号