C++開源跨平臺OJ系統判題核心—— FreeJudger(一)

凝霜發表於2013-02-03

C++開源跨平臺OJ系統判題核心—— FreeJudger

By 馬冬亮(凝霜  Loki)

一個人的戰爭(http://blog.csdn.net/MDL13412)

專案背景

本專案是為作者所在學校搭建OJ系統時衍生出來的一個專案,由於我的學弟、學妹們對Linux系統不熟悉,為了我們這批人畢業了以後,有人能維護OJ系統,因此選用了可以執行在Windows平臺的開源OJ系統。

起初,我的一個同學用NOJ(南京航空航天大學的OJ)搭建起了我們協會最初版本的OJ,但是這套OJ系統的判題核心不開源,且安全性得不到保證,再加上其web介面實在是太難看,我的一位學長ZB選擇hustoj做為協會的新一代OJ平臺。hustoj最初被設計在Linux系統上執行,因此需要對其進行二次開發,經過驗證,此OJ的移植工作主要集中在判題程式上。至此,作者ZB發起了FreeJudger開源專案,並希望藉由此專案,推動國內OJ的發展。

功能需求

  • 崩潰自動重啟;
  • 支援並行/併發評判;
  • 支援多種語言的評判;
  • 能至少在Windows平臺*nix平臺執行;
  • 支援安全沙箱功能(限制程式執行記憶體、執行時間、對系統的訪問/更改等),保證系統安全。

系統架構


可執行程式

分為守護程式監控程式兩部分組成,其中守護程式是執行在後臺進行評判的核心,監控程式提供一個GUI介面供使用者獲取守護程式執行狀態,並對其進行控制(無需一直執行,可以在需要時,連線到守護程式,支援遠端訪問)。

PlatformLayer

  • PlatformLayer用於遮蔽作業系統的細節,其組成及功能如下:
  • logger:日誌庫,目前使用log4cxx作為核心;
  • xml:配置檔案解析庫,目前使用RapidXML作為核心;
  • filetool:提供對系統檔案的基本操作(建立、刪除檔案/資料夾,讀取、寫入檔案),目前使用Boost.FileSystem作為核心;
  • process:提供對程式的封裝,其介面為仿Linux風格,目前各平臺採用原生系統呼叫實現;
  • thread:提供POSIX相容的執行緒封裝,目前使用Boost.Thread作為核心;
  • taskmanager:提供工作管理員,用於管理判題任務;
  • sql:提供對資料庫的抽象,目前支援MySQL資料庫的操作;
  • net:用於實現守護程式監控程式之間的通訊;
  • windowsapihook:用於遮蔽掉Windows Job在一些Windows平臺上彈出“應用程式錯誤”對話方塊的問題,使用微軟Detours庫實現。

系統軟體支援

用於支撐判題程式。

作業系統

FreeJudger要支援的作業系統平臺,至少要支援Windows*nix

專案組織

構建工具及IDE

  • Windows平臺:VC++ 2010
  • Linux平臺:Makefile + Vim
  • 其他平臺:Makefile

原始碼組織


目前正在進行Windows平臺的開發,其說明如下:

  • Daemon資料夾:守護程式工程;
  • Test資料夾:用於臨時測試程式碼的工程;
  • judgerlib資料夾:PlatformLayer層,每個模組一個工程;
  • thirdpartylib資料夾:用到的第三方庫(需要編譯的,在裡面提供預先編譯好的靜態/動態庫);
  • doc資料夾:專案文件;
  • Debug/Release資料夾:程式輸出目錄。

二級資料夾組織如下圖所示:



專案主頁

https://github.com/NsLib/FreeJudger

歡迎加入

群117975329,驗證資訊CSDN

主要維護人:

  • 周寶    you_lan_hai@foxmail.com
  • 馬冬亮  mdl2009@vip.qq.com

相關文章