操作系统概论
重点知识
- 综合题:信号量编程
- 综合题:三种调度算法
- 简答题:实时调度进程个数与周期长度
- 未出:实时调度的最低松弛度算法
- 简答题:银行家算法
- 未出:动态分区分配三种算法和回收四种情况
- 综合题:基本分页的地址计算
- 未出:快表有效访问时间与命中率
- 未出:二级页表地址计算
- 未出:四种页面置换算法
- 未出:请求分页有效访问时间与命中率
- 简答题:i结点支持的单个文件最大长度
- 综合题:四种磁盘调度算法
信号量编程
题型1:单个进程两个信号量,初始值1或n,两次检查
某展会任何时刻最多可容纳500名参观者,当展厅中少于500名参观者时,则厅外的参观者可立即进入,否则需在外面等待。参观者进入展厅时,都必须在入口处登记(并领取资料和礼品),假定入口处有5位工作人员,每位工作人员每次只能接待一个参观者登记,请用记录型信号量机制时间参观者进程的同步算法。register()是完成登记并领取资料的函数;visit()是完成参观展览的函数;leave()是表示参观完毕离开的函数。下面已经给出了部分代码,请填写1-2空白处的代码。注:每一空可能不止一行代码。
struct semaphore cap; //表示展会容量
struct semaphore officer; //表示工作人员的信号量
_____________(1)_________
void process Vistor()
{
________(2)_______
}
(1) cap.value=500; //cap表示容量,500
officer.value=5; //officer表示检查,5
(2) wait(cap); //先检查容量看看能否进去
wait(officer); //再检查登记看能否登记
register();
signal(officer); //完成登记,解锁让给下一位
visit();
leave();
signal(cap); //完成参观,离开让给下一位
*题型2:双进程,生产消费者问题变型,考核数组指针
设无穷多个整数缓冲区,A进程读入整数并写入级缓冲区,B进程则从缓冲区取出整数进行打印,存放整数的变量为item,缓冲区名为buffer
读取过程函数getAltem(int *itm)
打印整数函数printAltem(int item)
来完成。
用记录型信号量机制实现上述两个进程的同步算法。补充程序每个空缺部分代码(可能是多行)
struct semaphore full;
int buffer[]; //缓冲区
int in,out; //缓冲区入口指针量和出口指针量
____________(1)_________
void processA()
{
int item; //存放整数的变量
_________(2)_______
}
void processB()
{
int item; //存放整数的变量
________(3)______
}
题目中已经给出单信号量和两指针,由于无限空间而且题目只给单个信号量,说明不必考虑缓冲区互斥,只考虑是否有数据可以取
A进程不必检查,只管放数据
B进程要检查是否有数据,再取出
full表示检查是否有数据
full是私有信号量,跨越两进程
由于无限空间,in和out都是++
注意getAItem函数的参数带*,所以传递参数时要用&
(1) in=0

本文深入探讨了操作系统概论的重点知识,包括信号量编程、调度算法、动态分区分配、分页地址计算等。通过实例解析,详细阐述了各种算法的工作原理和应用,如银行家算法、实时调度、页面置换算法等,旨在帮助读者深化理解操作系统的精髓。
最低0.47元/天 解锁文章
7558

被折叠的 条评论
为什么被折叠?



