目录
进程的描述:
进程的定义:
- 多道程序的环境下,程序的执行属于并发执行,此时他们讲失去封闭性,并具有间断性以及其运行结果的不可再现性特征;
- 因此,程序通常是不能参与并发执行的,否则程序的运行就失去了意义;
- 为了使程序并发执行,并且可以对并发执行的程序进行描述和控制,引入了"进程"的概念;
- 进程是程序的一次性执行;
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动;
- 进程是具有独立功能的程序在一个数据集合上运行的过程;
- OS中的进程定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位;
PCB:进程控制块:
- 为了使参与并发执行的每个程序都能独立运行,在操作系统中为之配置了一个专门的数据结构,称为进程控制块(Process Control Block);
- 系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程;
- 程序段,相关数据段,和PCB三部分组成进程实体;
- 创建进程,实际上就是创建进程实体中的PCB,撤销进程,实际上就是撤销进程的PCB;
进程控制块中信息:
- 进程标识符: 用于唯一的标识一个进程;
- 处理机状态:
- 进程调度信息: 进程状态,进程优先级, 进程调度所需信息 , 事件;
- 进程控制信息: 程序数据地址, 进程同步和通信机制, 资源清单, 链接指针;
进程的基本状态和转换:
-
进程的三种基本状态:
- 就绪状态:
- 进程已经准备好运行的状态,已经分配到处CPU之外的所有必要资源;
- 系统中有多个处于就绪状态的进程,通常按照一定的策略(如优先级策略)排成一个队列,称为就绪队列;
- 执行状态:
- 指进程已经获得CPU,程序正在执行的状态;
- 单处理机系统,只有一个进程处于执行状态;
- 阻塞状态:
- 正在执行的进程由于发生某些事件,(如I/O请求,中断缓冲区失败等,)暂时无法继续执行的状态;
- 进程运行收到阻塞;
- 此时引起进程调度,OS把处理机分配给就绪状态的进程,受阻进程处于暂停状态,这种暂停状态成为阻塞状态;
- 处于阻塞状态的进程也会排成阻塞队列;
创建状态和终止状态:
- 创建过程: 进程申请空白PCB--------->向PCB中填写控制管理进程的信息----------->为进程分配资源----------->初始化进程控制块---------->将进程转入就绪状态进入就绪队列;
- 创建状态: 系统内存不够,创建工作未完成,进程不能调度运行,此时de 状态为创建状态;
- 终止过程: 调用进程终止原语---------->将PCB清零---------->将PCB空间返还系统
- 终止状态: 进程到达了自然结束点,出现了无法克服的错误,或者被操作系统终结,
五种状态的转换:
进程同步:
基本概念:
- 为保证多个进程有条不紊的执行,多道程序系统中,引入了进程同步机制;
- 单处理机中的进程同步机制: 硬件同步机制, 信号量机制,管程机制;
两种形式制约关系:
- 间接相互制约: 由于共享资源,只是并发执行的程序之间相互制约;
- 直接相互制约: 多个进程之间的相互合作;
临界资源:
- 诸进程间采取互斥方式,实现某些资源的共享;
- l临界区: 每个进程中,访问临界资源的那段代码成为临界区;
- 访问临界资源的循环进程描述:
-
while(ture){ 进入区; 临界区; 推出区; 剩余区; }
生产者--消费者问题:
- 描述: 一群生产者进行生产产品,将产品供给消费者进程去消费,为了使生产者进程和消费者进程可以并发执行,两者之间设置了一个具有n个缓冲区的缓冲池;
- 生产者进程将所有生产的产品放入一个缓冲区中,消费者进程可以从一个缓冲区中取走产品消费;
- 所有生产者进程和消费者进程以异步方式进行,但它们之间必须同步;
- 利用数组buffer表示具有n个缓冲区的缓冲池;
- 每投入/取出一个产品时,缓冲池中暂存产品(已去追产品) 数组单元指针in(out)加一;
- in = (in+1)%n 或者 out =(out+1)%n 当 (in+1)%n =out, 表示缓冲池满; in=out ,表示缓冲池空;
- int in =0,out = 0, count =0 ; item buffer[];
- 局部变量nextp, 生产者进程里: 用来暂存每次刚刚生产出来的产品; 局部变量nextc,消费者进程里: 存放每次要消费的产品;
void producer(){
while(1){
produce an item in nextp;
......
while(count==n)
......
buffer[in]=nextp;
in = (in+1)%n;
counter++;
}
}
void consumer(){
while(1){
while(count==0)
......
nextc=buffer[out];
out = (out+1)%n;
counter--;
consumer an item in nextc;
}
}
同步机制规则:
- 空闲让进: 无进程处于临界区时,临界资源空闲,则允许一个进程进入临界区,有效利用临界资源;
- 忙则等待: 已有进程进入临界区,临界资源正在被访问,其他试图进入临界区的进程需要等待;
- 有限等待: 对要求访问临界资源的进程,保证有限时间内进入,防止陷入"死等";
- 让权等待: 进程不能进入自己的临界区,立即释放处理机,以免进入"忙等";
信号量机制:
- 整型信号量:
- 用于表示资源数目的整形量S,除了初始化,仅通过两个标准的原子操作wait(S),和signal(S)来访问;
- 这两个分别是P.V操作;
P操作: wait(S){
while(S<=0); //阻断资源
S--;
}
V操作: signal(S){
S++; //求释放资源
}
- 记录型信号量:
- 整型信号量机制中wait操作,只要信号量S<=0,就不断测试;
- 因此该机制未遵循"让权等待"的准则.而是使进程处于"忙等"的状态;