摘 要: 分析了一种基于ACM程序设计竞赛在线评测系统的基本原理及系统的构成,重点阐述了程序性能评判原理及实现方法。对通信安全、资源占用等关键问题给出了相应的解决方案,主要模块给出了相应代码。

关键词:评测系统;ACM;程序性能

ACM国际大学生程序设计竞赛 (ACM/ICPC或ICPC) 是由美国计算机协会 (ACM) 主办、旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。经过近 30 年的发展,ACM 国际大学生程序设计竞赛已经发展成为最具影响力的大学生计算机竞赛。竞赛规模的迅速扩大对阅卷工作的自动化、高效性、合理性和公正性提出了更高的要求,建立一套准确、高效的程序评测系统成为非常迫切的需求。基于以上原因,本文给出了一种网络自动化的程序性能分析评价系统——ACM国际大学生程序设计竞赛在线评测系统的实现方案。

1 评测系统简介

本系统提供了对C、C++、Java三种语言所编写的程序进行处理的功能。用户按照竞赛题目的要求,通过对问题的分析并给出解决方案后,就可以向系统提交解决问题的源代码程序。系统可以根据用户提供的源代码,采取相应的程序语言环境编译、运行。在编译与运行正常以后,系统按照题目要求来判断该程序结果否正确,同时给出程序的运行时间、内存的开销等情况,根据程序性能信息表[1-2]来判断各个用户的得分情况。

系统运行于Linux操作系统,借助Linux操作系统所提供的多任务、多线程功能及其稳定的性能和免费开源的内核,从而大大减少程序员书写系统代码的工作量,也提高了系统的运行效率。代码是用C语言编写的,通过自己编写函数或调用C语言内部函数来访问系统所使用的资源。

2 评测系统的体系结构

评测系统网络体系结构采用先进的B/S模式的三层架构,如图1所示,这种结构符合面向服务(SOA)的模块设计,模块耦合性低,使得业务逻辑的添加、修改较为容易,并且网络通信安全性能方面也大为提高。用户通过浏览器连接评测系统,表示层UI 是系统呈现给用户的使用界面,用户通过 UI 进行登录、浏览、提交代码等操作。业务逻辑层BL负责实现根据性能信息表数据评分等除测试部分以外的各模块的功能。本系统将评测部分(主要是黑盒测试)从业务逻辑层中独立了出来,成为一个专门的测试模块,这种做法的优点是对测试模块的修改、增删都很容易进行。数据库DB主要用来存储用户提交的程序性能信息表及用户信息表等,程序性能信息表中主要包括程序的各种性能信息,例如是否通过编译、是否超出最大时间、是否正常结束、语言类别、结果是否正确、代码运行时间、内存开销、CPU占用量、代码长度等。测试模块从数据库取得未测试代码,进行评测,将程序性能信息表中相关项的评测结果返回给数据库,业务逻辑则从数据库取得程序性能信息表,并根据表中各项数据评分,对于未通过编译、超出最大时间、非正常结束、结果不正确的程序按不合格处理,对于上面各项都合格的则按程序性能信息表中其余项进行综合评分。

3 评判原理

对程序编译与运行过程中出现的错误,系统会根据错误的不同给出相应的提示,例如是编译错误或者是运行错误。如果编译和运行都正确,系统将进一步通过相应的题目要求、对程序要求给出的输入和程序输出的结果,来判断该程序是否正确。

在进行程序评判时,先启动服务器评测进程,在侦听到有提交记录时,系统立即对提交记录的相关题目进行评判。每个问题均对应一组数据(输入和输出文件),系统设计时采用Linux管道(pipe(int filedes[3]))来处理,评判进程启动一个子进程(fork())来编译运行用户提交的程序,读入该题目的输入数据,评判程序每次从管道读入一个字符与标准输出数据比较,如果两个文件完全一样,则表示程序正确;如发现只是相差空格、Tab、回车,则给出该程序为输出格式错误信号(Presentation Error);如果发现其他字符的不匹配,则立即中止该程序,则给出该程序为结果错误的信号Wrong Answer。从程序运行时刻开始计时,在时间允许范围之内,得到了正确答案,则此提交程序符合题目要求并通过系统时间和内存的限制,给出接受的信号(Accepted)。反之,如果答案错、或者表达错、运行错等,则向该进程发出SIGKILL信号,强行中止该进程,对数据库记录进行相应的修改。运行流程如图2所示。

4 程序核心内容分析

为了能有效地解决和判断用户程序对系统资源的使用情况,系统定义了rusage结构体。该结构体具体信息为:

struct rusage {

struct timeval ru_utime;              /* user time used */

struct timeval ru_stime;            /* system time used */

long ru_minflt;                            /* page reclaims */

long ru_majflt;                               /* page faults */

};

ru_utime和ru_stime成员变量包含了在用户模式和系统模式中执行时间的总和。其结构都为timeval结构。

ru_minflt成员指不需要I/O的页缺失数。页缺失发生在内核需要得到一个内存页以供进程访问。

ru_majflt值指需要I/O的页缺失数。页缺失发生在内核需要得到一个内存页以供进程访问时。

有时,一个进程会被调出内存,以提供空间给其他进程使用。ru_nswap指的就是一个进程被调出内存的次数。

通过该结构体就可以统计出各用户程序对资源的占用情况,通过调用函数int getrusage(int who, struct rusage *rusage)对用户程序运行时间和内存占用情况进行分析统计。

统计程序运行时间:

passtime=usage。ru_utime。tv_sec+usage。ru_stime。tv_sec+(float)(usage。ru_stime。tv_usec+usage。ru_utime。tv_usec)/1000000;

统计程序所占内存的开销:

usedMemory = usage。ru_minflt*4

通过统计该两项,能计算出程序运行时间和内存使用情况的数据,为结果排序做准备。

5 系统安全处理

用户提交的程序在服务器上运行,为了保证系统安全运行、减少或杜绝故障的发生,在解决安全故障方面主要有以下几个方面。

(1) 文件操作

为了让用户提交上来的程序不破坏本机的文件系统,本设计采用了管道技术,在执行用户程序之前,先把输入流定向到标准输入文件,然后使用chroot命令改变用户程序的执行目录,让其只能在一个临时文件夹下面做操作。

(2) 网络操作

为了不让用户程序影响评判系统的设置,保证评判系统的公正性,必须禁止用户对网络的访问。系统通过对用户实行权限限制机制,判断系统在用户程序运行之前,通过调用Linux系统中setuid(99) 和 setgid(99)两个函数[4],让用户程序的拥有者权限降到最低,达到防止用户对网络使用的目的。

(3) 资源管理

资源管理的作用是对客户进程所使用的资源进行管理,Linux系统提供的资源限制函数setrlimit(),可以避免用户进程在运行的过程中过多地占用系统资源,以影响服务器系统的稳定性,最终有可能导致系统的崩溃。

为了防止用户进程占用过多的资源,影响服务器系统的稳定,对用户进程在占用资源方面进行限制,主要考虑程序运行时间和内存占用两个方面,在程序运行之前,通过调用系统函数setrlimit()来限制程序对系统资源的占用。函数setrlimit( RLIMIT_AS,&memlim)和setrlimit( RLIMIT_CPU,&timlim)分别用来限制用户程序对CPU和内存的占用情况,如果某用户的程序超过了系统对CPU和内存的最大设置值,该进程就会被自动中止,标志用户的程序不满足比赛要求。

通过对基于ACM国际大学生程序设计竞赛在线评测系统的分析研究,设计了相应的ACM测试软件,习题的测试难度可由指导老师自己设计。该软件也可以作为计算机专业学生算法测试工具,通过对该测试系统的使用,经过一定题量的练习,可以增强学生在算法方面设计的技能,为学生奠定雄厚的编程基础。

参考文献

[1] ESPINOSA A, MARGALEF T, LUQUE E. Automatic performance evaluation of parallel programs. The Sixth Euromicro Workshop on Parallel and Distribued Processing, 1998(21):43-49.

[2] ESPINOSA A, MARGALEF T, LUQUE E. Automatic detection of parallel program performance problems. Lecture Notes in Computer Science 1999(1573):365-377.

[3] STEVENS W R, RAGO S A著.UNIX环境高级编程(第2 版)[M] . 尤晋元,张来英,戚正伟,译.北京:人民邮电出版社,2006.

[4] SARWAR S M, KORETSKY R, SARWAR S A著. Linux教程[M].李善平,施韦,林欣,译.北京:清华大学出版社,2005.

c语言竞赛信息管理系统,一种基于ACM程序设计竞赛在线评测系统解决方案相关推荐

  1. c语言 在线oj系统,开源的在线评测系统——Vakuum

    简介 Vakuum是一个基于Linux+PHP的在线评测系统(Online Judge),主要面向信息学竞赛(OI)和ACM/ICPC. 功能 在线评测 用户提交程序代码,在线编译,执行测试数据,对其 ...

  2. 基于Web的网络在线考试系统

    基于Web的网络在线考试系统 一.系统简介 本系统是一种基于Web的网络在线考试系统,各个模块主要从JSP.Servlet.JDBC.JavaBean四部分技术角度出发搭建框架,其中Servlet是运 ...

  3. 基于JAVA汽车售后服务信息管理系统的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA汽车售后服务信息管理系统的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA汽车售后服务信息管理系统的设计与实现计算机毕业设计源码+系统+mysql数据库+ ...

  4. 高校竞赛信息管理系统

    摘要 随着当今社会的发展,时代的进步,各行各业也在发生着变化,比如高校竞赛信息管理这一方面,利用网络已经逐步进入人们的生活.传统的高校竞赛信息管理,都是学生去学校查看竞赛信息然后再进行报名,这种传统方 ...

  5. 大一c语言学生信息管理系统课程设计

    使用命令行操作, 每次操作结束后,代码中加入清屏命令,给人一种有界面的感觉. 大一学c语言,现在回过头来看, 觉得当时什么图形界面啥的都没学, 怎么写课程设计. 结果我还是当时班上写得最棒的黑框框毕业 ...

  6. 基于JAVA网上家教信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA网上家教信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA网上家教信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 ...

  7. 基于JAVA高校科研信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA高校科研信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA高校科研信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 ...

  8. c语言学生信息系统 完整版,C语言 学生信息管理系统(完整版).docx

    C语言 学生信息管理系统(完整版) 电子科技大学成都学院 程序综合设计论文 论文题目 学生信息管理系统 学生姓名 魏国 学 号 1340840625 专 业 机械设计制造及其自动化 系(分院) 电子工 ...

  9. C语言学生信息管理系统(结构体数组,文件)

    C语言学生信息管理系统(结构体数组,文件) 这是初学时写的一个程序,比较菜,不喜勿喷.在一个结构体里定义结构体内所有的信息(如果信息也需要分类则可以再定义一个结构体并在当前结构体内声明,我的这个代码在 ...

  10. c语言列车信息管理系统,C语言火车票信息管理系统.doc

    C语言火车票信息管理系统 课程设计报告 姓名班级学号课程设计信息课程名称C程序设计课程设计题目火车票信息管理系统课程设计时间2011-11-1至2011-12-30成绩评阅教师 2010-2011学年 ...

最新文章

  1. 计算机应用主要设计到哪些方面,大学计算机应用基础教案设计.doc
  2. 企业绩效管理推不动,如何用绩效创造价值?
  3. 团队编程项目3-学生成绩管理系统-模块开发过程
  4. css选择器 pa,p~a,p+a区别
  5. C++以二进制形式生成介于1到N之间的数字的算法(附完整源码)
  6. 【Session】Tomcat中Session持久化到文件系统或数据库
  7. colab加载google drive并且调试时跳过不运行
  8. Dubbo + RestEasy 实现文件上传与下载
  9. 矿井通风计算c语言_矿井通风机主要参数的含义
  10. Drools集成SpringBootStarter
  11. 安卓原生读写u盘_aigo Type-C固态U盘速度如何?好用吗?
  12. iOS获取、写入系统相册图片
  13. 微软ODBC服务器驱动,Microsoft ODBC 驱动程序的功能 - ODBC Driver for SQL Server | Microsoft Docs...
  14. 红外线测温仪方案技术参数
  15. 大白菜 U盘系统指南
  16. 思维导图|kotlin入门基础语法
  17. J_101.Java工程Properties配置文件注释中文,会自动转换为其他编码方式问题解决
  18. 电脑配置单4(自用勿删)
  19. 1012-RPA与目标使用者
  20. 鸿蒙第三代手机,原创 荣耀Magic 3最新确认,鸿蒙系统+双6400万,最期待的荣耀来了...

热门文章

  1. Selenium + C# 实现模拟百度贴吧签到 1
  2. vue项目实现百度离线地图开发
  3. 安卓百度离线人脸识别SDK集成
  4. 金山软件广州java开发_金山校招-广州华工站java笔试
  5. 全国计算机二级vf成绩查询,2017全国计算机二级《VF》考点习题
  6. 思科模拟器Cisco Packet Tracer 7.3.0安装配置
  7. 怎样将exe打包成服务运行
  8. 数学建模|预测方法:微分方程
  9. 手机射频工程师培训大纲
  10. android 蓝牙 录音,Android 实现蓝牙录音