基于 LAMP 架构的 ACM-ICPC在线评测系统设计.docVIP

基于 LAMP 架构的 ACM-ICPC在线评测系统设计.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于LAMP架构的ACM-ICPC在线评测系统设计基于LAMP架构的ACM-ICPC在线评测系统设计

基于 LAMP 架构的 ACM/ICPC在线评测系统设计 摘 要 本课题在牡丹江师范学院已有的在线评测系统上进行全面重构,将 oj 系统各个组成部分进行解耦,使得 oj 系统各个模块之间独立性增强,容易修改现有功能及扩充新功能,以应对举办比赛时的访问压力。包括本课题的系统架构设计,对其下各个模块核心内容的阐述,包括基于 linux 系统的沙箱模型、基于 java 的多线程服务器、基于amp 架构和 mvc 设计模式的 web 前端系统的设计与实现,以及影响系统安全的各种因素和对应的解决方案。 关键词 在线评测系统 acm/icpc lamp 架构 0 绪论 acm/icpc 目的旨在使大学生运用计算机来充分展示自己分析问题和解决问题的能力。在线评测系统(online judge system,以下简称 oj)起到了非常重要的作用。集训队员可以在线评测系统上挑选各种题目挑战自我,提高自我,学习各种数据结构和算法;在统一组织的集中训练中可以通过指定题目的形式来强化训练效果;而在线评测系统对比赛功能的支持,进一步提高了集训队员的学习热情,同时还可以模拟比赛的环境,培养那些计划参与 acm/icpc 赛事的队伍的团结合作能力。 但是其中大部分oj 系统是闭源、封闭的,无法获取其源代码进行修改扩充以满足现有需求,牡丹江师范学院 acm/icpc 集训队才于 2010 年推出自己的oj。但是该系统存在几个问题:一,效率不足,无法承受每年牡丹江师范学院程序设计大赛预选赛的压力;二,由于该系统没有应用沙箱技术运行用户代码,存在安全隐患,可能直接导致服务器被劫持。此后,google code 上陆续出现了几个开源 oj 系统,但是在架构设计上仍不够完善,且无法与原系统的数据格式兼容,因此,有必要重新开发一个经过合理设计的新 oj 系统,从根本上解决上述的问题,为集训队提供一个稳定可用的学习环境。 1 系统架构设计 为了方便用户的使用,本系统采用 b/s 架构,只要用户使用的是有网络接入的计算机,就可以通过浏览器进行访问。根据该系统的具体情况,在设计上将其分为以下四个组成部分:(1)网站系统(web 端);(2)评测核心(judge);(3)评测核心封装层(judge wrapper);监听守护进程(daemon)。 在设计上,该项目将系统的几个主要组成模块充分解耦,一方面,多个模块之间可以并行开发;另一方面,各个模块解耦后使得系统的修改和扩充更加容易,每个模块的可重用性也相应增强。例如,当其他学校需要实现一个功能界面完全不同的 oj 系统或是作业平台时,可以直接采用本项目的评测核心,避免重复开发。 2 评测核心的设计与实现 作为在线评测系统中最核心的部分,尤其是需要监控用户运行,需要涉及到很多相关技术,特别是与系统底层关系密切的技术。在 linux 下,系统调用的实现通常是用户程序通过触发80号软中断或者执行 syscall/sysenter 等平台相关的 cpu 指令陷入到内核中,内核通过寄存器获 取用户程序的输入,在通过严格的检查后执行相应操作。 在本系统中涉及的主要系统调用包括 fork、setitimer、execve、wait、ptrace、setrlimit、chroot、setuid 等。 (1)fork 系统调用通过复制调用进程的上下文来创建一个新进程。(2)setitimer 系统调用用于设置定时器。(3)execve 系统调用用于载入一个新的可执行程序,替换当前进程的地址空间。(4)wait 系统调用允许父进程阻塞,直到子进程发生一些事件。(5)ptrace 系统调用是一个可以使父进程在用户层拦截和修改系统调用的函数,可以监控和控制其他进程,该函数还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。(6)setrlimit 系统调用可以改变进程的资源限制。(7)chroot 系统调用使得调用进程的将某一目录当作其根目录,以此限制该进程及子进程对该目录外文件的访问。(8)setuid 系统调用允许进程改变其有效用户 id。在本系统中,用户提交的代码可能存在恶意,对其编译后的程序需要运行在服务器上,因此必须对其进行严密的监控,防止恶意代码带来的危害。在本系统支持的四种语言中,c、c++、pascal 三者经过编译后产生本地代码,可以通过linux 系统调用(主要是 fork、execve、chroot、setuid 和 ptrace)来创建一个沙箱,限制恶意代码访问文件、控制系统的权限,尤其是通过 ptrace 来限制可使用的系统调用,在很大程度上保证了系统的安全。 运行时检测是最重要、最复杂的运行时监控机制。本系统中通过 ptrace 系统调用来监控用户进程。每当用户进程出发一个系统调用,或者是收到

文档评论(0)

cxiongxchunj + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档