
关键词 在线评测系统 ACM/ICPC LAMP 架构
中图分类号:TP31152 文献标识码:A
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 系统调用来监控用户进程。每当用户进程出发一个系统调用,或者是收到某些信号的时候,用户进程会将控制权暂时移交给监控核心。监控核心将严格监控用户进程的各项参数,以保证其不执行危害系统安全的 *** 作:(1)检查程序是否正常退出。(2)检查程序是否收到了非正常的信号。(3)通过进程的缺页中断次数计算进程使用的内存资源是否超出限制。(4)检查进程系统调用是否合法。
在以上四项检测都不存在问题的情况下,用户进程才能继续执行。
由于题目根据其合法结果数量可以分成普通类型和 Special Judge 类型,因此针对不同的类型,需要分别对其进行判断。(1)普通类型的题目,其合法结果唯一,因此只需要简单判断用户程序与标准答案的一致性即可。(2)Special Judge 类型的题目,在本系统中,约定了 SPJ 程序的名称以及数据的传递方式,包括标准输出、用户输出,以及 SPJ 程序的数据,由评测核心调用 SPJ 程序来完成最后的评判过程。
3 评测核心层的设计与实现
每当用户提交一份新的代码,Wrapper 即会被调用,从数据库中获取代码的详细信息。在此阶段需要关注的信息主要包括:(1)用户提交的代码本身及其关键属性(如语言类型)。(2)此代码的提交用户类型,是普通用户还是管理员。(3)此代码所属的题目是否处于正在进行的比赛。(4)此代码是否已经被评测过。你好,服务器的品牌有:
IBM Sun 惠普 戴尔 华硕 联想
英特尔 浪潮 方正 清华同方 NEC
微星 长城 宏碁 金品 致荣 赛天
五舟 超毅定制者 曙光 ……
服务器类型解释及选购要考虑的因素
在信息化日益普遍的今天,若能拥有一台功能齐备,价格合理的服务器,将是愈来愈多人关心的课题。昔日,许多人将选购一台好的PC,当作人生大事,但随着时间流转,科技日新月异,高性能的计算机设备不断更新,价格也相对不断合理化,现今无论企业或个人,都开始有机会接触PC服务器,企业为了节约成本,增加效率,必需使用服务器,而个人因为资料储存量变大,数字接口设备不断增加,例如数字相片,图形处理,高画质游戏,数据备份…等的需求,也可能开始接触入门级服务器,因此,如何选购一台好的PC服务器,将与许多人息息相关。
首先,我们必需了解何谓PC服务器?所谓PC服务器,即是Intel架构服务器,与一些大型服务器如Mainframe, Unix架构服务器等不同,前者大多运行Windows或Linux等 *** 作系统,使用较为普遍,后者多为专业用途,如银行,大型制造业,物流业,证券…等行业使用,一般人较少有机会接触到。一般而言,PC服务器若以外型来分,大致可分为三类:
(一) 直立式服务器(塔式服务器):
为可独立放置于桌面或地面的服务器,大都具有较多的扩充槽及硬盘空间。无需额外设备,插上电即可使用,因此使用最为广泛。
(二) 机架式服务器:
为可装上机柜之服务器,主要作用为节省空间,机台高度以1U为单位,1U约44mm,因空间较局限,扩充性较受限制,例如1U的服务器大都只有1到2个PCI扩充槽。此外,散热性能成为十分重要的因素,此时,各家厂商的功力就在此展现了。缺点是需要有机柜等设备,多为服务器用量较大的企业使用。
(三) 刀片服务器:
可算是比机架式服务器更节省空间的产品。主要结构为一大型主体机箱,内部可插上许多卡片,一张卡片即相当于一台服务器。当然,散热性在此非常重要,往往各家厂商都装上大型强力风扇来散热。此型服务器虽然空间较节省,但光是主体机箱部份可能就所费不赀,除大型企业外较少使用。
了解了服务器的种类之后,如何能选购一台适用的PC服务器呢我们可以从下列几方面来考虑:
1 稳定性能:
这是服务器最重要的因素之一。然而,对许多人来说,“稳定”似乎是个十分抽象的名词,似乎每一家服务器厂商都在强调自己的产品十分稳定。其实,“稳定”并非完全没有脉络可寻,也并非贵的产品即是稳定者,笔者提供一些小技巧以供参考:
(1) 整体组装品质: 通常较有规模的厂家所组装的产品,有一定的品管及制造流程,因此,若可打开机箱观察,便不难发现若是布线凌乱,机箱用料单薄,组件吻合度不佳或CPU, 内存及硬盘无原厂保固贴纸等,就绝对不该将之列入考虑范围。
(2)良好的散热设计: 服务器大多需要长时间运作,因此良好的散热性能是十分重要的。散热性能可以由厂商数据,散热风力强度或实际测试得知,散热良好的服务器往往有着较佳的稳定性能。
(3) 承诺售后服务内容: 对自己所出品的产品有信心的厂家,通常会提供较好的服务内容,
(4)整体口碑: 通常服务器产品口碑十分重要,选择有人推荐的品牌或市场上较老的品牌也是一种办法。但是,有时也会有新的品牌或产品也十分优良的,这些就要靠一些专家的推荐或试用测试。
(5)权威性评比推荐: 一些权威性的杂志常常会有一些评比,也不失为一种参考依据,但最主要的还是要看一些实际运行性能测试,并多比较相关报导,才容易获得客观的意见。
(6) 实际测试: 如果可能的话,最好能先购买少量产品进行测试,安装欲使用的软件,并且可以长时间运行看看。服务器应该要能够长时间运行,最好去网站上下载一些测试软件,实际运作以观察其稳定度如何?
2 升级维护成本:
许多品牌服务器可能在购买时总价并不高,但却有着十分可观的升级维护成本。比方说,在一些国外品牌的服务器部份,往往为了提高市场占有率,将开始拥有成本压的很低,但却在一些日后升级的配件部份,如CPU,内存,硬盘,磁盘阵列卡…等十分昂贵,另外,在其原厂保固期到期后,其续约的维护成本亦十分昂贵,造成类似“买车容易养车难”的窘境。因此,这也是一个需要考虑的部份。
3 厂家研发制造实力:
许多厂家都推出PC服务器产品,有些价格也十分便宜,但使用者真正该考虑的应该是厂家本身的实力如何。一般来说,国际厂牌往往较具有实力,研发经验也较丰富。重要的是,厂商自己本身要有经验丰富的研发团队。然而,近年来由于竞争激烈,PC服务器价格下降不少,因此几乎大多数的外商品牌之PC服务器都是由其它厂商代工,因此,考量这些品牌的服务器时,就应该排除对品牌的迷信了解其代工厂的实力及研发能力,来考量选购标准,毕竟,我们真正买到的是代工厂的产品,只是挂上品牌罢了。
4 解决问题的能力:
虽然许多外商在研发技术方面不差,但往往因为研发部门大都在海外,当客户发生问题时,需由当地销售据点反应至国外总部, 这样一来其反馈速度必然受到影响,而国内厂商的研发机构层次相对而言没有如此复杂,是可以优先考虑的对象。
综观以上各点,选购一台好的PC服务器,最重要的还是符合自己的需要,以及稳定度和售后服务的保障,当然,最有效的方式,无疑是架构一个仿真的环境,实地加以测试运作,才是最保险的方式。消费者也应该站在较为理智的立场,根据各项要点加以评估,千万不要只是对品牌盲目的迷信,而采购了一台十分昂贵,品质却没有比一般品牌高出多少的服务器。
服务器主要分为两类
非x86服务器
非x86服务器:包括大型机、小型机和UNIX服务器,它们是使用RISC(精简指令集)或EPIC(并行指令代码) 处理器,并且主要采用UNIX和其它专用 *** 作系统的服务器,精简的指令集处理器主要有IBM公司的POWER和PowerPC处理器。
EPIC处理器主要是Intel研发的安腾处理器等。这种服务器价格昂贵,体系封闭,但是稳定性好,性能强,主要用在金融、电信等大型企业的核心系统中。
x86服务器
x86服务器:又叫CISC(复杂指令集)架构服务器,通常所指的是PC服务器,它是基于PC机体系结构,使用Intel或其它兼容x86指令集的处理器芯片和Windows *** 作系统的服务器。价格优惠、兼容性好、稳定性较差、安全性不是非常高,主要用在中小型的企业和非关键业务中。
扩展资料
服务器的用途
通用型服务器
通用型服务器是没有为某种特殊服务专门设计的、可以提供各种服务功能的服务器,当前大多数服务器是通用型服务器。这类服务器因为不是专为某一功能而设计,所以在设计时就要兼顾多方面的应用需要,服务器的结构就相对较为复杂,而且要求性能较高,当然在价格上也就更贵些。
专用型服务器
专用型(或称“功能型”)服务器是专门为某一种或某几种功能专门设计的服务器。在某些方面与通用型服务器不同。如光盘镜像服务器主要是用来存放光盘镜像文件的,在服务器性能上也就需要具有相应的功能与之相适应。
光盘镜像服务器需要配备大容量、高速的硬盘以及光盘镜像软件。FTP服务器主要用于在网上(包括Intranet和Internet)进行文件传输,这就要求服务器在硬盘稳定性、存取速度、I/O(输入/输出)带宽方面具有明显优势。
而E-mail服务器则主要是要求服务器配置高速宽带上网工具,硬盘容量要大等。这些功能型的服务器的性能要求比较低,因为它只需要满足某些需要的功能应用即可,所以结构比较简单,采用单CPU结构即可;
参考资料来源 百度百科-服务器
内核是 *** 作系统最基础的构件,因而,内核结构往往对 *** 作系统的外部特性以及应用领域有着一定程度的影响。尽管随着理论和实践的不断演进, *** 作系统高层特性与内核结构之间的耦合有日趋缩小之势,但习惯上,内核结构仍然是 *** 作系统分类之常用标准!内核的结构可以分为单内核、微内核、混合内核、外内核等。
单内核(Monolithic kernel),又称为宏内核。单内核结构是 *** 作系统中各内核部件杂然混居的形态,该结构于1960年代(亦有1950年代初之说,尚存争议),历史最长,是 *** 作系统内核与外围分离时的最初形态。
微内核(Microkernel),又称为微核心。微内核结构是1980年代产生出来的较新的内核结构,强调结构性部件与功能性部件的分离。20世纪末,基于微内核结构,理论界中又发展出了超微内核与外内核等多种结构。尽管自1980年代起,大部分理论研究都集中在以微内核为首的“新兴”结构之上,然而,在应用领域之中,以单内核结构为基础的 *** 作系统却一直占据着主导地位。
混合内核(Hybrid kernel)像微内核结构,只不过它的组件更多的在核心态中运行,以获得更快的执行速度。
外内核(Exokernel)的设计理念是尽可能的减少软件的抽象化,这使得开发者可以专注于硬件的抽象化。外核心的设计极为简化,它的目标是在于同时简化传统微内核的讯息传递机制,以及整块性核心的软件抽象层。
在众多常用 *** 作系统之中,除了QNX和基于Mach的UNIX等个别系统外,几乎全部采用单内核结构,例如大部分的Unix、Linux,以及Windows(微软声称Windows NT是基于改良的微内核架构的,尽管理论界对此存有异议)。 微内核和超微内核结构主要用于研究性 *** 作系统,还有一些嵌入式系统使用外核!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)