1、为什么要引入进程?
为了使多道程序能够并发执行。提高资源利用率和系统吞吐量。
2、什么是进程?
进程是一个正在执行程序的实例,包括程序计数器,寄存器和变量的当前值。进程是某种类型的一次活动,有程序、输入、输出和状态,单个处理器可被多个进程共享,使用进程调度算法决定何时停止一个进程并转而执行另一个进程(即进程切换)。
若一个程序执行两遍,则算作两个进程。
3、进程的特征:
动态性:是程序的一次执行;
并发性:进程是可以并发执行;
独立性:是系统进行资源分配和调度的一个独立单位;
异步性:进程间的相互制约,使进程执行具有间隙;
结构性:进程是具有结构的。
4、进程与程序的主要区别:
(1)程序是永存的;进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,存在是暂时的;
(2)程序是静态的观念,进程是动态的观念;
(3)进程具有并发性,而程序没有;
(4)进程是竞争计算机资源的基本单位,程序不是。
(5)进程和程序不是一一对应的: 一个程序可对应多个进程即多个进程可执行同一程序; 一个进程可以执行一个或几个程序
5、导致进程创建的事件:
(1)系统初始化(2)正在运行的程序执行了创建进程的系统调用(3)用户请求创建一个进程(4)一个批处理作业的初始化
新进程都是由于一个已经存在的进程执行了一个用于创建进程的系统调用而创建的(unix:fork;windows:CreateProcess)
进程创建后,父进程和子进程有各自不同的地址空间。有相同的内存映像、同样的环境字符串和同样的打开文件。
6、进程的终止:
(1)正常退出(自愿)。进程由于完成了自己的工作而终止
(2)出错退出(自愿)。例要编译的某文件不存在
(3)严重错误(非自愿)。由于程序中的错误所致:执行非法指令、引用不存在内存、除数为0等
(4)被其他进程杀死(非自愿)。某进程执行一个系统调用通知操作系统杀死其他进程
7、进程的状态
运行态:进程占用CPU,并在CPU上运行;
就绪态:进程已经具备运行条件,但是CPU还没有分配过来;
阻塞态:进程因等待某件事发生而暂时不能运行;
下面是3种状态转换图
运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高 优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态。
就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
以下两种状态是不可能发生的:
阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态。
在一些系统中,又增加了一些新状态,如挂起状态,可运行状态,深度睡眠状态,浅度睡眠状态,暂停状态,僵死状态。
可运行状态:运行状态和就绪状态的合并,表示进程正在运行或准备运行,Linux 中使用TASK_RUNNING 宏表示可运行状态。
浅度睡眠状态:进程正在睡眠(被阻塞),等待资源的到来是唤醒,也可以通过其他进程信号或时钟中断唤醒,进入运行队列。Linux 中使用TASK_INTERRUPTIBLE 宏表示此状态。
深度睡眠状态:其和浅度睡眠基本类似,但不可被其他进程信号或时钟中断唤醒。Linux 中使用TASK_UNINTERRUPTIBLE 宏表示此状态。
暂停状态:进程暂停执行接受某种处理。Linux 使用TASK_STOPPED 宏表示此状态。
僵死状态:进程已经结束但未释放进程控制块(PCB),Linux 使用TASK_ZOMBIE 宏表示此状态。
挂起状态:在执行状态的进程通过挂起即可进入就绪状态,如图所示,就绪状态和阻塞状态都分为活动态和静止态。由活动态向静止态转换就是通过挂起实现的。
引入挂起状态的原因有:
(1) 终端用户的请求。当终端用户在自己的程序运行期间发现有可疑问题时,希望暂时使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若此时用户进程正处于就绪状态而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。我们把这种静止状态称为挂起状态。
(2) 父进程请求。有时父进程希望挂起自己的某个子进程,以便考查和修改该子进程,或者协调各子进程间的活动。
(3) 负荷调节的需要。当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。
(4) 操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。
具有挂起状态的进程状态转换图为:
8、进程的实现:进程控制块PCB
PCB包含了进程状态的重要信息,包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行状态转为就绪或阻塞态时必须保存的信息,从而保证该进程随后能随时再次启动,就像未中断过一样。
中断向量:
每个中断源都有对应的处理程序,这个处理程序称为中断服务程序,其入口地址称为中断向量。所有中断的中断服务程序入口地址构成一个表,称为中断向量表;也有的机器把中断服务程序入口的跳转指令构成一张表,称为中断向量跳转表。
中断发生后,操作系统最底层的工作步骤:
9、多道程序设计模型:
CPU利用率-1-p^n
p:一个进程等待I/O操作的时间与其停留在内存中时间的比
n:多道程序设计的道数