操作系统进程同步例题(一)上机实习

操作系统进程同步例题(一)上机实习

题目: 某高校计算机系开设网络课并安排上机实习,设机房有共有2m台机器,有2n名学生选该课,规定:

(1)每2个学生组成一组,各占一台机器,合作完成上机实习

(2)只有一组2个学生到齐,并且此时机房有空闲机器时,该组学生才能进入机房

(3)上机实习由一名教师检查,检查完毕,一组学生同时离开机房

试用P、V操作实现上述实习进程

(提示:除了有学生和教师进程外,还应该有门卫进程)

PV操作题目分析步骤:

  1. 关系分析。找出题目中描述的各个进程,分析它们之间的同步、互斥关系。
  2. 整理思路。根据各进程的操作流程确定P、V操作的大致顺序。
  3. 设置信号量。并根据题目条件确定信号量初值。(互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)

分析
在这个问题中,学生,教师,门卫是并行操作,所以,可以设置一个学生进程用来申请进入机房和申请教师检查,一个教师进程用来检查一组学生是否完成并进行检查,一 个门卫进程用来检查一组两个学生是否到齐和检查机房是否有两台计算机。然后需要确定信号量和其初始值。student是必然需要的,表示是否有学生;computer表示当前可用的计算机的数量;enter是机房的准入通道;finish表示是否有学生完成了实习;test是老师时候检查完一组学生。初始情况下,除了computer设为2m, 其余都应该是0。以上信号量均为同步信号量。

伪代码如下:

semaphore stduent = 0;
semaphore computer = 2m;
semaphore enter = 0;
semaphore finish = 0;
semaphore test = 0;

//学生进程
Student() { 
    while(1) {
        V(student);  //有学生到达
        P(enter);    //申请进入
        do(); //实习
        V(finish);   //完成实习
        P(test);     //申请检查
        V(computer); //释放计算机
    } //while
} //Student()

//老师进程
Teacher() {
    while(1) {
        P(finsh);    //等待学生实习结束
        P(finsh);    //等待另一个学生实习结束
        test(); //检查
        V(test);     //允许学生离开
        V(test);     //允许另一个学生离开
    } //while
} //Teacher()

//门卫进程
Guard() {
    while(1) {
        P(student);   //等待一名学生
        P(student);   //等待另一名学生
        P(computer);  //申请一台计算机
        P(computer);  //申请另一台计算机
        V(enter);     //允许学生进入
        V(enter);     //允许另一名学生进入
    } //while
} //Guard()
上一篇:简单的 工厂模式


下一篇:ANSYS