Boxjan

填 越填越深的坑 啊

  • 首页
  • 归档
  • 分类
  • 友链
  • 关于

带有标签为:go, linux, sandbox 的文章

共找到结果 5 条
2019-08-02
0 comment

开发OJ之沙箱 — 改用 golang

Why go? 原因很简单,因为 go 好用。 OJ 的 web 端是用的Laravel,而其他部分打算用的是 Go ,虽然 go 能便捷的与 C/C++ 集成在一起,但是并不似很方便,如果涉及到指针也很容易出错,所以就考虑将沙箱也一起用 go 修改,如果以后心血来潮,做 windows 的支持,相比 C/C++ 语言也会方便的多。 改进了什么 Go 语言 为不同的系统提供了不同的API,在 Linux 下 亦有提供 getrusage,setrlimit 这类的API。 新的也考虑引入 cgroup这个资 […]

继续阅读 >>
2019-03-06
0 comment

开发OJ之沙箱 — 安装,使用

这段时间大部分在看Go语言的一些东西,为写 判题 和 判题队列管理 做着准备。这几天将 C++ 写的沙箱以动态链接库的形式与Go语言进行整合,这里记录一些遇到的问题。 大改 review 了代码之后发现 沙箱核心代码中并没有用到 std::string 的东西,为了性能就砍掉了一部分,将原有使用string的改为使用const char * , 但是在main函数中仍然在使用(为了偷懒。 接着是 Go语言只支持直接使用 C 的代码,这并不是说C++不行,编译成动态链接库之后, 提供一个C语言类型的接口即可, […]

继续阅读 >>
2019-01-25
0 comment

开发OJ之沙箱 — syscall 限制

计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同时运行的多个进程都需要访问这些资源,为了更好的管理这些资源进程是不允许直接操作的,所有对这些资源的访问都必须有操作系统控制。也就是说操作系统是使用这些资源的唯一入口,而这个入口就是操作系统提供的系统调用(System Call)【简写syscall】。Linux 提供的系统调用种类十分丰富,不乏一些危险的调用,例如vm86,这是我觉得最危险的系统调用之一,当然也有一些十分普遍的调用,比如read,write。 沙箱需要保护系统的安全,所以需要沙箱能控 […]

继续阅读 >>
2018-12-28
0 comment

开发OJ之沙箱 — 资源管理

资源限制是沙箱的重要的一部分, 另一部分是系统调用的拦截. 资源限制包括CPU时间, 内存, 写文件大小, 打开文件个数等等。 时间 时间限制 时间限制算是 算法竞赛 中要求最严格的部分了。 看了那么久的Unix环境高级编程, 一想到的就是拿setrlimit来限制;但是 setrlimit 不仅精度不够,而且他计算的时间是是CPU上运行的时间, 一来个sleep就不计入时间,这样很不好。看到老的judge_client是通过死循环不断看着的,我觉得不合适。参考了 QingdaoU/Judger 他们使用一 […]

继续阅读 >>
2018-12-16
0 comment

开发OJ之沙箱 — 设想和开始

学校现用的 OJ 是HUSTOJ的魔改版, 沙箱自然也是用的它的. 说为沙箱其实并不是很合理, 判题进程包含了构建沙箱这个东西, 他将所有的过程整合在一起, 使得二次开发不是很方便. 所以 专门 立了一个 SandBox 的项目, 新 OJ 将沙箱作为一个单独的项目独立出来, 以方便以后出现 bug 的修复. 我们并不打算考虑多平台, 开发过程中仅在Linux上进行测试, BSD 等 Unix 系统可能需要修改测试, 开发过程中 参考了 QingdaoU judger, EOJ judger, DMOJ j […]

继续阅读 >>
© 2018 - JanBox的小站 - 粤 ICP 备 18102102 号
14 queries, run in 0.030 in seconds.
Powered by  Boxjan & wordpress