一、什么是进程?
进程=一个活动的程序,把程序加载到内存里执行。
进程的特点:
1).从内存的分配角度,每个进程都独占一块内存地址空间。
2).从逻辑角度,每个进程都可以被CPU所处理,也可以暂时挂起,让其他进程得以被处理,针对单核架构,同一时刻,只有一个进程能被CPU所处理,但是,有时候我们一边玩游戏还可以一边听音乐,这是为啥呢?因为CPU处理速度快,以及相关的进程调度算法的存在,使得宏观上感觉是并行处理的,但本质上是串行处理的。针对多核架构,宏观和微观都是并行的。
3).从时序角度,每个进程经过一段时间后,进度都是向前推进的。
二、为什么要引入进程呢?
最初的计算机是单道编程,比如一个程序,假设20%的时间再用CPU,80%的时间在做磁盘的I/O。因此可以看出CPU的利用率只用20%。所以引入进程的目的是满足多道编程,比如有两个进程,此时CPU的利用率为1-(0.8*0.8)=0.36。比如三个进程呢?CPU的利用率为1-(0.8*0.8*0.8)=0.48
多道编程的特点的是:随着进程的增多,CPU的利用率越高,此外,也可以减少响应时间。
产生进程的情况:
1).系统初始化时,会产生一些系统进程,比如回话进程,壳进程,登录进程,安全管理进程。
2).父进程创建子进程
3).用户请求产生进程
进程消亡的情况:
1).一个进程执行完毕而自行退出消亡(寿终正寝)
2).进程再执行过程中出错或由于异常引起的退出消亡(自杀)
3).被其他进程锁杀死(他杀)
三、进程的状态
进程的状态总体上分两种,执行态和挂起态.
对于挂起态,我们要明确是什么原因而挂起的。
1).一个进程由于执行时间过长而主动挂起,让CPU处理其他的进程。
2).一个进程在执行过程中由于发生某些I/O阻塞操作,而挂起。
3).一个进程主动执行了一些阻塞操作,比如:sleep而挂起。
针对第一种情况,给他CPU就可以继续执行,而对于第二种和第三种的进程,即使给他CPU,也处理不了,我们称之为阻塞态进程。
如果进一步划分的话:一个进程的状态可以分为执行态,就绪态,阻塞态
执行——就绪
执行——阻塞
就绪——执行
就绪——执行——阻塞
阻塞——就绪
阻塞——就绪——执行
四、什么是线程?
一个进程至少有一个线程,也可以有多个线程。
引入线程的目的,就是能够让一个进程同时做多件事,所以,引入线程后,CPU执行的最小单位是线程。
五、进程或线程的调度算法
1).First Come First Server(FCFS)先来先服务调度算法
该算法,类似与最初的单道编程,效率比较低。
2).时间片轮转调度算法
当有三个进程时,CPU可以先处理第一进程一段时间,然后再处理第二个进程一段时间,然后处理第三个进程一段时间,这样循环往复。但是有一个局限性,假设CPU轮转每隔一秒轮一次,如果第三个进程实际业务需要一秒就可以处理完,但是却需要三秒。所以,会使得短任务的进程处理时间变长。
3).短任务优先算法
该算法虽然解决了第二种算法的局限性,但是假如系统中有多个短任务,那么就会导致一些很重要但是长任务的进程不能被CPU处理,所以我们又引出了下一种算法。
4).优先级调度算法
优先处理优先级高的进程,在系统的进程中,为一些重要并且需要先被CPU执行的进程设置高优先级。但是也有局限性,可能使得低优先级的进程不能被处理。所有又有了下面的算法
5).混合调度算法
该算法混合了上述的四种算法
进程=一个活动的程序,把程序加载到内存里执行。
进程的特点:
1).从内存的分配角度,每个进程都独占一块内存地址空间。
2).从逻辑角度,每个进程都可以被CPU所处理,也可以暂时挂起,让其他进程得以被处理,针对单核架构,同一时刻,只有一个进程能被CPU所处理,但是,有时候我们一边玩游戏还可以一边听音乐,这是为啥呢?因为CPU处理速度快,以及相关的进程调度算法的存在,使得宏观上感觉是并行处理的,但本质上是串行处理的。针对多核架构,宏观和微观都是并行的。
3).从时序角度,每个进程经过一段时间后,进度都是向前推进的。
二、为什么要引入进程呢?
最初的计算机是单道编程,比如一个程序,假设20%的时间再用CPU,80%的时间在做磁盘的I/O。因此可以看出CPU的利用率只用20%。所以引入进程的目的是满足多道编程,比如有两个进程,此时CPU的利用率为1-(0.8*0.8)=0.36。比如三个进程呢?CPU的利用率为1-(0.8*0.8*0.8)=0.48
多道编程的特点的是:随着进程的增多,CPU的利用率越高,此外,也可以减少响应时间。
产生进程的情况:
1).系统初始化时,会产生一些系统进程,比如回话进程,壳进程,登录进程,安全管理进程。
2).父进程创建子进程
3).用户请求产生进程
进程消亡的情况:
1).一个进程执行完毕而自行退出消亡(寿终正寝)
2).进程再执行过程中出错或由于异常引起的退出消亡(自杀)
3).被其他进程锁杀死(他杀)
三、进程的状态
进程的状态总体上分两种,执行态和挂起态.
对于挂起态,我们要明确是什么原因而挂起的。
1).一个进程由于执行时间过长而主动挂起,让CPU处理其他的进程。
2).一个进程在执行过程中由于发生某些I/O阻塞操作,而挂起。
3).一个进程主动执行了一些阻塞操作,比如:sleep而挂起。
针对第一种情况,给他CPU就可以继续执行,而对于第二种和第三种的进程,即使给他CPU,也处理不了,我们称之为阻塞态进程。
如果进一步划分的话:一个进程的状态可以分为执行态,就绪态,阻塞态
执行——就绪
执行——阻塞
就绪——执行
就绪——执行——阻塞
阻塞——就绪
阻塞——就绪——执行
四、什么是线程?
一个进程至少有一个线程,也可以有多个线程。
引入线程的目的,就是能够让一个进程同时做多件事,所以,引入线程后,CPU执行的最小单位是线程。
五、进程或线程的调度算法
1).First Come First Server(FCFS)先来先服务调度算法
该算法,类似与最初的单道编程,效率比较低。
2).时间片轮转调度算法
当有三个进程时,CPU可以先处理第一进程一段时间,然后再处理第二个进程一段时间,然后处理第三个进程一段时间,这样循环往复。但是有一个局限性,假设CPU轮转每隔一秒轮一次,如果第三个进程实际业务需要一秒就可以处理完,但是却需要三秒。所以,会使得短任务的进程处理时间变长。
3).短任务优先算法
该算法虽然解决了第二种算法的局限性,但是假如系统中有多个短任务,那么就会导致一些很重要但是长任务的进程不能被CPU处理,所以我们又引出了下一种算法。
4).优先级调度算法
优先处理优先级高的进程,在系统的进程中,为一些重要并且需要先被CPU执行的进程设置高优先级。但是也有局限性,可能使得低优先级的进程不能被处理。所有又有了下面的算法
5).混合调度算法
该算法混合了上述的四种算法