上期回顾:
进程是程序的一次执行过程,操作系统以进程为单位调度任务;
多个进程共享CPU,每个进程都有自己的虚拟CPU,物理CPU就在这些虚拟CPU之间来回切换,构成多任务模型。
其实从单个任务的角度看,他们是不喜欢甚至讨厌操作系统的!
为什么?因为进程跟人一样,是贪得无厌的,而操作系统剥夺了他们独占硬件资源的权力!
注意:
由于CPU在各个进程之间来回快速切换,所以每个进程执行其运算的速度是不确定的;而且当同一个进程再次运行时,他的运算速度通常不可再现;所以,在对进程编程时决不能对时序做任何确定的假设。
分析:
1.由于硬件资源CPU有限,各个进程轮流运行,那么从单个任务的角度,他的执行过程就要受到其他任务的影响,比如其他任务的优先级,任务数量的多少等等!就像开车一样,你的奔驰能开250,但是也得路况满足才行,如果你在北京的路上,估计最多25了,呵呵!谁都想开的更快点,但是道路有限,别的车也得跑不是。所以你开车速度的多少(进程速度),就不取决于你自己了,取决于:道路的宽窄(CPU能力)、其他车的多少(进程数量),特权车的多少(优先级)。
2.再以北京交通为例,同一条道路,每一天的交通路况都不相同,取决于:车数量的多少,天气情况,是否有交通事故等等。那么你开同样一辆车,同样的道路,不同时间走得快慢就不一样,所以用的时间就不同了,这个很好理解。
3.正因为你不能对外界环境做非常精准的预期,同样你不能对自己的开车速度和开车时间做精准预期。天气多变,尾号限行,严重的你一晚上都未必能到家,比如说前两天北京的大暴雨,有的人3点才能到家,而有的人根本就到不了家了,哎!他们有错吗?他们没有区别,区别的是外部环境。祝福那些到不了家的人吧,更祝福你们的家人!
本质:
其实这种现象的造成,是有本质原因的。在于操作系统和单个进程本身,他们是一对矛盾体,各自存在的目的是不同的!
操作系统的存在:计算机那么多硬件资源,每次只让其中一个干活,其他人歇着太浪费了,我得把他们组织起来,谁都不能偷懒。有点资本家的味道,呵呵!
进程的存在:我有我的任务,就是最快的把我这边的工作完成,好向老板要奖励,我才不管他们之间谁歇着呢,只要我交给他们的活儿,一直没停就行。苦命的码农啊!
即:操作系统是为了宏观上硬件利用率的最大化,减小瓶颈损失;单个进程是为了独占资源,快速运行。一个全局一个个体,目的不同,矛盾产生!
既然矛盾天然形成,那么我们就只能最大化的避开。
注意:
当一个进程具有严格的实时要求时,也就是一些特定事件一定要在所指定的若干毫秒内发生,那么就必须采取特殊措施保证他们一定在这段事件中发生。但是,通常大多数进程并不受CPU多道程序设计或者其他进程相对速度的影响。
例如:进程A延时3S,操作系统就会让其阻塞,调度其他进程运行;等3S时间到,并不是说这个进程就能马上运行,而是操作系统把A再次放入就绪队列,产生调度中断。问题就在这里,调度中断并不能保证A一定运行,这跟调度算法有关了,其实就是刚开始说的问题了。如果想马上运行,就必须在优先级上,在调度策略上进行优化了!说了半天,又转回来了,其实就是一个问题,呵呵!