多核控制系统的模拟调度

概观

这个例子展示了如何使用SimEvents块的控制应用程序的任务调度模型。SimEvents扩展的Simuli金宝appnk与能力模型和实时系统的模拟架构组件。

顶级车型包括块的两个方面:

  • 功能组件包括两个闭环系统。每个都具有操作的植物的比例控制器。

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

建模任务和调度程序

这个例子车型控制器作为Simulink中导出的函数模型。金宝app它映射控制器执行的软件任务的操作系统定期调度和执行。任务可以被划分为多个分段(或子任务)。由于数据相关性,这些段必须以连续的顺序被执行。

一个任务是用下列参数指定:

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

  • 期:如何频繁任务被实例化执行。

  • 优先:任务的优先级(数值越小表明优先级更高)。

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

  • 段执行持续时间:时间一任务段来完成,如果它在处理器上不间断地执行。

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

例如,框任务2个指定为所述第二控制器(块控制器2)的任务。任务包括两个段,“t2_run”和“t2_write”,既建模为在模型seExampleSwcController2 Simulink的功能。金宝app在这些细分市场,“t2_write”需要使用互斥保护共享资源。

操作系统的调度器被模仿为具有以下组分:

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

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

  • CPU:系统的处理器被建模为一个实体服务器块CPU。它从OS任务队列中接受实体,并在任务指定的持续时间内处理实体段执行持续时间参数。在此延迟结束时,这个任务段的相应的Simulink函数被调用,作为块的服务完整的行动的一金宝app部分。

  • 锁定/解锁互斥:任务片段进入块CPU之前,必须获得在上述锁定互斥块所需的资源。任务完成段和退出块CPU之后,资源是在解锁互斥块释放。

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

并显示结果

块CPU配置有两个核心。模拟该模型生成如下甘特图。

  • 较高优先级任务,任务2(红色条),预定芯1(Y = 1)。

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

  • 任务2的第二段使用互斥DISKLOCK。绿线表示使用(Y = 3)。

探索模式

更改以下参数,并探讨如何任务计划和控制器性能的变化与重新配置的结构参数。

  • 在块CPU中,配置参数容量来更改核心的数量。

  • 在块Task 1和Task 2中,配置诸如Period和Priority之类的参数来更改任务规范。

例如,如果我们改变需要磁盘I / O资源为每个段任务1块,以[0 0 1]的参数,控制器1个必须获得互斥DISKLOCK的t1_write段,才可以开始运行。模拟产生的甘特图示出这种变化。

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

  • 任务1的第三区段现在必须以串行方式与任务2的第二区段执行(参见Y = 1),因为这两个部分共享互斥DISKLOCK。

相关的例子

也可以看看

|||||

相关的话题