文档介绍:基于 COP控制软件安全性研究方法
1 前言
导致软件失效的原因主要有两类,一类是程序的逻辑错误,如某个
公式的代码描述错误;另一类是对软件在不同环境中运行没有正确设计。
例如199
EventCJ等都可以实现。但是对于控制软件安全性升级,危险状态的触发很有可能需要改变执行器的行为,例如停止马达的转动,在危险消除以后
恢复执行器的原有执行状态。
从控制软件的角度来看,执行器是程序中的临界资源,软件的安全
相关部分对其访问和修改会影响到应用相关部分原来的运行结果,而目前
的 COP
支撑机制并没有对程序行为切换过程中临界资源的访问控制提供明确的支
持。针对上面的问题,我们对 EventCJ
做了一定的改进,对于程序行为切换过程所影响的临界资源提供对其上下
文保存和恢复的支持机制,并且在Lego NXT上实现了一个运行支撑机制。
本文第二部分介绍了一些相关工作,第三部分详细描述了我们的模
型,第四部分详细介绍了我们的运行支撑机制,第五部分给出了一个相关
的实验案例。.............
2 相关工作
软件的上下文正成为软件开发要面对的一个非常重要的问题,但是
主流编程语言几乎没有提供准确地描述上下文的能力,COP
编程方法的出现很好的弥补了这一不足。COP
中任何计算访问信息都被视为上下文信息。......COP 语言的一个设计问题就是对 layer
激活的控制,即什么时候、哪个 Layer
应该在程序执行过程的什么位置被激活或注销的问题。目前的研究提出主
要有两类方法,一种采用的是一种称为块结构体(block-
structured)的方法,如 ContextJ中的
with表达式。这种方法的特点是上下文环境的改变和对应行为的激活/注
销是在程序的同一处或者同一个线程内进行的,同时在退出表达式块后即
注销了对应的 Layer。另一种方法是针对 Appeltauer等人指出的很多
layer
的激活/注销是由外部事件所引发,而这类行为的激活不适宜采用块结构
体的方法来实现。为此 Tetsuo 等人设计了
EventCJ,采用的是一种称为事件驱动的方法(Event-based
ContextTransition),这种方法可以分离上下文环境的变化检测与行为的
激活。
目前大部分的 COP
语言采用的是块结构体的方法,这类方法多采用线程粒度的 layer
激活策略,虽然块语句可以很方便的表示在一个具体的方法调用中何时激
活
layer,但是对于那些由程序执行过程中随时发生的外部事件(如进入某座
建筑或者传感器数据发生变化)触发的上下文变化并不适用。
对于安全控制而言,危险状态是随机发生并且对其的响应处理需要非常及时,即任何线程的执行都有可能随时被打断。因此线程粒度的
layer 激活不适用于软件的安全性升级。
Even