操作系统计算题


单道、多道非抢占式和多道抢占式

在这里插入图片描述

转自博主 专注学习java


PV操作

在这里插入图片描述

拣棋子

在这里插入图片描述
在这里插入图片描述

水果

基础版

在这里插入图片描述

扩展版

在这里插入图片描述

加强版

在这里插入图片描述

超市购物

在这里插入图片描述

开车售票

在这里插入图片描述
在这里插入图片描述

银行叫号

某银行提供1个服务窗口和10个顾客等待座位。顾客到达银行时,若有空座位则占下,然后到取号机领取一个号,坐在座位上等待叫号。取号机每次仅允许一个顾客使用。当柜员空闲时,通过叫号选取一位顾客,并为其服务。顾客和柜员的活动过程描述如下:
顾客进程:
{
从取号机获得一个号码;
等待叫号;
获得服务;
}

柜员进程:
{
	叫号;
	为顾客服务;
}
//定义信号量
semaphore mutex=1,seats=10,service =0;
semaphore mutex = 1,service = 0,seets = 10;


//顾客进程
void customers(){
    P(seats); //首先申请座位
    P(mutex); //顾客之间的取号进程互斥,用metex来实现
    取号;
    V(mutex);
    V(service);//等待叫号
    等待获取服务;
}

//营业员进程
void assistant(){
    P(service); //提供服务
   叫号并且为客户提供服务;
    V(seats); //释放座位
}

void main(){
    cobegin
        customers();
        assistant();
    coend
}

和尚喝水

在这里插入图片描述

订机票

在这里插入图片描述
在这里插入图片描述

理发师

在这里插入图片描述
在这里插入图片描述

缓冲区读写

在这里插入图片描述
在这里插入图片描述

商品制约

在这里插入图片描述
转自https://www.renrendoc.com/paper/134699461.html

独木桥

有一个独木桥,过桥时,同一方向的行人可连续过桥;当某一方向有人过桥时,另一方向的人必须等待;当某一方向无人过桥时,另一方向的行人可以过桥。

	
		对于A方向:
		P(SA)
		IF (countA=0)
		THEN P(metux)
		countA=countA+1
		V(SA)
		过桥
		P(SA)
		countA=countA-1
		IF(countA=0)
		THEN V(metux)
		V(SA)



		对于B方向:
		P(SB)
		IF (countB=0)
		THEN P(metux)
		countB=countB+1
		V(SB)
		过桥
		P(SB)
		countB=countB-1
		IF(countB=0)
		THEN V(metux)
		V(SB)

读写

读者优先
int count = 0;                  //⽤用于记录当前的读者数量量 

semaphore mutex = 1;            //⽤用于保护更更新count变量量时的互斥 semaphore rw = 1;               //⽤用于保证读者和写者互斥地访问⽂文件 

writer () {                     //写者进程
        while (1) {        
        P(rw);                  //互斥访问共享⽂文件        
        Writing;                //写⼊入        
        V(rw);                 //释放共享⽂文件    
	}
}

reader () {                     // 读者进程
    while (1) {
	P(mutex);               //互斥访问count变量量        
	if (count == 0) {       //当第⼀一个读进程读共享⽂文件时            				 
		 P(rw);              //阻⽌止写进程写 
	}
	 count++;                //读者计数器器加1        
	 V(mutex);               //释放互斥变量量count        
	 reading;                //读取        
	 P(mutex);               //互斥访问count变量量       
	 count--;                //读者计数器器减1        
	 if (count == 0) {       //当最后⼀一个读进程读完共享⽂文件 	
	 	V(rw);              //允许写进程写  
	 }
	  V(mutex);               //释放互斥变量量count 
	}
}

写者优先
int readercount = 0;            //⽤用于记录当前的读者数量量 
int writercount = 0;            //⽤用于控制rsem信号量量 

semaphore rmutex = 1;           //⽤用于保护更更新readercount变量量时的互斥 semaphore wmutex = 1;           //⽤用于保护更更新writercount变量量时的互斥
semaphore rw = 1;               //⽤用于保证读者和写者互斥地访问⽂文件 
semaphore rsem = 1;             //当⾄至少有⼀一个写者申请写数据时互斥新的读者进⼊入读数据

writer() {
   while (1) {
   	 P(wmutex);
   	 if (writercount == 0) {            
   	 	P(rsem);        
   	 }       
   	 writercount++;        
   	 V(wmutex);        
   	 P(rw);        
   	 writing;        
   	 V(rw);        
   	 P(wmutex);        
   	 writercount--;        
   	 if (writercount == 0) {            
   	 	V(rsem);       
   	  }        
   	  V(wmutex);    
    } 
}
   
reader() {   
    while (1) { 
   	 P(rsem);        
   	 P(rmutex);        
   	 if (readercount == 0) {            
   	 	P(rw);       
   	  }        
   	  readercount++;       
   	  V(rmutex);        
   	  V(rsem);        
   	  reading;        
   	  P(rmutex);        
   	  readercount--;       
   	  if (readercount == 0) {           
   	   	 V(rw);        
   	   	}         
   	   	V(rmutex);   
    }
}


读写公平
int readercount = 0;            //⽤用于记录当前的读者数量量 
int writercount = 0;            //⽤用于控制rsem信号量量 

semaphore rmutex = 1;           //⽤用于保护更更新readercount变量量时的互斥 semaphore wmutex = 1;           //⽤用于保护更更新writercount变量量时的互斥
semaphore rw = 1;               //⽤用于保证读者和写者互斥地访问⽂文件 
semaphore rsem = 1;             //当⾄至少有⼀一个写者申请写数据时互斥新的读者进⼊入读数据

writer() {
   while (1) {
   	 P(wmutex);
   	 if (writercount == 0) {            
   	 	P(rsem);        
   	 }       
   	 writercount++;        
   	 V(wmutex);        
   	 P(rw);        
   	 writing;        
   	 V(rw);        
   	 P(wmutex);        
   	 writercount--;        
   	 if (writercount == 0) {            
   	 	V(rsem);       
   	  }        
   	  V(wmutex);    
    } 
}
   
reader() {   
    while (1) { 
   	 P(rsem);        
   	 P(rmutex);        
   	 if (readercount == 0) {            
   	 	P(rw);       
   	  }        
   	  readercount++;       
   	  V(rmutex);        
   	  V(rsem);        
   	  reading;        
   	  P(rmutex);        
   	  readercount--;       
   	  if (readercount == 0) {           
   	   	 V(rw);        
   	   	}         
   	   	V(rmutex);   
    }
}


银行家算法

在银行家算法的例子中,如果出现下述资源分配情况,试问:
Process  Allcation   Need   Available
P0    0 0 3 2   0 0 1 2   1 6 2 2
P1    1 0 0 0   1 7 5 0
P2    1 3 5 4   2 3 5 6
P3    0 3 3 2   0 6 5 2
P4    0 0 1 4   0 6 5 6
(1)该状态是否安全?
(2)进程P2提出请求Request(1,2,2,2)后,系统是否能将资源分配给它?
解:(1)利用安全性算法,对上述资源进行分配后找到可分配序列,<P0,P3,P1,P2,P4>,所以是安全的
Process  Work  Allcation  Need  work(Work+Allocation)  Finish
P0    1 6 2 2 0 0 3 2  0 0 1 2   1 6 5 4       true
P1    1 9 8 6 1 0 0 0  1 7 5 0    2 9 8 6       true
P2    2 9 8 6 1 3 5 4  2 3 5 6    3 12 13 10     true
P3    1 6 5 4 0 3 3 2  0 6 5 2    1 9 8 6       true
P4   3 12 13 10 0 0 1 4  0 6 5 6     3 12 14 14     true
(2)首先Request2(1,2,2,2)<=Need2;Request2(1,2,2,2)<=Available,于是假定系统对其进行资源分配
并修改Available、Allcation2、Need2向量,修改结果为Available(0,4,0,0),Allcation2(2,5,7,6),Need2(1,1,3,4)
Process Work Allcation Need work(Work+Allocation) Finish
P0 0 0 3 2 0 0 1 2
P1 1 0 0 0 1 7 5 0
P2 2 5 7 6 1 1 3 4
P3 0 3 3 2 0 6 5 2
P4 0 0 1 4 0 6 5 6
资源分配后对程序进行安全性检查,发现对于任意Needi<=Available(0,4,0,0)不成立。即Available不能满足任何进程的请求,系统进入不安全状态。所以不能分配!

CRC

在这里插入图片描述


由逻辑地址转物理地址

第一类:
在这里插入图片描述
第二类:
在这里插入图片描述


计算大小多少

在这里插入图片描述
在这里插入图片描述


访问主存时间和次数

在这里插入图片描述在这里插入图片描述


页面置换

假设有一台配置了虚拟存储器的计算机,其物理地址空间为64KB,逻辑地址空间为64KB,按字节编址。某进程正常运行最多需要6页数据存储空间,系统中每个页框的的大小是1KB,操作系统采用固定分配局部置换策略为此进程分配了4个页框。某时刻该进程占用页框情况如图所示,当该进程执行到时刻260时,要访问逻辑地址为13CAH的数据。
1.则该逻辑地址对应的页号是_____?
2.若采用先进先出(FIFO)置换算法,则最终该逻辑地址对应的物理地址是_____H(注意英文应大写)
3.若采用普通时钟(Clock)置换算法,设搜索下一页的指针按上表中的顺序循环移动,且当前指向页框号为4的条目,该逻辑地址对应的物理地址是_____H(注意英文应大写)
在这里插入图片描述
1.
13CAH=0001 0011 1100 1010
页的大小1KB=2^10,页内地址占10位,页号占16-10=6位
13CAH页号000100=4
2.
3号页进入时间最早,置换,即将4号页装入9号页框中,所以物理地址为0010 0111 1100 1010=27CAH
3.
根据CLOCK算法,如果当前指针所指页框的使用位为0,则替换该页;否则将使用位清零,并将指针指向下一个页框,继续查找。根据题设和示意图,将从4号页框开始,前4次查找页框号的顺序为4→2→9→7,并将对应页访问位清零。在第5次查找中,指针指向4号页框,此时4号页框访问位为0,故淘汰4号页框对应1号页,把4号页装入4号页框中,并将对应访问位设置为1,所以对应的物理地址为0001 0011 11001010B,换算成十六进制为13CAH。

文件管理

在这里插入图片描述

在这里插入图片描述

  • 5
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值