基于RT-Linux防危保障机制的实验模型
为使防危核尽可能小并具有通用性和扩展性,将含有防危策略的命令检测模块以函数的形式存在于防危策略库中,当防危核需要防危处理时,便到访问策略库中调用此相关函数。若设备改变,则只需向策略库中添加或修改相应设备的防危策略。另外,防危核作为内核模块,采用内核模块的编写方式编写,模块中只能使用系统调用函数。
下面定义以交通灯为模型的防危系统的防危策略。
返回值=0;
/*表明经防危核验证为正确命令*/
返回值=1;
/*命令经防危核直接传送到模拟设备而未经过安全检测模块验证,模拟设备状态根据此值改变*/
返回值=2;
/*当前设备状态验证失败,失败原因不明。
措施:模拟设备保持当前状态不变*/
返回值=3;
/*同一个方向有多个信号灯同时开启。
措施:所有交通灯都关闭,然后在收到新的命令前设备执行缺省命令序列,此处由模拟设备接到“3”
时直接处理*/
返回值=4;
/*四个方向同时为黄灯或绿灯。
措施:系统恢复到初始状态。在收到新的命令前设备执行缺省状态*/
反回值=5;
/*命令验证失败,失败原因不明,
措施:模拟设备保持当前状态不变*/
返回值=6;
/*信号灯保持当前状态的时间短于最短时间(<2s),
措施:模拟设备自动延迟(Sleep(Time))显示此命令*/
返回值=7;
/*使同一个方向有多个信号灯同时开启的信号灯命令错误。
措施:不执行此命令,保持当前信号灯状态*/
返回值=8;
/*命令的执行将会使信号灯变化的顺序不正确。
措施:不执行此命令,保持当前信号灯状态*/
返回值=9;
/*四个方面同时为黄灯或绿灯的命令。
措施:不执行此命令,保持不前信号灯状态*/
4.2 模拟设备模块
防危核系统中以十字路口交通灯模拟外部设备。当经防危验证设备命令合法时,此模拟接受防危核传入的真实设备命令int RealCmd(),并向防危核返回设备当前最新状态。用图形方式形象、直观地显示设备本身的实时状态(交通灯颜色的变化)、模拟设备当前接收的命令和命令验证结果(合法或非法命令,对非法命令显示出错原因)。
该进程中设有三个线程,其中第一个线程专门用于读管道FIFO6(实时管道)获取防危核发送的控制命令,第二个线程读管道myfifo(非实时管道)获取命令控制器发送的设备控制命令,第三个线程用TCL/TK脚本语言实现模拟设备形象、美观的图形显示功能。当模拟设备启动后,自动进行初始化并调用缺省的交通灯控制命令序列完成基本操作,直以有来自设备控制和防危核的设备控制命令为止。若交通灯的显示时间超过一定时间,则强制设备执行缺省的设备状态。
《基于RT-Linux防危保障机制的实验模型(第3页)》