操作系统复习笔记(二)

本文探讨了在操作系统中如何实现A、B两组进程共享文件的并发访问控制。通过设置计数器C1和C2,以及信号量S1、S2和SAB,确保同一组进程可以同时读取文件,而不同组的进程在有其他组进程读取时被阻塞,从而实现并发访问的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问答题:有一个文件F,有A,B两组进程共享这个文件,同组的进程可以同时读文件F,但当有A组(或B组)的进程在读文件F时就不允许B组(或A组)的进程读,

解:定义两个计数器C1,C2,分别记录A组和B组中读文件的进程数,三个信号量S1,S2,SAB,其中S1用于通知A组进程已经有B组进程在读文件F了,S2用于通知B进程已经有A进程在读文件F了,SAB用于实现对共享变量C1和C2以及临界区的互斥访问.

begin
            var S1,S2,SAB:semaphore 
=   1 , 1 , 1 ;
                 C1,C2:integer 
=   0 , 0 ;

                   process A
- i(i = 1 , 2 )
                    begin
                       repeat
             P(SAB);
                   C1 
=  C1 + 1 ;
             
if (C1 = 1 ) then P(S2);
             V(SAB);
              读文件F;
             P(SAB)
             C1 
=  C1 - 1 ;
             
if (C1 == 0 )V(S2)
             V(SAB)  
                until 
false
                    end      
    

                   process B
- i(i = 1 , 2 )
                    begin
                       repeat
             P(SAB);
                   C2 
=  C2 + 1 ;
             
if (C2 = 1 ) then P(S1);
             V(SAB);
              读文件F;
             P(SAB)
             C2 
=  C2 - 1 ;
             
if (C2 == 0 )V(S1)
             V(SAB)  
                until 
false
                    end        
  end 

2,应用题:get进程读数据到buffer1里,然后进程copy从buffer1里的数据复制到buffer2里,再由put进程取出buffer2里的数据去进行打印.

分析:这是两个阶段的生产-消费问题.第一阶段的生产者和消费者是get和copy,第二阶段的生产者和消费者是copy和put.为简单计,假设buffer1,buffer2 都是单缓冲区,因此只要设4个信号量empty1,full1,empty2,full2,就可以了.

 begin 
              buffer:integer
              empty1,empty2,full1,full2,:semaphore
= 1 , 1 ,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值