操作系统2进程n探讨.ppt
文本预览下载声明
TechEd 2002 一、顺序程序设计 二、前趋图 四、进程的引入 60年代初,MIT首先提出“进程”这一计算机术语。 为使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制,OS将用户提交运行的程序先组织成“进程”,再投入运行。 OS具体做法是: 当用户向OS提交一个程序要求运行,OS即为提交运行的程序构筑一个称为“进程控制块”的数据结构,其中存放了该程序执行过程中的动态变化信息(程序和数据的地址、程序运行时CPU的环境信息等等)。 进程的定义 可以从3个方面来描述进程 进程是程序的一次运行活动 进程的运行活动是建立在某个数据集合之上的 进程要在获得资源的基础上从事自己的运行活动 进程同程序的区别与联系 四、进程的五个基本特征 外界干预 操作系统干预 如:当死锁发生时 父进程请求终止某一子进程 父进程终止,所以子进程也终止 进程的状态及变化 一、原语 相互合作的进程间数据未到达。2个进程相互合作,一进程需获得另一进程的数据才能运行,数据未到,只有等待。当数据可提供时,由另一进程唤醒它。 无新工作可做 系统中有些特定功能的进程,每当它们完成任务后都阻塞自己,等待下一次任务将其唤醒。 一、并发程序间的制约关系 二、进程互斥的解决 一、信号量 2、记录型信号量 2、有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问: 为描述读者的动作,应编写几个程序,设置几个进程? 试用wait、signal操作描述读者进程之间的同步关系。 读者进入阅览室的动作描述getin: while(1){ wait (seats); /*没有座位则离开*/ wait (mutex) /*进入临界区*/ 填写登记表; 进入阅览室读书; signal(mutex) /*离开临界区*/ signal(readers) } 读者离开阅览室的动作描述getout: while(1){ wait (readers) /*阅览室是否有人读书*/ wait (mutex) /*进入临界区*/ 消掉登记; 离开阅览室; signal(mutex) /*离开临界区*/ signal(seats) /*释放一个座位资源*/ } 理发师问题之参考解法 引入3个信号量和一个控制变量: 1)信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0; 2)信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为0; 3)信号量mutex用于互斥,初值为1. 4)控制变量waiting用来记录等候理发的顾客数,初值为0; int waiting; //等候理发的顾客数const int CHAIRS //为顾客准备的椅子数 semaphore customers,barbers,mutex; customers= 0; barbers= 0; waiting= 0; mutex= 1; 理发师进程: wait(customers); //若无顾客,理发师睡眠wait(mutex); //进程互斥 waiting --; //等候顾客数少一个 cut-hair( ); //正在理发 signal(barbers); //唤醒等待顾客signal(mutex); //开放临界区 顾客进程: wait(mutex); //进程互斥 if waitingCHAIRS //看看有没有空椅子{ waiting ++; // 等候顾客数加1 signal(customers); //必要的话唤醒理发师 signal
显示全部