吉林大学acm在线评判系统的关键技术

随着将JOJ的footer版本号改为Version3.01,终于可以长出一口气。持续一个多月的JOJ网站升级已经基本完成。综合来看,作为一个Online Judge系统,基本目的是为了测试用户提交程序的正确性。为此,在设计和实现过程中需要满足以下目标:
• 准确。能够正确评测出用户程序的结果。特别是以下几个小的方面:
1. 给出正确的CE信息
2. PE和WA的区分
3. 如何准确测量用户程序的执行时间,得出TLE
4. 如何限制用户程序的内存占用。
• 稳定。一方面体现在网站页面的设计上,要求访问页面快速;另外体现在判题的速度上。
1. 同样程序多次重复提交结论相同,参数(运行时间和内存)基本一致
2. 对于大量并发访问具有很强的伸缩性。
• 安全。由于Online Judge系统的特殊性,在通常网站安全设置的基础上,由于可以执行用户程序,还要在安全上作更多的考虑。如:
1. 防止用户将题目测试数据外传。如通过网络将输入数据传走。
2. 防止用户通过程序获取服务器内部信息。如passwd文件。
3. 防止由于用户有意破坏系统。如用户程序执行system(”reboot”),或者最经典的while(1) fork(); 代码。
4. 防止无意的系统破坏。如由于缓冲区溢出造成的错误。
经过这段时间的工作,可以自豪地说 ,JOJ目前系统基本达到了以上的设计目标。Judge系统使用Linux的C语言编写;网站使用php完成。所使用的关键技术有:
• 系统环境使用 CentOS4.0(与Redhat AS4.0一致,但是Free的);Apache版本2.0;Mysql 4.1;php4.3.9;gcc3.4.6。上述平台的版本都不是最新的,但是稳定的。这也是AS的策略。
• 系统架构采用分离可缩放结构。前端服务器负责WEB访问,后端Judge服务器负责测试程序。双方通过数据库耦合;并且支持多Judge服务器并行判题。Judge服务器与Internet没有连接,彻底保证测试数据不被外泄。
• WEB服务器的数据库设计和SQL使用经过充分优化和测试,保证没有长时间的查询。为提高效率,部分统计信息直接存在在专门表中,采用动态刷新和定时全面同步的方式保证一致性。
• WEB页面设计优化,部分页面采用php缓存技术,并和Ajax相结合,达到提高效率并能够显示动态信息的目的。
• Judge服务器采用串行方式,每次只测试一个程序,保证测试结果的一致性。(效率问题可以通过增加Judge服务器解决)
• Judge过程中,被测试的程序运行在最低权限,不能访问测试目录以外的其他目录;不能打开其他文件(包括socket);不能执行危险的系统调用。
• 采用资源限制的方式,严格限制被测试程序的执行时间和内存。不管是静态还是动态申请的内存,一旦超界就无法申请成功。(由于程序一般不检查内存申请是否成功,所以不一定会得出MLE错误,也可能是RE)
• 严格跟踪用户的每一次系统调用,确保得到正确的状态和避免危险调用。(即使用户使用缓冲区溢出方式也无法执行不允许的系统调用)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值