操作系统——进程章节作业

本文深入探讨了进程与线程的区别,包括调度性、并发性、资源拥有情况及系统开销等方面,并通过具体实例展示了使用AND信号量解决生产者-消费者问题的方法,以及利用信号量机制实现数据采集与计算任务之间的同步。

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

【题目1】试从调度性,并发性,拥有资源及系统开销方面对进程和线程进行比较。

(1)调度性:在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程,在引入线程的OS中,则把线程作为调度和分派的基本单位,而把进程作为资源拥有的基本单位;

(2)并发性:在引入线程的OS中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,亦可并发执行,因而使OS具有更好的并发性;

(3)拥有资源:无论是传统的操作系统,还是引入了线程的操作系统,进程始终是拥有资源的一个基本单位,而线程除了拥有一点在运行时必不可少的资源外,本身基本不拥有系统资源,但它可以访问其隶属进程的资源;

(4)系统开销:由于创建或撤销进程时,系统都要为之分配和回收资源,如内存空间等,进程切换时所要保存和设置的现场信息也要明显地多于线程,因此,操作系统在创建、撤消和切换进程时所付出的开销将显著地大于线程。

【题目2】什么是AND信号量?试利用AND信号量写出生产者一消费者问题的解法。

为解决并行带来的死锁问题,在wait 操作中引入AND条件,其基本思想是将进程在整个运行过程中所需要的所有临界资源,一次性地全部分配给进程,用完后一次性释放。生产者-消费者问题解法如下:

int i=0,out=0;
item buffer[n];
semaphore mutex =1,empty=n,full=0;
void producer()
{
    do
    {
           producer an item nextp;
           ......
           Swait(empty,mutex);
           buffer[in]=nextp;
           in=(in+1)%n;
           Ssignal(mutex,full);
      }while(TRUE);
}
void consumer()
{
    do
    {
          Swait(full,mutex);   
          nextc=buffer[out];
          out=(out+1)%n;
          Ssignal(mutex,empty);
          consumer the item in nextc;
          ......
     }while(TRUE);
}

【题目3】在测量控制系统中的数据采集任务,把所采集的数据送一单缓冲区;计算任务从该单缓冲中取出数据进行计算.试写出利用信号量机制实现两者共享单缓冲的同步算法。

(1)var mutex,empty,full:semaphore:=1,1,0;
gather:
    begin
        repeat
        ...
        gather data in nextp;
        wait(empty);
        wait(mutex);
        buffer:=nextp;
        signal(mutex);
        signal(full);
        until false;
    end
compute:
    begin
        repeat
        ......
        wait(full);
        wait(mutex);
        nextc:=buffer;
        signal(mutex);
        signal(empty);
        compute data in nextc;
        until false;
    end
(2)Var empty, full: semaphore:=1,0;
gather:
    begin
        repeat
        ......
        gather data in nextp;
        wait(empty);
        buffer:=nextp;
        signal(full);
        until false;
    end
compute:
    begin
        repeat
        ......
        wait(full);
        nextc:=buffer;
        signal(empty);
        compute data in nextc;
        until false;
    end

【题目4】何谓用户级线程和内核支持线程?

(1)用户级线程:仅存在于用户空间中的线程,无须内核支持。这种线程的创建、撤销、线程间的同步与通信等功能, 都无需利用系统调用实现。用户级线程的切换通常发生在一个应用进程的诸多线程之间,同样无需内核支持。

(2)内核支持线程:在内核支持下运行的线程。无论是用户进程中的线程,还是系统线程中的线程,其创建、撤销和切换等都是依靠内核,在内核空间中实现的。在内核空间里还 为每个内核支持线程设置了线程控制块,内核根据该控制块感知某线程的存在并实施控制。

【题目5】在生产消费者问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置,或者将signal(mutex)与signal(full)互换位置,结果如何?

在生产者—消费者问题中,如果将两个wait操作,即wait(full)和 wait(mutex)互换位置后,可能引起死锁。mutex在这里是全局变量,执行完wait(mutex),则mutex赋值为0,倘若full也为0,则该生产者进程就会转入进程链表进行等待,而生产者进程会因全局变量mutex为0而进行等待,使full始终为0,这样就形成了死锁。同样signal(mutex)与signal(full)互换位置后,从逻辑上来说应该也是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芷汀若静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值