操作系统计算题

  • Post author:
  • Post category:其他





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

在这里插入图片描述


转自博主 专注学习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。



文件管理

在这里插入图片描述

在这里插入图片描述



版权声明:本文为gaiaxy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。