这个例子展示了如何使用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。
实体发电机|实体服务器|队列|资源收购方|资源池|资源释放器