美文网首页java进阶
不同角度来剖析进程

不同角度来剖析进程

作者: buchuqi2677 | 来源:发表于2017-11-29 09:38 被阅读0次

通过cpu角度去理解进程的概念:

进程和线程都是一个时间段的描述,是对CPU工作时间段的一个描述。
下面细说背景:

CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。

一个最最基础的事实:

CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个任务要执行的时候怎么办呢?轮流着来?或者谁优先级高谁来?不管怎么样的策略,一句话就是在CPU看来就轮流着来。

一个必须知道的事实:

执行一段程序代码,实现一个功能的过程介绍 ,当得到CPU的时候,相关的资源必须也已经就位,就是显卡啊,GPS啊什么的必须就位,然后CPU开始执行。这里除了CPU以外所有的就构成了这个程序的执行环境,也就是我们所定义的程序上下文。当这个程序执行完了,或者分配给他的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的临幸。在被切换出去的最后一步工作就是保存程序上下文,因为这个是下次他被CPU临幸的运行环境,必须保存。

串联起来的事实:

前面讲过在CPU看来所有的任务都是一个一个的轮流执行的,具体的轮流方法就是:先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文。。。。

========= 重要的东西出现了========

进程和线程就是这样的背景出来的,两个名词不过是对应的CPU时间段的描述,名词就是这样的功能。

进程就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文线程是什么呢?

进程的颗粒度太大,每次都要有上下的调入,保存,调出。如果我们把进程比喻为一个运行在电脑上的软件,那么一个软件的执行不可能是一条逻辑执行的,必定有多个分支和多个程序段,就好比要实现程序A,实际分成 a,b,c等多个块组合而成。那么这里具体的执行就可能变成:

程序A得到CPU =》CPU加载上下文,开始执行程序A的a小段,然后执行A的b小段,然后再执行A的c小段,最后CPU保存A的上下文。这里a,b,c的执行是共享了A的上下文,CPU在执行的时候没有进行上下文切换的。

这里的a,b,c就是线程,也就是说线程是共享了进程的上下文环境,的更为细小的CPU时间段。到此全文结束,
再一个总结:进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。

并发的本质:是在时间上重叠的多个逻辑流,也就是说同时运行的多个逻辑流。

关于进程和线程,大家总是说的一句话是“进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元”。这句话理论上没问题,我们来看看什么是所谓的“资源”呢。

什么是计算机资源

经典的冯诺依曼结构把计算机系统抽象成 CPU + 存储器 + IO,那么计算机资源无非就两种:
  1. 计算资源
  2. 存储资源

CPU是计算单元,单纯从CPU的角度来说它是一个黑盒,它只对输入的指令和数据进行计算,然后输出结果,它不负责管理计算哪些”指令和数据“。 换句话说CPU只提供了计算能力,但是不负责分配计算资源。

计算资源是操作系统来分配的,也就是常说的操作系统的调度模块,由操作系统按照一定的规则来分配什么时候由谁来获得CPU的计算资源,比如分时间片

存储资源就是内存,磁盘这些存储设备的资源。在这篇计算机底层知识拾遗(一)理解虚拟内存机制 我们说了操作系统使用了虚拟内存机制来管理存储器,从缓存原理的角度来说,把内存作为磁盘的缓存。进程是面向磁盘的,为什么这么说呢,进程表示一个运行的程序,程序的代码段,数据段这些都是存放在磁盘中的,在运行时加载到内存中。所以虚拟内存面向的是磁盘,虚拟页是对磁盘文件的分配,然后被缓存到物理内存的物理页中。

所以存储资源是操作系统由虚拟内存机制来管理和分配的。进程应该是操作系统分配存储资源的最小单元。

再来看看线程,理论上说Linux内核是没有线程这个概念的,只有内核调度实体(Kernal Scheduling Entry, KSE)这个概念。Linux的线程本质上是一种轻量级的进程,是通过clone系统调用来创建的。何谓“轻量级”会在后面细说。进程是一种KSE,线程也是一种KSE。所以“线程是操作系统调度的最小单元”这句话没问题。

相关文章

  • 不同角度来剖析进程

    百科给出的概念:https://baike.baidu.com/item/%E8%BF%9B%E7%A8%8B/3...

  • 操作系统基础8-进程及进程控制

    进程(Process) 的定义 从不同的角度,进程可以有不同的定义,传统典型的定义: 进程是程序的一次执行过程。 ...

  • Android Binder原理

    1. Binder是什么 在Android中Binder是跨进程通信方式。不过从不同角度来开,binder也可以有...

  • 视野认知,剖析时代(2)

    我准备用另外一个角度来剖析这个主题,这系列主题的每一篇文章都代表着不同的角度,喜欢的人可以跟我一起讨论。下面就让我...

  • 虎兄虎弟

    从老虎和人的不同角度,剖析动物之间,动物与人之间的,人与人之间的关系。

  • 从“青铜”到“王者”的运营进阶之路

    这是个知识爆炸的时代,知乎、公众号、各种运营网站都从不同的角度来剖析运营的知识以及如何做好运营,我关注了很多的公众...

  • 计算机网络自学笔记:TCP

    传输层协议为运行在不同主机上的应用进程之间提供逻辑通信功能。从应用程序的角度看,通过逻辑通信,运行不同进程的主机好...

  • 好书推荐《孤独六讲》

    1、今天给大家推荐蒋勋老师的一部文学作品——《孤独六讲》。 2、作者从六大不同角度的来深层剖析:何为孤独?带我们探...

  • 拿破仑如何成为拿破仑?

    读《拿破仑传》,不同的人有不同感悟,肯定也有人从不同的角度去剖析这个人、这部书。 我很喜欢读这样的自传,他就像一本...

  • 20 AMS杀进程场景之汇总

    基于Android 6.0源码剖析,统计AMS所有可能杀进程的场景. 一. 杀进程场景[http://gityua...

网友评论

    本文标题:不同角度来剖析进程

    本文链接:https://www.haomeiwen.com/subject/pcxubxtx.html