主要内容

模拟多核控制系统的调度器

概述

这个例子展示了如何使用SimEvents®块建模控件应用程序的任务调度。SimEvents扩展了Simuli万博1manbetxnk®,使其能够建模和模拟实时系统的体系结构组件。

顶层模型包括两个区块区域:

  • 功能组件包括两个闭环系统。每个都有一个比例控制器操作一个工厂。

  • 体系结构组件包括模拟该控制系统的任务和调度器的SimEvents块。

建模任务和调度器

本例将控制器建模为Simulink导出函数模型。万博1manbetx它将控制器的执行映射到操作系统定期调度和执行的软件任务。一个任务可以划分为多个段(或子任务)。由于数据依赖关系,这些段必须按顺序执行。

任务由以下参数指定:

  • ID:任务的唯一标识符。

  • 期:任务实例化执行的频率。

  • 优先级:任务优先级(值越小优先级越高)。

  • 可运行段(函数)列表:与任务的每个段相关联的可执行文件。这些可执行文件由导出函数模型的Simulink函数表示。万博1manbetx

  • 段执行时长:如果任务段在处理器上不间断地执行,则任务段完成的时间。

  • 每个段需要磁盘i/o资源:任务段是否需要使用互斥锁保护的共享资源(硬盘)。

例如,块Task 2为第二个控制器(块Controller2)指定一个任务。任务包括“t2_run”和“t2_write”两个片段,它们都被建模为seSwcController2模型中的Simulink函数。万博1manbetx在这些段中,“t2_write”需要使用互斥锁保护的共享资源。

操作系统的调度器由以下组件建模:

  • 任务创建:Block Task 1和Task 2创建任务并管理任务状态。一个SimEvents实体表示一个任务的实例。任务的属性(比如优先级)被建模为实体属性。

  • 任务队列:在实例化时,任务加入一个就绪任务队列,该队列由实体队列块OS任务队列建模。为了模拟非抢占式的基于优先级的调度策略,队列块被配置为根据taskPriority属性对任务进行排序。

  • CPU:系统的处理器被建模为实体服务器块CPU。它接受来自OS任务队列的实体,并在任务指定的时间内处理该实体段执行时间参数。在此延迟结束时,将调用此任务段的相应Simulink函数,作为块的Service com万博1manbetxplete操作的一部分。

  • 锁定/解锁互斥:在任务段进入块CPU之前,它必须在前面的Lock Mutex块获取所需的资源。在任务段完成并退出块CPU后,资源在解锁互斥锁块被释放。

  • 任务状态管理:Task 1和Task 2掩码下的块管理任务的运行时状态。当一个任务段完成后,如果该任务还有后续的任务段要执行,则该任务将被路由回OS任务队列。否则,此任务实例完成并丢弃。

结果和显示

块CPU配置了两个核。模拟该模型生成以下甘特图。

  • 优先级更高的任务task 2(红色条)被调度到核心1 (y = 1)。

  • 低优先级任务task 1(蓝色条)被调度到核心2 (y = 2)。

  • Task 2的第二段使用了互斥锁DiskLock。绿色条表示使用率(y = 3)。

探索模式

更改以下参数,并研究任务计划和控制器性能如何随着重新配置的体系结构参数而变化。

  • 在“块CPU”中,通过配置“容量”参数,可以改变块CPU的核数。

  • 在“任务1”和“任务2”块中配置“周期”、“优先级”等参数,可修改任务规格。

例如,如果我们改变每个段都需要磁盘i/o资源当Task 1块的参数变为[0 0 1]时,控制器1的t1_write段必须获得互斥锁DiskLock才能开始运行。模拟生成一个甘特图来说明这种变化。

  • 两个任务都有使用互斥锁DiskLock的段,如绿色条所示(y = 3)。

  • Task 1的第三段现在必须与Task 2的第二段以串行方式执行(参见y = 1),因为这两个段共享互斥锁DiskLock。

相关的例子

另请参阅

|||||

相关的话题