解说操作系统:(1)进程的基本概念

版权声明:分享,让世界更美好! https://blog.csdn.net/duwufeng/article/details/7786781

        进程是操作系统的核心概念,是正在运行的程序的一个抽象,那么我们有必要进行深入的分析了。

        现代操作系统都是多道程序设计,意思是:我们的单核心cpu也可以“同时”运行多个程序,比如你可以一边qq,一边酷狗听歌或者再干点别的。

        事实真的这样吗?你可能会说,事实真的就这样啊!那我告诉你,那是你的世界,在cpu的世界里,事实不是这样的。在cpu看来,他们是依次循环进行的(这里我们只考虑单核心)。就是说在某一个时刻,只能有一个任务在运行,要不qq,要不酷狗,但就是不能一起运行,因为它只有一个大脑。跟我们人类类似,我们的大脑在同一个时刻,也只能思考一件事情,现在的你在思考什么呢?因为cpu的运算速度非常快,在不同进程之间切换,从而给我们造成了他们一起运行的错觉,说白了就是:微观上串行,宏观上并行。有点像我们看电影,电影的微观世界里,是一帧一阵的静态图像,只是因为连续的切换,我们才看到了动态的影像。

       既然进程是程序运行的实体,那么一个进程需要哪些信息呢?先来举个做菜的例子吧,我暂时没想到更好的。这就需要考虑好多东西了,首先你得确定你要做几道菜,3道5道还是100道。每一道菜都有自己的名字;每一道菜都需要不同的原材料;每一道菜都是不同的制作手法;其实执行几个程序,跑几个进程,跟做菜没什么两样,我在怀疑这些科学家们是不是个个都是做菜的好手,俗话说的好嘛:会生活的人才会工作!呵呵

       如果执行了2个进程,那么这两个进程的名字肯定是不一样的了,我们就需要用一个唯一的标示符来区分他们;两个不同进程肯定执行的内容是不同的吧,那他们需要的运算数据肯定也不同,比如计算器需要的是大量数字计算,酷狗就只需要歌曲信息解码了;菜的制作手法就等价于进程的算法了。

        说这么多,还差一点!既然我们知道cpu的微观世界,进程是串行进行的。那到底是怎么串行的呢?

       举个例子:进程a:计算(34+54)*38;进程b:解码播放“假如你做了别人的小三儿”。以cpu时间为运行尺度。0-10ms:计算(34+54)= temp;10-30ms:解码播放“假如你做了”;30-40ms:计算temp*38 = 结果;40-60ms:解码播放“别人的小三儿”。至此,cpu在0-60ms内干了俩活儿,这么短的时间,估计我们是感觉不到俩活的切换的,满足了我们在听歌的同时顺便写写数学作业的要求!

       既然涉及到了进程切换,那都切换些什么呢:

       进程是程序的一次有效执行流,在10ms的瞬间,cpu把进程a移出到内存;30ms瞬间,cpu又把进程a移入到寄出去;为了保证计算的正确性,操作系统自己就要确保,当移出a时,必须保存a的当前计算位置(其实就是PC值),以便下次运行时接着上次暂停的地方运行,有点像我们读书时用的书签;有了计算位置还不够,还有保存进程a移出之前的状态信息和数据,例如临时数据如temp等等(进程上下文,说着叫进程运行环境)。

       操作系统对进程的切换,对进程来说是透明的。就是说:进程并不知道,自己被操作系统给换来换去的,断断续续的执行,进程一直以为自己操作系统的唯一,没曾想被卖了还得替人家数钱呢!专业话叫做:从概念上说,每个进程拥有它自己的虚拟cpu,实际上真正的cpu在各个进程之间来回切换。

         假设内存中有4道程序,每个进程都有自己的控制流(PC指针),各个进程都相互透明,即谁也不知道谁,但都正确的执行着。这怎么有点像我们的某些包2奶8奶的父母官啊,家里红旗不倒,外面彩旗飘飘的!看来他们是真正掌握操作系统精髓,并能熟练运用炉火纯青的人哪!实际的cpu只有一个物理PC,某个进程在运行时,它的逻辑PC值就被装入物理PC中,物理PC值运行并更新;当下一个进程要运行之前,该物理PC的值就又一次写回到当前进程的逻辑PC中,以保存执行位置(其实还保存了其他状态信息)。    

         操作系统就这么的来回切换运行进程,你说他累不累啊!

         多进程执行,一定比单进程好吗?就一点问题没有吗?下次咱再聊……

没有更多推荐了,返回首页