基于继电保护装置中文件系统并发读写的互锁机制测试研究

(整期优先)网络出版时间:2022-10-20
/ 2

基于继电保护装置中文件系统并发读写的互锁机制测试研究

刘少伟1,戴必翔1

1.南京国电南自电网自动化有限公司 江苏省南京市 211153

摘要:继电保护装置中文件系统运行的可靠性对于装置整体的稳定运行有着重要的意义,文件系统并发读写互锁机制是基于底层操作系统的互锁逻辑来确定的。本文使用linux操作系统作为底层操作系统来验证继电保护装置中文件系统并发读写的互锁逻辑。

Abstratct:The reliability of the file system operation in the relay protection device is of great significance to the stable operation of the device as a whole. The concurrent read and write interlock mechanism of the file system is determined based on the interlock logic of the underlying operating system. This paper uses the linux operating system as the underlying operating system to verify the interlocking logic of concurrent read and write of the file system in the relay protection device.

关键字: 文件系统;互锁机制;并发读写;多线程


0 引言

继电保护领域中,对于相关装置中文件系统可靠性测试重之又重[1],在变电站现场继电保护装置的运行过程中,发生过多起装置运行异常问题,其中很多是由于文件系统错误和文件失效导致的[2,3]。例如文件没有写到对应的文件中,某个文件变为目录,有些重要文件同时存在同一分区,对这些文件同时执行时会存在破坏某些重要文件关键技术的风险;有时程序运行时会创建目录失败,保护装置会因此告警并闭锁保护,有拒动的风险;而且装置中文件缺乏自校验机制,文件处理时正确性无法保证。而对于装置文件系统的稳定性检测涉及方面众多。例如文件系统基本功能测试、文件系统稳定性测试、文件系统并发读写的互锁机制、文件系统参数测试、NAND FLASH使用过程中坏块检测等[4,5]

综上所述,涉及继电保护装置文件系统测试用例繁多,而本文是针对文件系统中文件并发读写互锁机制测试举例说明。嵌入式操作系统多种多样,本文测试linux操作系统下文件系统并发读写互锁逻辑。

1 文件系统并发读写互锁机制

继电保护装置文件系统并发读写互锁机制测试是文件系统相关文件在多线程情况下进行文件的读与写,本文提出的互锁逻辑涉及四个方面,分别为多线程同时读文件、多线程同时写文件、多线程分别读写同一文件和多线程分别读删或写删同一文件。

本文是在linux操作系统下测试,该操作系统内核源码开放,性能优异,软件移植容易,有许多应用软件支持。

2 文件系统并发读写互锁机制测试方法

对于文件系统并发读写互锁机制测试方法,这里根据上文所述的四种互锁逻辑来设计测试方法。相关测试通过c语言编程实现。

2.1 线程同时同一文件测试

启动多线程,每个线程执行读文件操作,这里针对某一个特定测试文件进行操作,测试前要先确保测试路径中含有该文件。

测试方法为分别启动10个线程、100个线程和200个线程去读该测试文件,根据运行结果判断是否可以多线程同时读某个文件。

2.2 多线程同时写同一文件测试

通过创建两个线程,两个线程的优先级以及写文件的大小可能相同或不同,如下,监测多线程同时写一个文件是否成功。

a、两个写线程的优先级相同,写入的文件大小也相同,判断两个线程是否都可以写文件成功;

b、两个写线程的优先级不同,写入的文件大小相同,未做特殊处理,即先高优先级任务先写,并判断两个线程是否都可以写成功;

c、两个写线程的优先级不同,写入的文件大小相同,并做特殊处理,即保证第一个低优先级的线程写文件写了一部分内容后,被高优先级的线程打断,判断高优先级任务是否可以写成功。

2.3 多线程分别读写同一文件测试

根据底层并发读写互锁机制需求,测试多线程分别读写某一文件逻辑,这里分为两种测试情况,分别为多线程同时读写某一个文件操作和单线程同时读写某一个文件操作。

多线程同时读写某一个文件操作方法如下,涉及两个相同或不同优先级的线程分别对同一文件进行读写操作:

a、两个线程逻辑分别为读文件和写文件,读文件线程的优先级更高,判断文件读写是否成功。

b、两个线程逻辑分别为读文件和写文件,两个线程优先级相同,判断文件读写是否成功。

c、两个线程逻辑分别为读文件和写文件,写文件线程优先级更高,判断文件读写是否成功。

下面为单线程同时读写某一个文件操作方法:

a、在一个线程中,对该文件顺序执行读写操作,即读后写操作,判断文件读写能否成功。

b、在一个线程中,对该文件顺序执行写读操作,即写后读操作,判断文件读写能否成功。

2.4 多线程分别读删或写删同一文件测试

两个线程分别对同一文件进行操作,包括一读一删,一写一删。

a、一读一删过程中,即两个线程分别对同一文件进行读操作和删除操作,判断文件在读过程中能否删除成功。

b、一写一删过程中,即两个线程分别对同一文件进行写操作和删除操作,判断文件在写过程中能否删除成功。

另外还要测试单个线程在读操作或写操作后,关闭句柄之前,文件能否删除。

3 结果与分析

为了测试继电保护装置文件系统并发读写互锁逻辑,这里以一个具体的继电保护装置为例,该装置人机交互界面操作系统类型为linux操作系统,本文在该装置该系统的基础上测试相关互锁逻辑。

3.1 多线程同时读同一文件测试结果

测试结果显示多个线程都可以成功执行,即多个线程都可完成对某个文件的读操作。由此可以看出多个线程可以同时读同一个文件。

3.2 多线程同时写同一文件测试结果

多线程同时写文件测试结果如下:

a、当两个线程优先级相同且写文件大小相同时,两个线程都可以写成功;

b、当两个任务优先级不同、写文件大小相同时,并未做特殊处理,两个线程都可以写成功,且两个线程是交替执行的。

c、当两个写线程的优先级不同,写入的文件大小相同,并做特殊处理时,低优先级线程可以写成功,高优先级也可以写成功,且两个线程交替执行。

通过上述测试结果,可以分析出如下结论:

a、对相应的线程设置优先级,但是优先级作用不大,线程之间还是按照时间片交替执行。

b、多线程同时写某一文件,都能写成功,由此会造成文件内容混乱,需要使用者自己做好互斥工作。

综上,即同一个文件能被同时写,使用时需要使用者自己做好互斥。

3.3 多线程分别读写同一文件测试结果

对于多线程同时读写某一个文件操作用例,结果如下:

a、测试a中,文件读优先级高,结果读写均能成功,多线程交替执行。

b、测试b中,两任务优先级相同,结果读写均能成功,多线程交替执行。

c、测试c中,文件写优先级高,结果读写均能成功,多线程交替执行。

对于单线程同时读写某一个文件操作用例,结果如下:

a、测试a中,对文件执行读后写操作,结果读写均能成功。

b、测试b中,对文件执行写后读操作,结果读写均能成功。

通过上述测试结果,可以分析出如下结论:

对于多线程同时读写某一个文件操作用例,读写均能成功,但是优先级作用不大,线程之间还是按照时间片交替执行。

在多线程中,由于允许同时读写同一个文件,但在读写过程中,因文件内容不停改变,读的内容也随之改变,所以不建议开发者这样使用,需要开发者自己做好互斥工作。

而对于单线程同时读写某一个文件操作用例,读后写和写后读操作测试均符合预期,读写均能完成,符合底层互锁逻辑。

3.4 多线程分别读删或写删同一文件测试结果

多线程分别读删或写删同一文件测试结果如下:

a、在一读一删过程中,文件能够读成功,读后文件能够删除,删除后,无法再次读取和删除。

b、在一写一删过程中,文件在写过程中无法删除。

c、在单个线程中,在文件读操作或写操作后,关闭句柄之前文件可以删除。

通过上述测试结果,可以分析出如下结论:

在写文件过程中,文件无法删除,符合底层逻辑预期。

  1. 总结

通过相关实验,验证了继电保护装置在linux操作系统下文件系统并发读写的底层互锁逻辑。通过结果可以分析出,linux操作系统下线程的切换是通过时间片轮转交替执行。另外多线程情况下,两个线程分别同时读写同一个文件时,会因文件内容不停改变,读的内容也会随之改变,所以需要开发者自己做好互斥工作,从而避免读取到错误的文件。

参考文献:

[1]杨智德,郭亚楠,陈献庆.网络文件系统在继电保护装置的研究及应用[J].自动化仪表,2019,40(02):84-87+91.

[2]汤铮. 基于嵌入式技术的电力装置文件系统及逻辑组态的研究[D].东南大学,2005.

[3]陈泽青. 嵌入式继电保护故障信息处理子站系统研究[D].西南交通大学,2011.

[4]马乔. 磨损感知的持久性内存文件系统设计与实现[D].电子科技大学,2020.

[5]戴敏圣. 云环境下海量小文件存储性能的研究与优化[D].电子科技大学,2020.