系统管理员模块
只提供给系统管理员对比赛日程计划的控制,题库录入,参赛队员信息管理,比赛期间系统管理员没有任何的操作控制权限。
用户验证
文护用户比赛过程中各个页面操作的权限控制,身份验证。
排名统计
根据竞赛规则(如前)对用户进行排名。
问题浏览,提交,查看运行状态
展示后台数据库,与数据库的交互
程序运行器
程序运行器执行编译产生的可执行代码,并事先设置该程序的权限和运行限制,准备输入输出重定向,然后产生解答输出。 判断程序运行的状态。其中要保证被执行的程序不能危害系统的安全,不能访问非授权信息,不能占用超过规定量的资源。
程序运行器是实现自动评判和保证系统安全的关键模块。如何自动限制用户程序的资源占用,获取用户程序执行信息,以及防止恶意用户的破坏都是值得重视的问题。
守护进程
管理比赛例程,监控 Judge 服务器的运行状态,帮助程序运行器完成对用户进程的监控,必要时终止用户进程。守护进程还负责与数据库耦合,取出数据库中尚未评判的程序,然后将程序的评判结果信息写回数据库。
编译模块
用于统一多个编译器的编译调用过程,支持多种程序设计语言,负责检查用户提交的程序语法,并编译产生可执行代码。如果编译器发现源程序语法错误,需要立即指出,不再继续该题的评判工作。
用例测试器
用例测试器对产生的解答输出对比标准测试数据进行测试,给出评判结论。
用例测试器需要注意的一个重要问题是,如何合理区分结果错误和格式错误。通常认为,只是空白字符的不同,以及字母大小写的不同就是格式错误,其它的就是结果错误。
数据库
用户基本信息表、比赛信息表、解题信息表,题目列表,测试数据等。
5.2 判题内核设计
图5-2 判题内核设计原理图
5.2.1 守护进程
特征和编写规则
1. 因为守护进程是在后台运行,所以首先调用fork()生成一个子进程,然后使父进程exit()。
2. 调用setsid()创建一个新的对话期。
3. 设定其工作目录。(chdir())
4. 将文件创建屏蔽字设置为0 。(umask(0))
5. 关闭不再需要的文件描述符。(close(int))
判题内核的守护进程每隔一定时间对数据库进行扫描,寻找出状态为running的未编译的程序集合,调用判题程序开始判题:
守护进程的开始:原文请+QQ324,9114辣.文^论,文'网h
void daemonize(){
int i,fd0,fd1,fd2;
pid_t pid;
struct rlimit rl;
struct sigaction sa;毕业论文
http://www.751com.cn/ umask(0);
if (getrlimit(RLIMIT_NOFILE, &rl)<0){
syslog(LOG_DAEMON|LOG_ERR,"can't get file limit");
exit(1);
}
if ((pid = fork()) < 0){
syslog(LOG_ERR|LOG_DAEMON, "Can't fork!");
printf("Could not daemonize!\n");
exit(1);
}
else if (pid != 0) /* parent */
exit(0);
setsid();
sa.sa_handler = SIG_IGN;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGHUP, &sa, NULL) < 0){
syslog(LOG_ERR|LOG_
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9]
php在线判题系统设计+ACM在线评判系统+用例图 第9页下载如图片无法显示或论文不完整,请联系qq752018766