操 作 系 统 习 题(期末复习/(ㄒoㄒ)/~~)
来自季某人的考试范围
大题:pv操作,周转时间,银行家算法,地址转换,置换算法,磁盘调度
下面是不知道从哪里来的习题
多道程序并发
一个计算机系统,有一台输入机和一台打印机,现有两道程序投入运行,且程序A先开始做,程序B后开始运行。程序A的运行轨迹为:计算50ms、打印100ms、再计算50ms、打印100ms,结束。程序B的运行轨迹为:计算50ms、输入80ms、再计算100ms,结束。试说明
(1)两道程序运行时,CPU有无空闲等待?若有,在哪段时间内等待?为什么会等待?
(2)程序A、B有无等待CPU的情况?若有,指出发生等待的时刻。
首先根据题中所给的AB程序的运行轨迹,画出程序运行的流程图,更为直观
题解
(1)两道程序运行期间,CPU存在空闲等待,时间为100~150之间
(2)程序A从图中可以看出并无等待现象,而程序B程序有等待cpu的时间段在180~200之间
下面文中的P(),V()也就是对应教材中的wait()与signal()
PV操作
桌子上有一只盘子,每次只能放入一只水果。爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个儿子专等吃盘中的桔子,一个女儿专等吃盘中的苹果。请利用P、V操作实现他们之间的同步。
问题是比较典型的多生产者多消费者问题,并且生产产品有多种,比较复杂,下面将列出题中所给的生产者,消费者。以便理清楚关系
生产者 | 生产产品 |
---|---|
爸爸 | 苹果 |
妈妈 | 桔子 |
消费者 | 消费产品 |
---|---|
女儿 | 苹果 |
儿子 | 桔子 |
临界资源 | 资源限量 |
---|---|
盘子 | 1 |
介绍一下pv操作是什么,我认为pv操作其实就是判断操作的plus版本,只不过pv操作通过原语操作,将原本判断操作的一些并发弊端撇除了,使得在pv代码块里的程序不能被别的进程所访问。同时在运行完毕还会通知试图进入这段程序却不能进入而进入等待状态的进程
其基本思想:将每一个共享变量与信号量(S:通常为1或0)联系起来,使用pv操作将临界区包围起来,所以也称为二进制信号量。
P操作:s=s-1,当s<0时,挂起进程到该信号量等待队列的未尾。
V操作:s=s+1,s<=0时,唤醒一个等待的进程,插入到就绪队列。
常见的生产者消费者代码中
mutex为临界区的互斥信号量
empty为缓冲池中空缓冲区的数量
full为缓冲池中满缓冲区的数量
下面是伪代码,两种思路上面那一种较为简单
//信号量的设置
/**
* plate: 代表盘子是否已经被占用
* apple: 盘子中是否有苹果
* orange:盘子中是否有桔子
*/
semaphore plate=1,apple=0, orange=0;
dad() {//父亲进程
while(1) {
prepare an apple;
P (plate) ;//互斥向盘中取、放水果
put the apple on the plate;//向盘中放苹果
V(apple) ;//允许取苹果
}
}
mom() {//母亲进程
while(1) {
prepare an orange;
P (plate);//互斥向盘中取、放水果
put the orange on the plate;//向盘中放橘子
V (orange) ;//允许取橘子
}
}
son() {//儿子进程
while(1) {
P (orange);//互斥向盘中取橘子
take an orange from the plate;
V (plate) ;//允许向盘中取、放水果
eat the orange;
}
}
daughter() {//女儿进程
while(1) {
P (apple) ;//互斥向盘中取苹果
take an apple from the plate;
V(plate) ;//运行向盘中取、放水果
eat the