目录
2.2与时间有关的错误:由于并发执行的程序共享资源或者互相协作, 因其执行速度的不确定性以及多道程序之间缺乏控制所带来的错误称为与时间有关的错误
一.进程的概念
1.程序的顺序执行
顺序执行的特点:
(1)顺序性
(2)环境的封闭性
(3)结果的可再现性
2.程序的并发执行
2.1并发执行带来的影响:失去程序的封闭性和可再现性
并发执行的优点:使系统的资源利用率提高,从而提高系统的处理能力。
2.2与时间有关的错误:由于并发执行的程序共享资源或者互相协作, 因其执行速度的不确定性以及多道程序之间缺乏控制所带来的错误称为与时间有关的错误
2.3导致这种“与时间有关的错误”出现的原因是:
与诸程序的执行速度有关;
2.4 并发执行的特征:
(1)并发性
(2)共享性
(3)制约性
(4)交互性
2.5 进程与程序的区别:
2.6 进程的定义:进程是程序的一次执行过程
2.7进程控制块的主要内容:
①进程标识符 (PID)进程符号名或内部 id号
②进程当前状态 本进程目前处于何种状态 (运 行、就绪、等待)
2.8进程的组成
二,进程状态
1.两态模型:
2. 三态模型
3.五态模型 进程状态转换:(重点)
4.进程的创建:
用户提交了一个新任务会创建相应的进程;
6.挂起态的特点:
(1) 进程不能立即执行;
三.Linux进程结构
1.Linux进程状态及转换
2.进程的控制结构
3.处理机状态
4.进程控制的操作
5.原语
进程控制通过原语实现。
原语:系统态下执行的特殊系统程序
6.通常将处理机的执行状态分成 核心态 和 用户态
7.进程的创建
功 能:创建一个具有指定标识符进程
8.进程的撤销
9.进程等待
10.进程的唤醒
四.LINUX进程及进程控制
1.Linux系统中各进程构成树型结构
2.init进程是所有用户进程的祖先
3.进程代码状态
4.fork的使用
#include <stdio.h>
main()
{ char command[32];
char *prompt="$"; //指向字符串的指针
while(printf("%s",promt),gets(command)!=NULL) //从键盘获取一个字符串
{ if ( (pid = fork( ) ) == 0)
execlp(command,command,(char *)0); //将字符串作为命令让子进程执行
else
wait(0); //父进程等待子进程执行完毕,再退出
} }
5.Linux进程控制
五.进程互斥与同步
1.进程间的关系:
2.临界资源:
一次只允许一个进程使用的资源称为临界资源(打印机)
3.使用临界资源的规则:
- 有空让进;
- 忙则等待;
- 有限等待;
- 让权等待。
4.信号量
5.信号量机制
6.PV操作
7.信号量可能的取值范围
互斥问题举例某车站售票厅有20个窗口,任何时刻最多可容纳20名 购票者进入,当售票厅中少于20名购票者时,则厅外 的购票者可立即进入,否则需在厅外等待。若把一个 购票者看作一个进程,请用P、V操作管理这些并发进 程,要求如下:⑴.在主函数中给出信号量的定义和初值。⑵.给出一个购票者进程的算法。⑶.给出当购票者最多不超过 n (设 n >20)个时,信号 量可能的变化范围。⑴.主函数描述: ⑵.购票者i的描述:int main() Pi( ) // i =1,2, … , n{ {int mutex=20; P(mutex);cobegin 购票;Pi( ); V(mutex);coend }}⑶.信号量mutex的取值范围: -(n-20) ≤ mutex ≤ 20其物理含义是:当mutex=20时 ,表示售票厅内没有购票者进入,20个窗口都 是空闲的,表示可用资源数;当mutex=0时 ,表示售票厅内已经进入了20个购票者,每个窗 口都被占用,没有等待的购票者,可用资源为0;当mutex=-(n-20)时 ,表示一共有n个购票者,其中20个购 票者已经进入厅内,分别占有一个窗口,还有n-20个购票者 在厅外等待,绝对值表示等待进程个数。结论:当mutex≥0时其值表示可用资源个数;当mutex<0时其绝对值表示等待进程的个数
8.两个过程
Wait (semaphore *S) Signal(semaphore *S)
{ {
S—>value-; S—>value++;
if(S—>value<0) block(S—>list) if(S—>value<=0)wakeup(S—>list)
} }
执行一次wait(S)表示申请一个单位资源
9.用P,V原语操作实现进程控制的方法与步骤:
每个进程中各个P操作的次序是重要的:先检查资源数目,再检查是否互斥――否则可能死锁!
哲学家进餐问题 (例2-17)问题描述 : 有 五个哲学家 共用一张圆桌, 分别坐在周围的五张椅子上, 圆桌上有五个碗和 五只筷子 , 每两个哲学家之间放一支 哲学家的动作包括 思考 和 进餐 进餐 时需要同时拿起他左边和 右边的两支筷子; 思考 时则同时将两支筷子放回 原处eat(i): begin if (i mod 2 == 0) then { P(c[i]); P(c[i+1 mod 5]); eating; V(c[i]); V(c[i+1 mod 5]); } else { P(c[i+1 mod 5]); P(c[i]); eating; V(c[i+1 mod 5]); V(c[i]); }
六.进程通信
1.进程通信IPC:进程间的信息交换。
2.进程通信的分类:
①低级进程通信(少量)
②高级进程通信(大量)
3.常用的消息传递的方式
4.消息缓冲机制
消息:进程之间相互传送的赖以发生交互作用的有结构的数据。
例1 用C语言写一个程序,建立一个pipe 同时父进程生成一个子进程,子进程向 pipe中写入一字符串,父进程从pipe中 读出该字符串#include <unistd.h> #include <stdio.h> int main(void) { int x,fd[2]; char buf[30],s[30]; pipe(fd); /*创建管道*/ while((x=fork())==-1);/*创建子程序失败时,循环*/ if(x==0) { sprintf(buf, "this is an example\n"); write(fd[1],buf,30); /*把buf中字符写入管道*/ exit(0); } else { wait(0); read(fd[0],s,30); /*父进程读管道中字符*/ printf("%s",s); } }