现代计算机操作系统,都是多任务多并发的操作系统,因此可以同时打开多个应用程序,比如打开QQ的同时,可以打开浏览器看网页或者打开word。每一个应用程序,对操作系统来说就是一个进程或者说任务。操作系统管理着每一个进程,为进程分配内存空间,地址空间等资源,并且管理着进程的调度,当一个进程关闭时,会清除分配的资源。在操作系统内部,维护着一个进程列表。
可以打开任务管理器,查看系统中运行的任务列表,记录着当前启动的所有任务。
![adbdc40edc636bee40ac3f905e30f717.png](https://i-blog.csdnimg.cn/blog_migrate/793b495e1863fa1963e70a0765348761.jpeg)
多任务并发的实质
虽然说多个程序是同时运行的,但是CPU是有限的,比如在单CPU系统中,操作系统是如何保证多程序同时并发运行的呢?
一个程序的运行,都需要占有CPU,其他程序就必须停止运行。那怎么看起来其他程序也不受影响呢。就好比一个人同时转动多个陀螺,还需要保证每个陀螺不停止转动,你是不是会不停的轮流转动陀螺,才能保证所有的陀螺都不会停下来。
![2d5a837fcdc7f7eae97198ef9b9f02d7.png](https://i-blog.csdnimg.cn/blog_migrate/fbf5355d82c92532c6ed4d5d48fb71fa.jpeg)
其实,计算机操作系统的原理也是如此,给每个程序分配一个时间片,CPU轮流去运行程序,运行时间片的时间到了,就停止运行,转而去运行其他程序,也是执行一个时间片的时间停止。如此反复。由于时间片分配的极小,每个程序下次很快就能轮到,因此,人眼根本感觉不到变化,所以给人的感觉就是所以程序同时运行的。其实质还是同时只有一个程序子在运行。
当有多个CPU时,才是事实上的同时能处理多个程序,所以运算的速度会更快。比如有4个CPU,还是按上面的原理,只是真的有4个程序被调用。
调度方法
当一个程序执行的时间片用完时,如何调用下一个程序来执行呢?
比如你转动一个陀螺运行后,怎么选择转动下一个陀螺呢,可能你有这么几种方法,按先后顺序,一个一个轮流来;还可以按那个快停下来了,就转动那个的原则来。其实这就是一种调度方法,就是怎么选择下一个运行的程序的方法。
先来先服务调度方法, 按照任务列表中的顺序,依次执行。就相当于日常中的排队。执行一个任务,直到这个任务执行完,才开始执行下一个任务,很显然,这种方式是独占式的,不适合多并发操作系统。
![a31f8f5c128d8d24be735c8b1f80dd45.png](https://i-blog.csdnimg.cn/blog_migrate/59ac0128a28265a31e497923b55162ed.jpeg)
按优先级大小调度方法,按短进程优先级、高优先权优先级、高响应比优先级等给每个任务优先调度。
按时间片轮转调度方法,系统还是按照先来先服务调度就绪进程,但每次调度时,CPU都会为队首进程分配并执行一个时间片(几ms~百ms)。执行时间片用完后计时器即产生时钟中断,停止该进程并将它送到队尾,其他依次执行。这样保证系统能在给定的时间内执行所有用户进程的请求。
![6cfad6540f1e2349e7fbbbbf3b3a38ef.png](https://i-blog.csdnimg.cn/blog_migrate/6b5909e53adb14a555f3b312325b444c.jpeg)
多级反馈调度算法:前面都有局限性,综合-> 多级反馈调度算法则不必事先知道各进程所需的执行时间,而且还可以满足各类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。