Online Judge System 設(shè)計(jì)與實(shí)現(xiàn)

上傳人:1666****666 文檔編號(hào):36362636 上傳時(shí)間:2021-10-30 格式:DOC 頁(yè)數(shù):20 大?。?46KB
收藏 版權(quán)申訴 舉報(bào) 下載
Online Judge System 設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
第1頁(yè) / 共20頁(yè)
Online Judge System 設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
第2頁(yè) / 共20頁(yè)
Online Judge System 設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
第3頁(yè) / 共20頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《Online Judge System 設(shè)計(jì)與實(shí)現(xiàn)》由會(huì)員分享,可在線閱讀,更多相關(guān)《Online Judge System 設(shè)計(jì)與實(shí)現(xiàn)(20頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、Online Judge System 設(shè)計(jì)與實(shí)現(xiàn) 摘要 電子計(jì)算機(jī)自產(chǎn)生之日起就體現(xiàn)了其強(qiáng)大的生命力,短短幾十年的時(shí)間,計(jì)算機(jī)已經(jīng)逐漸滲透到了我們這個(gè)社會(huì)工作和生活的各個(gè)領(lǐng)域,并且發(fā)揮著越來(lái)越重要作用,成為人們工作、學(xué)習(xí)、科學(xué)研究的得力助手。它在教育領(lǐng)域同樣發(fā)揮著相當(dāng)重要的應(yīng)用,過(guò)去傳統(tǒng)的ftp, email方式提交學(xué)生程序作業(yè)并進(jìn)行手工評(píng)判的方法,其繁重的工作量在我們今天看來(lái)是無(wú)法想象的。在高等院校的教學(xué)中,計(jì)算機(jī)方面的課程,特別是程序設(shè)計(jì)語(yǔ)言課程,具有實(shí)踐性特別強(qiáng)的特點(diǎn)。它要求學(xué)生不僅僅要學(xué)習(xí)理論知識(shí),還必須進(jìn)行大量的實(shí)踐,才能真正掌握知識(shí),在實(shí)踐應(yīng)用中發(fā)揮作用。而在目前的教育、考

2、核方式下,卻不能真正考核出學(xué)生的真實(shí)水平,特別是在實(shí)踐方面的水平,也不能引導(dǎo)學(xué)生以有效的方式來(lái)學(xué)習(xí)這些課程。各種強(qiáng)大的軟件系統(tǒng)伴隨著計(jì)算機(jī)硬件的飛速發(fā)展而發(fā)展,使得今天我們利用計(jì)算機(jī)來(lái)實(shí)現(xiàn)智能在線評(píng)判的想法可以得以實(shí)現(xiàn)。 本文針對(duì)現(xiàn)行的Online Judge系統(tǒng)進(jìn)行了分析,綜合了各系統(tǒng)的功能特點(diǎn),提出了系統(tǒng)的設(shè)計(jì)方案和開(kāi)發(fā)原理,實(shí)現(xiàn)了程序設(shè)計(jì)競(jìng)賽評(píng)判過(guò)程的自動(dòng)化,標(biāo)準(zhǔn)化,以實(shí)時(shí)的方式反饋回學(xué)生評(píng)判結(jié)果,用戶使用方便等功能特色。 本系統(tǒng)前臺(tái)開(kāi)發(fā)基于Apache + PHP + MySQL,后臺(tái)開(kāi)發(fā)基于Qt工具包。詳細(xì)地介紹了程序評(píng)判流程(提交,編譯,運(yùn)行,測(cè)試等),程序運(yùn)行的原理及程序

3、運(yùn)行時(shí)資源的管理,對(duì)系統(tǒng)模塊的劃分和后臺(tái)的設(shè)計(jì)進(jìn)行了詳盡的說(shuō)明。 本文結(jié)構(gòu)清晰,首先簡(jiǎn)明的闡述了評(píng)判系統(tǒng)的開(kāi)發(fā)背景,研究現(xiàn)狀,目的和意義,然后針對(duì)系統(tǒng)的目標(biāo)進(jìn)行了總體的構(gòu)架設(shè)計(jì),最后根據(jù)設(shè)計(jì)思想提供了各個(gè)模塊的設(shè)計(jì)細(xì)節(jié)。通過(guò)全面的論述得出該系統(tǒng)在各個(gè)方面的性能分析。 關(guān)鍵詞:在線評(píng)判系統(tǒng);進(jìn)程管理;多線程;模型 The Design and Implementation of Online Judge System Abstract Computer shows its strong vitality since it has invented, and within few

4、 decades time, computer has gradually infiltrated into our society in all spheres of work and life, and is playing an increasingly important role in people’s work, study and research. It also plays an important application in the field of education. The traditional ftp, email submission of student a

5、ssignments and then judge them by hand one by one, now this method shows its heavy workload and is unimaginable. In teaching of high schools, many computer courses are demanded with strong practical capability, especially some programming language courses. It requires that students study not only th

6、eory knowledge but also lots of practice so that they master knowledge factly and bring into use in actual applications. However, on the way of today’s teaching and examining, the student’s genuine level would not be estimated properly, in particular, in practicing aspects. Of course, it can not lea

7、d students to learn these courses efficiently. Various powerful computer software systems come along whih the rapid development of hardware make it possible to achieve the thought of the intelligent judging online. This thesis analysis several current Online Judge System, and synthesizes the func

8、tional features of each system, then raise the principles of the system design and development, and achieve the programming contest judging process automation, standardisation, returning real-time results to students, convenience of use and other functional features. The development of the front-e

9、nd of this system based on Apache, PHP and MySQL, the back-end development based on Qt development toolkit. There are detail presentations of the programming judging procedure: ssubmit the programming source code, compile, run and test the answer, etc., the program running principles and the runtime

10、 resources management. And explains the system modules division and the back-end designs. In this paper the structure clear. First concisly states the background of the Online Judge System, its current researches, purpose and meaning. Then focus on the overall framework design to the system’s goal

11、s. Finally shows the design details of each module according to the design ideas, and obtained the various aspects of performance analysis information through comprehensive exposition of the system. Keywords: online judge system; process management; multi-thread; model 前言 1 課題背景 ACM/ICPC(ACM In

12、ternational Collegiate Programming Contest, 國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽)是由國(guó)際計(jì)算機(jī)界歷史悠久、頗具權(quán)威性的組織 ACM(Association for Computing Machinery,國(guó)際計(jì)算機(jī)協(xié)會(huì))主辦的,世界上公認(rèn)的規(guī)模最大、水平最高的國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽,其目的旨在使大學(xué)生運(yùn)用計(jì)算機(jī)來(lái)充分展示自己分析問(wèn)題和解決問(wèn)題的能力。該項(xiàng)競(jìng)賽從1970年開(kāi)始舉辦,一直受到國(guó)際各知名大學(xué)的重視,并受到全世界各著名計(jì)算機(jī)公司的高度關(guān)注,在過(guò)去十幾年中 APPLE、AT&T、MICROSOFT 和 IBM 等世界著名信息企業(yè)分別擔(dān)任了競(jìng)賽的贊助商??梢?/p>

13、說(shuō),ACM 國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽已成為世界各國(guó)大學(xué)生最具影響力的國(guó)際級(jí)計(jì)算機(jī)類的賽事, 是廣大愛(ài)好計(jì)算機(jī)編程的大學(xué)生展示才華的舞臺(tái),是著名大學(xué)計(jì)算機(jī)教育成果的直接體現(xiàn),是信息企業(yè)與世界頂尖計(jì)算機(jī)人才對(duì)話的最好機(jī)會(huì)。 Online judge system 是基于該背景下提出的一個(gè)程序設(shè)計(jì)競(jìng)賽評(píng)判系統(tǒng),它對(duì)用戶提交的程序源文件進(jìn)行編譯,運(yùn)行,評(píng)判,給出用戶的答題反饋信息,對(duì)用戶答題情況進(jìn)行統(tǒng)計(jì)排名等。 2 課題的提出 在實(shí)現(xiàn)計(jì)算機(jī)運(yùn)用和信息網(wǎng)絡(luò)化的今天,效率的大幅提高以及信息交換的深入和擴(kuò)大, 使人類的生活越來(lái)越離不開(kāi)數(shù)字化、信息化。信息決定著我們的生存,這已是不爭(zhēng)的事實(shí)。以多媒體計(jì)

14、算機(jī)技術(shù)和網(wǎng)絡(luò)通訊技術(shù)為主要標(biāo)志的信息技術(shù),對(duì)當(dāng)代社會(huì)產(chǎn)生著重大的影響,改變著我們的工作方式、學(xué)習(xí)方式和生活方式。信息技術(shù)在教育領(lǐng)域的運(yùn)用是導(dǎo)致教育領(lǐng)域徹底變革的決定性因素,它必將導(dǎo)致教學(xué)內(nèi)容、手段、方法、模式甚至教學(xué)思想、觀念、理論以及體制的根本變革。 隨著信息化進(jìn)程的飛速發(fā)展以及計(jì)算機(jī)技術(shù)的普及,高等院校開(kāi)設(shè)了越來(lái)越多的計(jì)算機(jī)課程。和傳統(tǒng)的課程比較,計(jì)算機(jī)課程具有實(shí)踐性很強(qiáng)的特點(diǎn)。學(xué)生要學(xué)好這些課程不但要認(rèn)真學(xué)習(xí)理論知識(shí),還需要大量的實(shí)踐訓(xùn)練。例如,C 語(yǔ)言課程的學(xué)習(xí),就需要編寫(xiě)大量的程序,才能夠積累足夠的經(jīng)驗(yàn),真正掌握程序設(shè)計(jì)的方法,編寫(xiě)出正確、高效的程序。對(duì)傳統(tǒng)課程的考核多采用筆試

15、的方式,但是,對(duì)于計(jì)算機(jī)方面的課程,特別是程序設(shè)計(jì)語(yǔ)言類課程這是不夠的,因?yàn)樗⒉荒艽偈箤W(xué)生在平時(shí)的學(xué)習(xí)中加強(qiáng)實(shí)踐的鍛煉。如何對(duì)這些課程進(jìn)行有效的考核,成為一個(gè)長(zhǎng)期工作在第一線的計(jì)算機(jī)教育工作者反復(fù)思考和不斷探索的問(wèn)題。 在目前的教學(xué)方式中,多數(shù)高等院?;旧线€是采用基于傳統(tǒng)方式的筆試來(lái)考核學(xué)生的計(jì)算機(jī)課程水平,然后在此基礎(chǔ)上稍作補(bǔ)充。在上機(jī)實(shí)踐考試中,學(xué)生采用FTP,Email,甚至手寫(xiě)的方式提交編程作業(yè),老師需要對(duì)他們的作業(yè)進(jìn)行一一批閱,相當(dāng)多的時(shí)候,任課教師從學(xué)生處得到的是一些低效的,甚至不能運(yùn)行通過(guò)的源代碼,可是卻要花費(fèi)不少時(shí)間來(lái)判斷分析學(xué)生程序到底在什么地方出錯(cuò),然后給出相應(yīng)的得

16、分。這需要老師和學(xué)生花費(fèi)很多的精力,效果也不是很好。學(xué)生更無(wú)法得知自己所編寫(xiě)的程序存在哪方面的問(wèn)題,因而不能有效及時(shí)地進(jìn)行更正。而Online Judge可以自動(dòng)批閱作業(yè)并給出成績(jī),并且直接統(tǒng)計(jì)學(xué)生作業(yè)的提交情況,以及成績(jī)的登記。這給老師帶來(lái)了很大的方便,同時(shí)學(xué)生也可以通過(guò)Online Judge直接查詢答題狀況。 3 研究現(xiàn)狀 現(xiàn)在已有不少學(xué)校采用由計(jì)算機(jī)進(jìn)行編程作業(yè)評(píng)判的方式來(lái)對(duì)學(xué)生的作業(yè)進(jìn)行考核。但更多的情況下是學(xué)生的編程作業(yè)通過(guò)FTP,Email等方式提交給老師后,由老師直接對(duì)程序以及程序的相關(guān)文檔進(jìn)行閱讀,采用計(jì)算機(jī)對(duì)程序直接進(jìn)行評(píng)判還不是很普遍??偟膩?lái)說(shuō),在對(duì)編程作業(yè)的提交進(jìn)

17、行后處理方面已經(jīng)有了一定程度的研究,而且與此課題相關(guān)的一些技術(shù),像對(duì)程序的后處理在ACM等領(lǐng)域已經(jīng)普遍運(yùn)用。已有相當(dāng)多的高校建立了題庫(kù)和平臺(tái)。大部分平臺(tái)是基于 ACM 程序設(shè)計(jì)競(jìng)賽規(guī)則而開(kāi)發(fā)的,有的平臺(tái)是基于程序設(shè)計(jì)題目中的“得分點(diǎn)”而設(shè)計(jì)的。 國(guó)內(nèi)目前已有很多學(xué)校開(kāi)發(fā)了自主的評(píng)判系統(tǒng),如: 、 。并且北京大學(xué)提供了 free version of Judge Online. 4 課題研究的目的和意義 采用 Online Judge 后,老師可以通過(guò)對(duì)參數(shù)進(jìn)行設(shè)置,限制學(xué)生提交的編程作業(yè)的類型、文件大小、運(yùn)行時(shí)間長(zhǎng)短和空間大小。學(xué)生在提交編程作業(yè)時(shí)能夠很快的得到作業(yè)是否正確的反饋。一

18、方面,Online Judge 可以對(duì)作業(yè)進(jìn)行自動(dòng)編譯,檢查出程序是否存在語(yǔ)法錯(cuò)誤;另一方面,它還能驗(yàn)證程序是否能得到正確結(jié)果,以及所花費(fèi)的代價(jià)(時(shí)間和空間上的)。根據(jù)后處理的結(jié)果與相應(yīng)的參數(shù)設(shè)置,Online Judge 能自動(dòng)給出學(xué)生此次編程作業(yè)的成績(jī)。這大大地減小了學(xué)生提交錯(cuò)誤程序的概率,還能給出與程序相應(yīng)的成績(jī)。當(dāng)然老師也可以進(jìn)行再次審查,對(duì)學(xué)生的作業(yè)提出評(píng)語(yǔ),修改成績(jī)等。這種方式完全模擬了使用程序設(shè)計(jì)語(yǔ)言解決實(shí)際問(wèn)題的過(guò)程,編寫(xiě)程序、不斷測(cè)試修改、根據(jù)結(jié)果反饋修改程序。這樣的考試方式對(duì)學(xué)生的學(xué)習(xí)過(guò)程具有很好的指導(dǎo)作用。與此同時(shí),還消除了老師在檢查作業(yè)的過(guò)程中的主觀因素,增加了學(xué)生之間

19、的公平性。 Online Judge 的實(shí)現(xiàn),能很快地運(yùn)用到現(xiàn)實(shí)的學(xué)習(xí)生活中去,有效的考核學(xué)生的真實(shí)水平,促使學(xué)生更好的學(xué)習(xí)計(jì)算機(jī)知識(shí),強(qiáng)化學(xué)生的實(shí)踐能力,給學(xué)生和老師帶來(lái)立竿見(jiàn)影的效果;極大地提高了學(xué)生和老師雙方面的效率,減輕了老師在教學(xué)管理上的負(fù)擔(dān);還使學(xué)生將來(lái)能更好地適應(yīng)快速發(fā)展的信息化時(shí)代;進(jìn)一步發(fā)揮出計(jì)算機(jī)網(wǎng)絡(luò)對(duì)當(dāng)今教育領(lǐng)域甚至其他行業(yè)的突出貢獻(xiàn)。 系統(tǒng)分析 1 現(xiàn)行在線評(píng)判系統(tǒng)分析 通過(guò)對(duì)國(guó)內(nèi)大多數(shù)在線評(píng)判系統(tǒng)的研究,提取其優(yōu)點(diǎn)總結(jié)其中的不足之處。很多系統(tǒng)功能不全,使用不方便。有的服務(wù)器響應(yīng)速度很慢,評(píng)判信息不夠精確,詳細(xì);有的不能支持現(xiàn)行流行的各種編程語(yǔ)言;有的系統(tǒng)維

20、護(hù)管理機(jī)制繁瑣,不易擴(kuò)展與升級(jí)等。因此開(kāi)發(fā)一個(gè)全功能,使用簡(jiǎn)單方便,易于擴(kuò)展升級(jí)維護(hù)的在線評(píng)判系統(tǒng)很有必要。 2 可行性研究 對(duì)現(xiàn)有系統(tǒng)的功能進(jìn)行分析后,下面就本著減少不必要的投入過(guò)多的人力物力的原則,對(duì)系統(tǒng)的開(kāi)發(fā)進(jìn)行可行性分析。一是可能性,二是必要性。通過(guò)可行性研究,可避免盲目投資。下面從三方面來(lái)討論: 1. 經(jīng)濟(jì)可行性。經(jīng)濟(jì)可行性是指開(kāi)發(fā)系統(tǒng)的費(fèi)用,主要是指一個(gè)新的系統(tǒng)開(kāi)發(fā)所需要的成本費(fèi)用和人員費(fèi)用,并與估計(jì)的新系統(tǒng)收益進(jìn)行比較,看是否有利。本系統(tǒng)所需的軟件和工具包均無(wú)需購(gòu)買(mǎi),apache + php + mysql 和 Qt 都有開(kāi)源版本,現(xiàn)有的計(jì)算機(jī)硬件就可以滿足要求,因此,

21、在經(jīng)濟(jì)上是可行的。 2. 應(yīng)用可行性。由于現(xiàn)在大部分大中專學(xué)校缺乏在線評(píng)判系統(tǒng),或是有的系統(tǒng)使用不便,功能不全面。教師對(duì)程序設(shè)計(jì)作業(yè)評(píng)判工作越來(lái)越繁重,因而一個(gè)可以實(shí)現(xiàn)自動(dòng)評(píng)判的軟件必不可少,而現(xiàn)有的軟件還不能滿足教師的需要,此外現(xiàn)在校園網(wǎng)絡(luò)發(fā)達(dá),基于這些原因,我開(kāi)發(fā)的在線評(píng)判系統(tǒng)是可行的,這樣不僅減輕教師的負(fù)擔(dān),而且評(píng)判結(jié)果更具公平性、客觀性,能夠準(zhǔn)確地反映教學(xué)質(zhì)量,有利于選拔人才,促進(jìn)教學(xué)改革。 3. 技術(shù)可行性。技術(shù)可行性是指利用現(xiàn)有的設(shè)備,軟件及技術(shù)人員,新系統(tǒng)的目標(biāo)能否達(dá)到。本系統(tǒng)使用的 php 適應(yīng)性好,mysql 速度快而且跨平臺(tái),Qt 作為后臺(tái)開(kāi)發(fā),我能熟練應(yīng)用它們。因

22、此,在技術(shù)上是完全可行的。 3 競(jìng)賽規(guī)則 參賽隊(duì)員以小組的形式參賽,每小組 3 人,由隊(duì)長(zhǎng)及 2 名隊(duì)員組成,并為每組取一隊(duì)名。比賽時(shí)間一般為 5 小時(shí),6 至9 個(gè)題目,每個(gè)參賽隊(duì)員共用一臺(tái)電腦答題。 參賽隊(duì)伍首先根據(jù)解題數(shù)目進(jìn)行排名。在決定獲獎(jiǎng)隊(duì)伍時(shí),如果多支隊(duì)伍解題數(shù)量相同,則根據(jù)總用時(shí)進(jìn)行排名。總用時(shí)由每道解答正確的用時(shí)的和。每道題目的用時(shí)將從競(jìng)賽開(kāi)始到題目解答被判定為正確為止,其間每一次評(píng)判未通過(guò)將被加罰 20 分鐘的時(shí)間,未正確解答的題目不記時(shí)。 參賽隊(duì)員在比賽場(chǎng)地在自已的電腦上答題,然后將源代碼復(fù)制到提交頁(yè)面的代碼文本框中,選擇相應(yīng)的編譯選項(xiàng)后,提交給服務(wù)器進(jìn)行評(píng)判

23、。服務(wù)器根據(jù)用戶答題情況返回評(píng)判結(jié)果反饋信息,具體說(shuō)明如下: Waiting: The judge is so busy that it cant judge your submit at the moment, usually you just need to wait a minute and your submit will be judged. Judging: The judge is juging your problem now. Accepted: OK! Your program is correct! Presentation Error: Your ou

24、tput format is not exactly the same as the judges output, although your answer to the problem is correct. Check your output for spaces, blank lines, etc. against the problem output specification. Wrong Answer: Correct solution not reached for the inputs. The inputs and outputs that we use to test

25、the programs are not public (it is recommendable to get accustomed to a true contest dynamic). Runtime Error: Your program failed during the execution (illegal file access, stack overflow, pointer reference out of range, floating point exception, divided by zero, etc.). Time Limit Exceeded: Your

26、 program tried to run during too much time. Memory Limit Exceeded: Your program tried to use more memory than the judge default settings. Compile Error: The compiler could not compile your program. Of course, warning messages are not error messages. Click the link at the judge reply to see the a

27、ctual error message. No Such Problem: Either you have submitted a wrong problem ID or the problem is unavailable. Out Of Contest Time: This message can only appear during a contest, if a program is submitted out of contest time. Restricted Function: Your program tried to call restricted functio

28、ns. For example, maybe you have tried to open a file which is forbidden. 4 系統(tǒng)功能分析 1. 用戶操作界面。這是用戶與系統(tǒng)交互的手段,因此要做到人機(jī)界面友好化,操作方便,并有相應(yīng)的操作信息提示。 2. 編譯模塊。應(yīng)該支持各種常用程序設(shè)計(jì)語(yǔ)言,如 C, C++, Java, Pascal 等。使用戶真正體會(huì)到程序設(shè)計(jì)競(jìng)賽的靈魂是算法的設(shè)計(jì)與實(shí)現(xiàn),給予競(jìng)賽隊(duì)員更大的發(fā)揮空間。 3. 程序運(yùn)行與測(cè)試。這是該系統(tǒng)的核心,主要是監(jiān)控程序的運(yùn)行狀態(tài),運(yùn)行的時(shí)間空間消耗,運(yùn)行的權(quán)限管理,以及運(yùn)行結(jié)果的評(píng)判,盡量給出用戶

29、確切詳細(xì)的信息。 4. 管理員賽事管理。主要是參賽隊(duì)員的管理,賽題管理,賽事例程管理。 5.用戶管理。系統(tǒng)做出來(lái)是要給用戶使用的,既然有用戶就得對(duì)其進(jìn)行管理。用戶管理聽(tīng)起來(lái)好像簡(jiǎn)單,實(shí)際上涉及到的內(nèi)容卻很復(fù)雜。包括以下幾個(gè)方面: (1)用戶登陸。此系統(tǒng)要有一定的加密功能。因?yàn)槌绦蛟O(shè)計(jì)競(jìng)賽是用來(lái)選拔學(xué)生用的,競(jìng)賽開(kāi)始之前必須要保密,否則將影響競(jìng)賽結(jié)果的真實(shí)性,公平性。鑒于此原因,每位使用該系統(tǒng)的用戶都必須通過(guò)自己的用戶名和密碼進(jìn)行登陸后,才能正常使用。另外,為了防止有人惡意破譯密碼,必須采用驗(yàn)證碼機(jī)制。 (2)修改密碼。既然每位用戶都有自己的密碼,而同一個(gè)密碼如果用的時(shí)間太長(zhǎng)

30、,就有可能被別人記住,為了加強(qiáng)系統(tǒng)的安全性,應(yīng)該定期修改密碼,這就要求系統(tǒng)具有修改密碼的功能。 (3)用戶權(quán)限。使用此系統(tǒng)的用戶很多,但為了增加系統(tǒng)的安全性,就應(yīng)該對(duì)每位用戶指定權(quán)限,否則如果每個(gè)人都有對(duì)數(shù)據(jù)庫(kù)的操作權(quán)限,很難保證對(duì)數(shù)據(jù)庫(kù)不了解的用戶對(duì)數(shù)據(jù)庫(kù)進(jìn)行誤操作,或通過(guò)非法訪問(wèn)數(shù)據(jù)庫(kù)獲取機(jī)密信息。 (4)添加用戶。為了動(dòng)態(tài)維護(hù)和管理用戶,即用戶數(shù)量不是一成不變的,可能會(huì)有所增加,因此系統(tǒng)還需要具有添加用戶的功能。另外, 每一輪的競(jìng)賽都將會(huì)有新成員的加入。 (5)刪除用戶。如前所說(shuō),用戶不是固定的,由于人事變動(dòng)等原因,有的用戶名可能不再使用了,所以系統(tǒng)還應(yīng)該有刪除用戶的功能。

31、 5 系統(tǒng)設(shè)計(jì)的目標(biāo) 準(zhǔn)確。能夠正確評(píng)測(cè)出用戶程序的結(jié)果。特別是以下幾個(gè)小的方面:給出正確的 Compile Error 信息。Presentation Error 和 Wrong Answer 的區(qū)分。如何準(zhǔn)確測(cè)量用戶程序的執(zhí)行時(shí)間。如何準(zhǔn)確測(cè)量用戶程序執(zhí)行時(shí)所用的內(nèi)存數(shù)量。 穩(wěn)定。一方面體現(xiàn)在網(wǎng)站的架設(shè)上,要求訪問(wèn)頁(yè)面快速;另外體現(xiàn)在判題的速度上。同樣程序多次重復(fù)提交時(shí)結(jié)論相同,參數(shù)(運(yùn)行時(shí)間和內(nèi)存)基本一致。對(duì)于大量并發(fā)訪問(wèn)具有很強(qiáng)的伸縮性。 安全。由于 Online Judge System 系統(tǒng)的特殊性,在通常網(wǎng)站安全設(shè)置的基礎(chǔ)上,由于可以執(zhí)行用戶程序,還要在安全上作更多

32、的考慮。如:防止用戶將題目測(cè)試數(shù)據(jù)外傳。如通過(guò)網(wǎng)絡(luò)將輸入數(shù)據(jù)傳走。防止用戶通過(guò)程序獲取服務(wù)器內(nèi)部信息。如 passwd 文件。防止由于用戶有意破壞系統(tǒng)。如用戶程序執(zhí)行 system(”reboot”),或者最經(jīng)典的while(1) fork(); 代碼。防止無(wú)意的系統(tǒng)破壞。如由于緩沖區(qū)溢出造成的錯(cuò)誤。 6 主要研究?jī)?nèi)容 這次課題主要是完整的開(kāi)發(fā)整個(gè)程序設(shè)計(jì)競(jìng)賽平臺(tái),實(shí)現(xiàn)競(jìng)賽評(píng)判的自動(dòng)化,標(biāo)準(zhǔn)化。在用戶提交源程序時(shí),能自動(dòng)地進(jìn)行編譯,運(yùn)行和測(cè)試,并給出詳細(xì)確切的評(píng)判結(jié)果。本次課題的主要研究?jī)?nèi)容包括: (1)實(shí)現(xiàn)編譯模塊對(duì)各種編程語(yǔ)言的支持; (2)在運(yùn)行器中,通過(guò)調(diào)用系統(tǒng)的進(jìn)程參

33、數(shù)信息,以達(dá)到對(duì)程序運(yùn)行時(shí)的時(shí)間,內(nèi)存消耗精確的測(cè)量,能夠給出準(zhǔn)確的運(yùn)行時(shí)錯(cuò)誤信息; (3)測(cè)試器中,要能準(zhǔn)確的區(qū)分 Presentation Error 和 Wrong Answer; (4)實(shí)現(xiàn)對(duì)提交的程序作業(yè)快速的評(píng)判,及時(shí)響應(yīng)用戶的操作; (5)做到界面友好化,方便用戶使用,方便管理員維護(hù); (6)對(duì)各類用戶進(jìn)行嚴(yán)格的操作權(quán)限控制; 在實(shí)現(xiàn)以上內(nèi)容的基礎(chǔ)上,軟件設(shè)計(jì)采用基于面向?qū)ο蟮乃枷?,各模塊定義標(biāo)準(zhǔn)的接口,方便模塊間的復(fù)用,使得系統(tǒng)功能更易擴(kuò)展,維護(hù)。 7 開(kāi)發(fā)工具的選擇 7.1 Apache + PHP + MySQL Linux 以其安全可靠、代碼開(kāi)

34、放、低成本和豐富的第三方軟件,受到網(wǎng)站設(shè)計(jì)人員的青睞,其中 Apache+MySQL+PHP 更是引人注目,再加上 Mod―Auth―MySQL、phpMyAdmin 等模塊的支持,使網(wǎng)站開(kāi)發(fā)人員更是如虎添翼。其中 Apache 是網(wǎng)站服務(wù)程序,功能類似于微軟的 IIS 信息服務(wù)器;MySQL 是一種多用戶、多線程的數(shù)據(jù)庫(kù)服務(wù)器,它以簡(jiǎn)單易用而著稱,即使你對(duì)數(shù)據(jù)庫(kù)了解不深也沒(méi)關(guān)系,但你千萬(wàn)別擔(dān)心它的功能和安全問(wèn)題;PHP 是一種新興的編程語(yǔ)言,語(yǔ)法上類似于 C 語(yǔ)言,功能很強(qiáng);phpMyAdmin 就是用 PHP 編寫(xiě)的用于 MySQL 數(shù)據(jù)庫(kù)管理的免費(fèi)軟件;Mod―Auth―MySQL 是

35、Apache 用于用戶身份認(rèn)證的第三方模塊。由此,我選擇 Apache+MySQL+PHP 來(lái)開(kāi)發(fā)這個(gè)前臺(tái)系統(tǒng)。 1.PHP 簡(jiǎn)介 PHP 是一種功能強(qiáng)大的語(yǔ)言和解釋器,無(wú)論是作為模塊方式包含到 web 服務(wù)器里安裝的還是作為單獨(dú)的 CGI 程序程序安裝的,都能訪問(wèn)文件、執(zhí)行命令或者在服務(wù)器上打開(kāi)鏈接。PHP 是特意設(shè)計(jì)成一種比用 Perl 或 C 語(yǔ)言所編寫(xiě)的 CGI 程序要安全的語(yǔ)言。而且 PHP 是免費(fèi)的,他和免費(fèi)的 MySQL, Apache 搭配被稱作黃金組合,而且 PHP是開(kāi)放源代碼的,跨平臺(tái)是 不能抗衡的。在服務(wù)器領(lǐng)域大概有85%是用 Linux 做系統(tǒng),很少有企業(yè)用

36、Windows,第一安全性差,第二成本高。因此 php 被廣泛使用。 2.MySQL 簡(jiǎn)介 目前市場(chǎng)上數(shù)據(jù)庫(kù)的主流廠商及產(chǎn)品有 Microsoft SQL SERVER 2000、ORACLE 9i、MySQL 等,SQL SERVER 只適用于 Windows 平臺(tái),而且購(gòu)買(mǎi)昂貴,ORACLE 9i 雖然功能很強(qiáng),但操作復(fù)雜,不易學(xué)習(xí),而且更昂貴,MySQL 對(duì) Linux 和 Windows 系統(tǒng)的服務(wù)器兼容性都很好,而且免費(fèi),學(xué)習(xí)也比較簡(jiǎn)單。 7.2 Qt Qt 是基于標(biāo)準(zhǔn) C++ 構(gòu)架的高性能,跨平臺(tái)的軟件開(kāi)發(fā)工具包。除了可擴(kuò)展的 C++ 類庫(kù),Qt 還包含了使開(kāi)發(fā)程序

37、根快更直接的工具集。Qt 的跨平臺(tái)能力和國(guó)際化支持使得 Qt 應(yīng)用達(dá)到最大可能的市場(chǎng)。 自從 1995 年,Qt 的 C++ 框架一直是商業(yè)應(yīng)用程序的核心。使用 Qt 的公司和組織各種各樣,如 Adobe, Boeing, IBM, Motorola, NASA, Skype, 還有很多的較小的公司和組織。在增加更強(qiáng)大功能的同時(shí),Qt 4 設(shè)計(jì)得比以前版本更容易使用。Qt 的類都是完美并提供一致的接口,以協(xié)助學(xué)習(xí),減少開(kāi)發(fā)工作量,提高程序員的生產(chǎn)力。Qt 一向是完全面向?qū)ο蟆? 系統(tǒng)設(shè)計(jì) 系統(tǒng)架構(gòu)采用分離可縮放結(jié)構(gòu)。前端服務(wù)器負(fù)責(zé) Web 訪問(wèn),后端 Judge 服務(wù)器負(fù)責(zé)編譯,運(yùn)行和測(cè)

38、試程序。雙方通過(guò)數(shù)據(jù)庫(kù)耦合。Judge 服務(wù)器與 Internet 沒(méi)有連接,徹底保證測(cè)試數(shù)據(jù)不被外泄。 前端設(shè)計(jì)基于 B/S 模式模式進(jìn)行 Web 服務(wù)器設(shè)計(jì),后端 Judge 服務(wù)器采用多線程,多進(jìn)程并發(fā)處理機(jī)制,在保證系統(tǒng)穩(wěn)定性的同時(shí)極大地提高系統(tǒng)的響應(yīng)速度。整個(gè)系統(tǒng)采用面向?qū)ο蟮乃枷脒M(jìn)行設(shè)計(jì)。 1 設(shè)計(jì)原則 1.可靠性 系統(tǒng)中的軟/硬件及信息資源應(yīng)滿足可靠性設(shè)計(jì)要求,并能保證系統(tǒng)長(zhǎng)期安全的運(yùn)行; 2.安全性 系統(tǒng)應(yīng)具有必要的安全保護(hù)和保密措施; 3.容錯(cuò)性 系統(tǒng)應(yīng)具有較高的容錯(cuò)能力,有較強(qiáng)的抗干擾性,對(duì)各類用戶的誤操作應(yīng)有提示或自動(dòng)消除的能力; 4.可擴(kuò)充性 系統(tǒng)的

39、軟件應(yīng)具有擴(kuò)充升級(jí)的余地,可靈活地進(jìn)行功能的擴(kuò)充,不可因軟/硬件擴(kuò)充升級(jí)或改型而使原有系統(tǒng)失去作用; 5.實(shí)用性 注重采用成熟而實(shí)用的技術(shù),使系統(tǒng)建設(shè)的投入產(chǎn)出比最高,能產(chǎn)生良好的社會(huì)效益和經(jīng)濟(jì)效益; 6.易操作性 堅(jiān)持最終面向用戶的原則,建立友好的用戶界面,使用戶操作簡(jiǎn)單直觀,易于學(xué)習(xí)掌握。 2 評(píng)判過(guò)程 系統(tǒng)評(píng)判過(guò)程完全符合程序設(shè)計(jì)解決實(shí)際問(wèn)題的過(guò)程。用戶先在自己的計(jì)算機(jī)上編寫(xiě)好程序,經(jīng)過(guò)運(yùn)行,測(cè)試后,將程序源代碼提交到在線評(píng)判服務(wù)器。在服務(wù)器端,系統(tǒng)按照一定的規(guī)則從緩沖區(qū)中選取一個(gè)題目進(jìn)行評(píng)判。首先對(duì)源程序進(jìn)行編譯,如果程序存在語(yǔ)法錯(cuò)誤,則返回語(yǔ)法錯(cuò)誤信息(警告信息不算錯(cuò)誤信

40、息),否則,評(píng)判系統(tǒng)將運(yùn)行編譯通過(guò)后的可執(zhí)行程序,在用戶程序運(yùn)行過(guò)程中,對(duì)程序運(yùn)行所需的系統(tǒng)資源進(jìn)行嚴(yán)格的限制,防止惡意程序的攻擊。在程序運(yùn)行正常結(jié)束后,對(duì)運(yùn)行的結(jié)果進(jìn)行測(cè)試,如果是結(jié)果正確,則更新用戶的排名信息、答題數(shù)量、答題時(shí)間、問(wèn)題列表的答題統(tǒng)計(jì)信息等。 整個(gè)系統(tǒng)的大致工作過(guò)程如圖3-1所示,其中圖上省略了系統(tǒng)各階段的數(shù)據(jù)庫(kù)操作說(shuō)明部分。 圖1 評(píng)判流程 3 系統(tǒng)模塊圖 圖2 系統(tǒng)模塊 后端 Judge 服務(wù)器模塊包括:程序運(yùn)行器、守護(hù)進(jìn)程、編譯接口、用例測(cè)試器。 前端 Web 服務(wù)器模塊包括:系統(tǒng)管理員、用戶驗(yàn)證、排名統(tǒng)計(jì)、問(wèn)題瀏覽、提交、查看運(yùn)行狀態(tài)。

41、 系統(tǒng)管理員模塊 只提供給系統(tǒng)管理員對(duì)比賽日程計(jì)劃的控制,題庫(kù)錄入,參賽隊(duì)員信息管理,比賽期間系統(tǒng)管理員沒(méi)有任何的操作控制權(quán)限。 用戶驗(yàn)證 維護(hù)用戶比賽過(guò)程中各個(gè)頁(yè)面操作的權(quán)限控制,身份驗(yàn)證。 排名統(tǒng)計(jì) 根據(jù)競(jìng)賽規(guī)則(如前)對(duì)用戶進(jìn)行排名。 問(wèn)題瀏覽,提交,查看運(yùn)行狀態(tài) 各種界面設(shè)計(jì) 程序運(yùn)行器 程序運(yùn)行器執(zhí)行編譯產(chǎn)生的可執(zhí)行代碼,并事先設(shè)置該程序的權(quán)限和運(yùn)行限制,準(zhǔn)備輸入輸出重定向,然后產(chǎn)生解答輸出。 判斷程序運(yùn)行的狀態(tài)。其中要保證被執(zhí)行的程序不能危害系統(tǒng)的安全,不能訪問(wèn)非授權(quán)信息,不能占用超過(guò)規(guī)定量的資源。 程序運(yùn)行器是實(shí)現(xiàn)自動(dòng)評(píng)判和保證系統(tǒng)安全的

42、關(guān)鍵模塊。如何自動(dòng)限制用戶程序的資源占用,獲取用戶程序執(zhí)行信息,以及防止惡意用戶的破壞都是值得重視的問(wèn)題。 守護(hù)進(jìn)程 管理比賽例程,監(jiān)控 Judge 服務(wù)器的運(yùn)行狀態(tài),幫助程序運(yùn)行器完成對(duì)用戶進(jìn)程的監(jiān)控,必要時(shí)終止用戶進(jìn)程。守護(hù)進(jìn)程還負(fù)責(zé)與數(shù)據(jù)庫(kù)耦合,取出數(shù)據(jù)庫(kù)中尚未評(píng)判的程序,然后將程序的評(píng)判結(jié)果信息寫(xiě)回?cái)?shù)據(jù)庫(kù)。 編譯模塊 用于統(tǒng)一多個(gè)編譯器的編譯調(diào)用過(guò)程,支持多種程序設(shè)計(jì)語(yǔ)言,負(fù)責(zé)檢查用戶提交的程序語(yǔ)法,并編譯產(chǎn)生可執(zhí)行代碼。如果編譯器發(fā)現(xiàn)源程序語(yǔ)法錯(cuò)誤,需要立即指出,不再繼續(xù)該題的評(píng)判工作。 用例測(cè)試器 用例測(cè)試器對(duì)產(chǎn)生的解答輸出對(duì)比標(biāo)準(zhǔn)測(cè)試數(shù)據(jù)進(jìn)行測(cè)試,給出

43、評(píng)判結(jié)論。 用例測(cè)試器需要注意的一個(gè)重要問(wèn)題是,如何合理區(qū)分結(jié)果錯(cuò)誤和格式錯(cuò)誤。通常認(rèn)為,只是空白字符的不同,以及字母大小寫(xiě)的不同就是格式錯(cuò)誤,其它的就是結(jié)果錯(cuò)誤。 數(shù)據(jù)庫(kù) 用戶基本信息表、答題進(jìn)度表、答題結(jié)果表,題目列表,測(cè)試數(shù)據(jù)等。 4 前端 Web 系統(tǒng)模型 前端 Web 系統(tǒng),即給每個(gè)用戶使用的客戶端,負(fù)責(zé)接受用戶的命令,將程序提交給服務(wù)器,并將服務(wù)器返回的結(jié)果顯示給用戶。對(duì)于這種類型的應(yīng)用來(lái)說(shuō),有兩種模式可以選擇,一為客戶/服務(wù)器(C/S)模式,二為瀏覽器/服務(wù)器(B/S)模式。 C/S 模式有很多優(yōu)點(diǎn),比如能夠?qū)崿F(xiàn)更豐富的用戶操作方式,給用戶更加豐富的用戶體

44、驗(yàn)。但它也存在很根本的缺點(diǎn),即非常不容易管理,需要在每一個(gè)客戶端安裝程序。相對(duì)來(lái)說(shuō),B/S 模式就要方便很多,只需要客戶端有一個(gè)瀏覽器就行。在線評(píng)判系統(tǒng)的目標(biāo)是要在校園網(wǎng)上開(kāi)展大型的練習(xí)或競(jìng)賽,同時(shí),用戶的復(fù)雜性操作的需求不顯著,所以 B/S 模式是在線評(píng)判系統(tǒng)的最佳選擇,其系統(tǒng)模型如圖3.3 所示。 圖3 前端 Web 系統(tǒng)模型 5 后端 Judge 服務(wù)器系統(tǒng)模型 評(píng)判模塊對(duì)用戶提交的解答進(jìn)行評(píng)判。在目前的設(shè)計(jì)中,包含了兩大類的評(píng)判器: (1)本地評(píng)判器。本地評(píng)判器和評(píng)判系統(tǒng)框架執(zhí)行在同一個(gè)機(jī)器上。 (2)遠(yuǎn)程評(píng)判器。遠(yuǎn)程評(píng)判器可以運(yùn)行在不同的機(jī)器上,形成一個(gè)由多臺(tái)計(jì)算

45、機(jī)組成的集群,以大大提高系統(tǒng)的可伸縮性。 服務(wù)器在評(píng)判過(guò)程中,不管是編譯階段,程序運(yùn)行階段,還是用例測(cè)試階段,其工作量是相當(dāng)大的。特別是當(dāng)程序提交數(shù)量很多時(shí),可能會(huì)造成提交的問(wèn)題需長(zhǎng)時(shí)間的等待才能夠給予評(píng)判,這不僅影響了評(píng)判進(jìn)度,還會(huì)影響前端 Web 服務(wù)器的執(zhí)行速度。解決該問(wèn)題的一種方案是提升服務(wù)器的硬件性能指標(biāo),如使用工作站,甚至巨型機(jī)當(dāng)服務(wù)器,或分布式系統(tǒng)計(jì)算機(jī)。另一種解決方案是利用基于網(wǎng)絡(luò)的多服務(wù)器系統(tǒng)并行執(zhí)行。不管采用哪一種方案,在 Judge 服務(wù)器設(shè)計(jì)過(guò)程中,應(yīng)盡量提高評(píng)判過(guò)程中的并行執(zhí)行特性,如多線程,多進(jìn)程,多服務(wù)器,流水線系統(tǒng)結(jié)構(gòu)等。 圖4 并行系統(tǒng)結(jié)構(gòu) 并行執(zhí)

46、行的系統(tǒng)結(jié)構(gòu) 并行執(zhí)行的系統(tǒng)結(jié)構(gòu)是通過(guò)多線程,多進(jìn)程或多 Judge 服務(wù)器并行執(zhí)行一個(gè)程序評(píng)判的全過(guò)程。多個(gè) Judge 服務(wù)器通過(guò)緩沖區(qū)與評(píng)判系統(tǒng)的前端 Web 服務(wù)器耦合。緩沖區(qū)是一個(gè)臨界資源,必須采取相應(yīng)的機(jī)制(信號(hào)量,互斥鎖)使得多Judge服務(wù)器的同步與互斥。其參考模型如圖3-4所示。 其中每臺(tái) Judge 服務(wù)器都相對(duì)獨(dú)立的執(zhí)行一個(gè)程序的評(píng)判全過(guò)程(即編譯,運(yùn)行和測(cè)試)。 流水線式系統(tǒng)結(jié)構(gòu) 流水線式系統(tǒng)結(jié)構(gòu)借鑒計(jì)算機(jī)組成原理中的流水線式系統(tǒng)設(shè)計(jì)模式。它是將一個(gè)任務(wù)分成相對(duì)獨(dú)立的幾個(gè)階段,系統(tǒng)同時(shí)運(yùn)行各個(gè)階段,每個(gè)任務(wù)連續(xù)的從第一個(gè)階段流向最后一個(gè)階段完成一個(gè)任務(wù)的

47、整體。 該評(píng)判系統(tǒng)后端Judge服務(wù)器分為兩個(gè)階段:編譯系統(tǒng)模塊,運(yùn)行和測(cè)試系統(tǒng)模塊。各個(gè)模塊通過(guò)緩沖區(qū)銜接過(guò)度,其中個(gè)緩沖區(qū)也是臨界資源。系統(tǒng)參考模型如圖3-5所示。 圖5 流水線系統(tǒng)結(jié)構(gòu) 從圖中可以看出,每個(gè)系統(tǒng)相對(duì)獨(dú)立地執(zhí)行一個(gè)程序評(píng)判過(guò)程的相應(yīng)階段,但是一個(gè)題目的評(píng)判有可能編譯或運(yùn)行沒(méi)有正常通過(guò),因此并不一定流過(guò)該評(píng)判系統(tǒng)流水線的每一個(gè)階段。 6 數(shù)據(jù)庫(kù)設(shè)計(jì) 數(shù)據(jù)庫(kù)是連接該系統(tǒng)前端Web服務(wù)器與后端Judge服務(wù)器的橋梁,因此良好的數(shù)據(jù)庫(kù)設(shè)計(jì)至關(guān)重要。 數(shù)據(jù)庫(kù)中主要有用戶注冊(cè)信息表(userRegister),賽題表(problemLib),用戶排名表(rankLi

48、st),評(píng)判狀態(tài)表(status)。各表的屬性及表之間的聯(lián)系如圖3-6,圖中每個(gè)加粗字體的屬性為相應(yīng)實(shí)體的主鍵。 系統(tǒng)實(shí)現(xiàn)與測(cè)試 1 數(shù)據(jù)庫(kù)表結(jié)構(gòu) 數(shù)據(jù)庫(kù)中表的名稱:userRegister 主鍵:username 數(shù)據(jù)庫(kù)中表的名稱:rankList 主鍵:rank 數(shù)據(jù)庫(kù)中表的名稱:problemLib 主鍵:pid 表4 狀態(tài)表 數(shù)據(jù)庫(kù)中表的名稱:status 主鍵:runID 2 前端Web服務(wù)器 前端 web 服務(wù)器主要負(fù)責(zé)各種用戶界面瀏覽和相關(guān)的數(shù)據(jù)庫(kù)初始操作,它是用戶進(jìn)行比賽的環(huán)境。應(yīng)該做到人性化的交互界面,操作簡(jiǎn)便安全,為用戶提供友好的操作信息

49、。 以下就各主要界面進(jìn)行詳細(xì)設(shè)計(jì)介紹,另附有相關(guān)測(cè)試圖示。 2.1 用戶注冊(cè) 填寫(xiě)用戶注冊(cè)信息 ==〉確認(rèn)后提交 ==〉檢查用戶名是否合法、密碼是否一致、及電話號(hào)碼、郵箱是否符合格式 ==〉注冊(cè)成功,存入 userRegister 數(shù)據(jù)庫(kù)并將 username 存入 rankList 表中的 team 字段。 圖1 用戶注冊(cè)界面 2.2 用戶登錄 讀取 userRegister 數(shù)據(jù)庫(kù)中的 username 對(duì)應(yīng) password 字段與提交的 password 比較,進(jìn)行身份驗(yàn)證。只有驗(yàn)證成功后,才能參與競(jìng)賽。 圖2 用戶登錄界面 2.3 系統(tǒng)首頁(yè) 主要顯示

50、比賽例程信息,幾個(gè)主要鏈接,要求在比賽未開(kāi)始之前不顯示相關(guān)鏈接,以防止透露題目。 圖3 系統(tǒng)首頁(yè) 2.4 問(wèn)題列表 讀取數(shù)據(jù)庫(kù)中的題庫(kù)信息進(jìn)行顯示,包括相關(guān)的答題進(jìn)度信息。 圖4 問(wèn)題列表 2.5 問(wèn)題評(píng)判狀態(tài)表 列出各個(gè)提交問(wèn)題的評(píng)判結(jié)果,當(dāng)結(jié)果為 Compile Error 時(shí),返回編譯的錯(cuò)誤信息。按問(wèn)題的提交時(shí)間逆序排列。 圖5 評(píng)判狀態(tài)表 2.6 競(jìng)賽排名表 該表每 30 秒刷新一次,以便獲得實(shí)時(shí)的競(jìng)賽結(jié)果排名。首先根據(jù)答題數(shù)量逆序排列,答題數(shù)目相同的,再根據(jù)總時(shí)間升序排列。答題數(shù)目為零的不參與排名。 圖6 競(jìng)賽排名 3 后端 judge 服

51、務(wù)器 后端 judge 服務(wù)器評(píng)判流程圖如圖7。 圖7 后臺(tái) judge 數(shù)據(jù)流圖 3.1 編譯模塊 Gcc 編譯器介紹 Linux 系統(tǒng)下的 Gcc(GNU C Compiler)是 GNU 推出的功能強(qiáng)大、性能優(yōu)越的多平臺(tái)編譯器,是 GNU 的代表作品之一。Gcc 是可以在多種硬件平臺(tái)上編譯出可執(zhí)行程序的超級(jí)編譯器,其執(zhí)行效率與一般的編譯器相比平均效率要高20%~30%。 Gcc 編譯器能將 C、C++ 語(yǔ)言源程序、匯編程序和目標(biāo)程序編譯、連接成可執(zhí)行文件。在Linux 系統(tǒng)中,可執(zhí)行文件沒(méi)有統(tǒng)一的后綴,系統(tǒng)從文件的屬性來(lái)區(qū)分可執(zhí)行文件和不可執(zhí)行文件。而 gcc

52、則通過(guò)后綴來(lái)區(qū)別輸入文件的類別。 Gcc 編譯高級(jí)語(yǔ)言一般經(jīng)歷四個(gè)步驟:預(yù)處理(也稱預(yù)編譯,Preprocessing)、編譯(Compilation)、匯編 (Assembly) 和連接 (Linking)。 Gcc 選項(xiàng)主要包括總體選項(xiàng)、告警和出錯(cuò)選項(xiàng)、優(yōu)化選項(xiàng)和體系結(jié)構(gòu)相關(guān)選項(xiàng)。 表5 總體選項(xiàng) 表6 告警和出錯(cuò)選項(xiàng) 工作流程 進(jìn)入當(dāng)前環(huán)境,選取題目,設(shè)置編譯選項(xiàng)(包括選擇編譯器,設(shè)置編譯參數(shù)),編譯,讀取編譯結(jié)果,判斷編譯結(jié)果(是否通過(guò))。其主要代碼如下: Class Compiler 的服務(wù): 圖8 類 Compiler 的服務(wù) 3.2 運(yùn)行

53、及測(cè)試器模塊 程序與進(jìn)程 進(jìn)程(Process)是最初定義在 Unix 等多用戶、多任務(wù)操作系統(tǒng)環(huán)境下用于表示應(yīng)用程序在內(nèi)存環(huán)境中基本執(zhí)行單元的概念。以 Unix 操作系統(tǒng)為例,進(jìn)程是 Unix 操作系統(tǒng)環(huán)境中的基本成分、是系統(tǒng)資源分配的基本單位。Unix 操作系統(tǒng)中完成的幾乎所有用戶管理和資源分配等工作都是通過(guò)操作系統(tǒng)對(duì)應(yīng)用程序進(jìn)程的控制來(lái)實(shí)現(xiàn)的。 C、C++、Java 等語(yǔ)言編寫(xiě)的源程序經(jīng)相應(yīng)的編譯器編譯成可執(zhí)行文件后,提交給計(jì)算機(jī)處理器運(yùn)行。這時(shí),處在可執(zhí)行狀態(tài)中的應(yīng)用程序稱為進(jìn)程。從用戶角度來(lái)看,進(jìn)程是應(yīng)用程序的一個(gè)執(zhí)行過(guò)程。從操作系統(tǒng)核心角度來(lái)看,進(jìn)程代表的是操作系統(tǒng)分

54、配的內(nèi)存、CPU 時(shí)間片等資源的基本單位,是為正在運(yùn)行的程序提供的運(yùn)行環(huán)境。進(jìn)程由四部分組成:PCB(進(jìn)程控制塊),正文段,數(shù)據(jù)段和用戶堆棧。PCB 包括進(jìn)程的編號(hào)、狀態(tài)、優(yōu)先級(jí)以及正文段和數(shù)據(jù)段中數(shù)據(jù)分布的大概情況。正文段存放該進(jìn)程的可執(zhí)行代碼。數(shù)據(jù)段存放進(jìn)程中靜態(tài)產(chǎn)生的數(shù)據(jù)結(jié)構(gòu)。用戶堆棧存放進(jìn)程中動(dòng)態(tài)產(chǎn)生的數(shù)據(jù)結(jié)構(gòu)。進(jìn)程與應(yīng)用程序的區(qū)別在于應(yīng)用程序作為一個(gè)靜態(tài)文件存儲(chǔ)在計(jì)算機(jī)系統(tǒng)的硬盤(pán)等存儲(chǔ)空間中,而進(jìn)程則是處于動(dòng)態(tài)條件下由操作系統(tǒng)維護(hù)的系統(tǒng)資源管理實(shí)體。 一個(gè)程序可以對(duì)應(yīng)多個(gè)進(jìn)程,而一個(gè)進(jìn)程,只能對(duì)應(yīng)一個(gè)程序。進(jìn)程具有動(dòng)態(tài)性,并發(fā)性,獨(dú)立性等特點(diǎn)。 工作流程 選取題目,設(shè)置輸

55、入輸出文件,運(yùn)行,用例測(cè)試,判斷結(jié)果。其中主要的代碼如下: Class Executer 的服務(wù): 圖9 類 Executer 的服務(wù) 3.3 守護(hù)進(jìn)程模塊 通過(guò)使用兩個(gè)線程并發(fā)地執(zhí)行評(píng)判任務(wù)。類似于生產(chǎn)者—消費(fèi)者模型,其中 Daemon 是生產(chǎn)者,Starter 是消費(fèi)者??梢允且粋€(gè)生產(chǎn)者,多個(gè)消費(fèi)者,使得可以開(kāi)啟多個(gè)評(píng)判程序并行的執(zhí)行任務(wù),或是基于網(wǎng)絡(luò)的多服務(wù)器相對(duì)獨(dú)立的并行工作。必須采取相應(yīng)的互斥訪問(wèn)機(jī)制以避免一個(gè)題目被重復(fù)的評(píng)判。 通過(guò)使用一個(gè)環(huán)形緩沖區(qū)將一個(gè) Daemon 線程和一組 Starter 線程聯(lián)系起來(lái)。只要緩沖區(qū)未滿,Daemon 線程就可把從

56、數(shù)據(jù)庫(kù)中取出的未評(píng)判的問(wèn)題號(hào)放入緩沖區(qū)中,同樣,只要緩沖區(qū)未空,Starter 線程就可從緩沖區(qū)中取出題目進(jìn)行評(píng)判。僅當(dāng)緩沖區(qū)滿時(shí),Daemon線程被阻塞,類似地,僅當(dāng)緩沖區(qū)空時(shí),Starter 線程被阻塞。為了實(shí)現(xiàn)線程 Daemon 與 Starter 的同步與互斥,設(shè)置了兩個(gè)私用信號(hào)量和一個(gè)公用信號(hào)量如下: * 公用信號(hào)量 mutex,初值為 1,表示沒(méi)有進(jìn)程進(jìn)入臨界區(qū),它用于實(shí)現(xiàn)進(jìn)城互斥。 * 私用信號(hào)量 freeBuffer,用于表示可用的緩沖區(qū)數(shù),初值為 BufferSize。 * 私用信號(hào)量 usedBuffer,用于表示尚未評(píng)判的題目數(shù)量,初值為 0。 Daemo

57、n—Starter 的線程描述如圖10。 圖10 Daemon - Starter 線程描述 當(dāng)答題狀態(tài)為 Accepted 時(shí),數(shù)據(jù)庫(kù)表 rankList 的更新算法如圖11。 圖11 數(shù)據(jù)庫(kù)表 rankList 的更新算法 如果多次提交正確答案,則按照最后一次提交正確時(shí)進(jìn)行參與評(píng)判統(tǒng)計(jì)。 4 系統(tǒng)測(cè)試 4.1 測(cè)試題目 輸入用例: 輸出用例: 4.2 測(cè)試程序 程序一: 評(píng)判結(jié)果:Accepted 程序二: 評(píng)判結(jié)果:Compile Error ../judge/src/2.c: In function `main: ../ju

58、dge/src/2.c:8: error: syntax error at end of input 程序三: 評(píng)判結(jié)果:Presentation Error 程序四: 評(píng)判結(jié)果:Time Limit Exceeded 程序五: 評(píng)判結(jié)果:Wrong Answer 程序六: 評(píng)判結(jié)果:Runtime Error 圖6 E-R 圖 7 面向?qū)ο蟮南到y(tǒng)設(shè)計(jì) 對(duì)于面向?qū)ο蟮能浖到y(tǒng)來(lái)說(shuō),如何盡量提高系統(tǒng)的可維護(hù)性是一個(gè)核心的問(wèn)題。實(shí)踐證明,一個(gè)軟件開(kāi)發(fā)可能只需要半年的時(shí)間,而維護(hù)則需要花費(fèi)很多年。一個(gè)軟件項(xiàng)目在其生命周期之內(nèi)花費(fèi)在維護(hù)上的費(fèi)用是

59、花在原始開(kāi)發(fā)上的費(fèi)用的兩倍甚至更多。 軟件系統(tǒng)和硬件系統(tǒng)有很多不同之處。通常,硬件系統(tǒng)在開(kāi)發(fā)完成之后,不會(huì)做太大的修改和擴(kuò)展,其維護(hù)工作主要是保證硬件系統(tǒng)的正常運(yùn)行,解決一些存在的錯(cuò)誤和缺陷。但是,通常賦予軟件系統(tǒng)的維護(hù)的含義卻要大得多,軟件的維護(hù)就是軟件的再生。用戶希望一個(gè)軟件系統(tǒng)在其生命周期之內(nèi)能夠不斷滿足自己需求的變化。一個(gè)好的軟件設(shè)計(jì),必須能夠允許新的設(shè)計(jì)要求以較為容易和平穩(wěn)的方式加入到已有的系統(tǒng)中去,從而使這個(gè)系統(tǒng)能夠不斷煥發(fā)出青春。 什么樣的系統(tǒng)設(shè)計(jì)才是好的系統(tǒng)設(shè)計(jì)?這個(gè)問(wèn)題一直困擾著軟件工程師們。一個(gè)好的系統(tǒng)設(shè)計(jì)應(yīng)該滿足的三條性質(zhì):可擴(kuò)展性(extensibility)、靈活性(Flexibility)、可插入性(Pluggability)。這三條性質(zhì)就是一個(gè)系統(tǒng)設(shè)計(jì)應(yīng)當(dāng)達(dá)到的目標(biāo)。 (1)可擴(kuò)展性。新的性能可以很容易的加入到系統(tǒng)當(dāng)中去,就是可擴(kuò)展性。 (2)靈活性??梢栽试S代碼修改平穩(wěn)的發(fā)生,而不會(huì)波及到其他模塊,就是靈活性。 (3)可插入性。可以很容易的將一個(gè)類抽出去,同時(shí)將另一個(gè)有同樣接口的類加入進(jìn)來(lái),就是可插入性。 那么,如何才能做出符合上述三項(xiàng)要求的設(shè)計(jì)呢?關(guān)鍵是恰當(dāng)?shù)奶岣哕浖目删S護(hù)性和可復(fù)用性。

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!