根据以上安全监测系统的特点,技术研发人员郭工程师提出了一个自行编制简化“多任务嵌入式实时操作系统”的方案,以适应于协调管理硬件资源和监测对象的实际需求,其中只保留了标准的多任务实时操作系统的核心功能,例如CPU管理、中断管理和外设管理等。请在200字以内简

admin2009-02-15  25

问题 根据以上安全监测系统的特点,技术研发人员郭工程师提出了一个自行编制简化“多任务嵌入式实时操作系统”的方案,以适应于协调管理硬件资源和监测对象的实际需求,其中只保留了标准的多任务实时操作系统的核心功能,例如CPU管理、中断管理和外设管理等。请在200字以内简要说明郭工程师提出的简化的“多任务嵌入式实时操作系统”可能具有哪些优点。
在该水电站安全监测系统中,数据采集任务(Collect_task)把所采集的数据送入一单缓冲区,计算任务(Calculate_task)从该单缓冲区中取出数据进行计算。以下是利用信号量机制实现两个任务共享单缓冲区的C语言形式化描述程序。请将程序代码中(6)~(9)空缺处以及(10)空缺处的内容填写完整。
   int  sr=0’
   int  (6)  :
   main()
    {
             cobegin
                Collect_task();
                Calculate_task();
             coend
   }
   Collect_task()
   {
          While(采集工作未完成)
   {
          采集一个数据,
          P(se),
          将数据送入缓冲区中:
          (7)  ,
   }
}
   Calculate_task()
   {
           While(计算工作未完成)
   {
         (8)  ,
   从缓冲区中取出数据:
         (9)  
   进行数据计算送入缓冲区中,
   }
}
   如果以上程序中“int sf=0;”语句不小心被改写成“ints{=-1;”,那么系统运行时将会进入  (10)  状态。

选项

答案(6)se=1 (7)V(sf) (8)P(sf) (9)V(se) (10)死锁 这是一道要求读者掌握信号量操作机制的程序分析题。本题的解答思路如下: ①在本试题中,数据采集任务(Collect_task)和计算任务(Calculate_task)共用一个单缓冲区。数据采集任务(Collect_task)采集到一个数据后,只有当缓冲区为空时,才能将数据送入该单缓冲区存放,否则应等待单缓冲区腾空。当单缓冲区中有数据时,计算任务 (Calculate task)才能从缓冲区中取出数据进行计算,否则也应等待。 [*] ②本试题信号量操作机制的实质是一个典型的生产者——消费者操作问题,即需要使用两个任务间同步算法解决问题。 ③本试题中应设置两个信号量,其中一个信号量来表示缓冲区中是否有可供计算的数据,其初值为0。程序代码中“int sf=0;”语句正是对该信号量的定义。 ④实现两个任务间同步算法时,还需定义另一个信号量来表示单缓冲区中有无空位置存放新的数据,其初值为1。数据采集任务(Collect_task)程序代码中已给出“P(se),”语句,间接说明另一个信号量的标识是“se”。因此(6)空缺处所填写的内容是“se=1”。 ⑤当数据采集任务(Collect_task)将数据送入单缓冲区中时,应使用“V(sf),”语句唤醒原处于等待状态的计算任务(Calculate_task)。因此(7)空缺处所填写的内容是“V(sf);”语句。 ⑥由于计算任务(Calculate_task)需要等待单缓冲区中有数据时,才能从缓冲区中取出数据进行计算,也就是说,单缓冲区中没有数据时,计算任务(Calculate_task)应处于等待状态。因此(8)空缺处实现此功能语句的语句是“P(sf);”。 ⑦当计算任务(Calculate_task)从缓冲区中取出数据时,单缓冲区的空间被腾空,此时允许将新数据存人该单缓冲区,即单缓冲区的使用权限将交付给数据采集任务(Collect _task因此(9)空缺处需填入语句“V(se);”实现此功能。 ⑧当信号量sf的初始值为-1时,假设计算任务(Calculate_task)先被调度执行,它执行P(sf)操作时,使sf的值变为-2,计算任务(Calculate_task)进入阻塞状态。假设此时发生了一次时钟中断,数据采集任务(Collect_task)被调度执行,它顺利通过了P(se)操作,并使se的值变为o,接着在执行V(sf)操作,并使sf的值变为-1,假设满足“While(采集工作未完成)”判断条件,P(se)操作将再次执行,并使se的值变为-1,数据采集任务 (Collect_task)也进入阻塞状态。这样一来,两个任务都在等待对方释放信号量,就成为了一种死锁状态。

解析
转载请注明原文地址:https://jikaoti.com/ti/WgI7FFFM
0

最新回复(0)