操作系统课程设计题目详细说明 下载本文

题目11: P、V操作及进程同步的实现1 1 设计目的

掌握信号量通信方式的一般方法,了解系统实现“阻塞”和“唤醒”功能的方法和技巧。同时掌握进程同步和互斥的概念及实现技术。

2 设计内容

1)用语言编程实现P、V原语并用P、V原语描述如下生产者-消费者问题:

有一个理发师,一把理发椅和n把提供给等候理发的顾客座的椅子。如果没有顾客,则理发师便在理发椅子上睡觉;当第一个顾客到来时,必须唤醒该理发师进行理发;如果理发师正在理发时又有顾客到来,则如果有空椅子可坐,他就坐下来等待,如果没有空椅子,他就离开理发店。

为理发师和顾客各编一段程序描述他们的行为,要求不能带有竞争条件,试用P、V操作实现。

2)实验要求及说明

① 定义信号量并将P、V操作定义为带参数

② 以输出字符串的形式表示理发师和顾客的行为。

③ 设计适当的数据结构和函数描述顾客等待队列和“唤醒”理发师理发过程,以及没有顾客时的“阻塞”理发师过程。

④ 编程时需考虑理发师和顾客对应的程序是并发操作的。 提示:可利用随机函数模拟并发操作。

⑤ 理发师和顾客两个进程各自调用一个函数模拟生产及消费的操作。 消费者进程开始时首先测试生产者是否存在,若不存在,则循环测试直到生产者出现为止。消费者如果是第一次执行即转为睡眠状态,则直到生产者完成产品后再唤醒消费者,然后两者协调地工作下去。

3 思考题

1)你自己设计的程序是否会产生理发师与顾客都“一睡不起”的情况? 2)假设题目中由2名理发师和2把理发椅,上述程序应做哪些修改?

题目12: P、V操作及进程同步的实现2 1 设计目的

掌握信号量通信方式的一般方法,了解系统实现“阻塞”和“唤醒”功能的方法和技巧。同时掌握进程同步和互斥的概念及实现技术。

2 设计内容

用语言编程实现P、V原语并用P、V原语哲学家就餐问题:

为每个哲学家各编一段程序描述他们的行为,试用P、V操作实现。

题目13: shell编程 1 设计目的

1)了解shell在操作系统中的作用 2)学会编写简单的shell脚本程序 3)学会运行shell命令文件

2 设计内容

1)自学命令 cut, grep, sort, test。编写SHELL脚本,能将文件d1和d2整合为文件d3。

2)编写两个shell 脚本s1、s2,其中s1能够启动3个进程,进程名称分别为a,b,c,每个进程的代码如下:

int main() { while(1) {

}; return 0; }

s2 能够杀死这3个进程,并且要求s2的执行不允许人为指定参数。

3 思考题

Shell编程于一般编程的区别?

题目14:银行家算法 1 设计目的

1)了解多道程序系统中,多个进程并发执行的资源分配。

2)掌握银行家算法,了解资源在进程并发执行中的资源分配情况。 3)掌握预防死锁的方法,系统安全状态的基本概念。

2 设计内容

设计一个n个并发进程共享m个系统资源的程序以实现银行家算法。要求: 1) 简单的选择界面;

2) 能显示当前系统资源的占用和剩余情况。

3) 为进程分配资源,如果进程要求的资源大于系统剩余的资源,不与分配并且提示分

配不成功;

4) 撤销作业,释放资源。

编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。

银行家算法分配资源的原则是:系统掌握每个进程对资源的最大需求量,当进程要求申请资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需求资源最大量时,就满足进程的当前申请。这样就可以保证至少有一个进程可能得到全部资源而执行到结束,然后归还它所占有的全部资源供其它进程使用。

银行家算法中的数据结构

(1)可利用资源向量Available(一维数组)

是一个含有m个元素,其中的每一个元素代表一类可利用的资源数目,其初值是系统中所配置的该类全部可用资源数目。如果Available[j]=k, 表示系统中现有Rj类资源k个。

(2)最大需求矩阵Max(二维数组)

m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k, 表示进程i需要Rj类资源的最大数目为k。

(3)分配矩阵Allocation(二维数组)

m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation(i,j)=k, 表示进程i当前已分得Rj类资源k个。

(4)需求矩阵Need (二维数组)

是一个含有n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need(i,j)=k, 表示进程i还需要Rj类资源k个,方能完成其任务。

Need(i,j)= Max(i,j)-Allocation(i,j)

3 思考题

1) 理解避免死锁在当前计算机系统中不常使用? 2)现在的计算机系统是如何解决死锁问题的?