Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скорб и Макар (сборник задач в конце).doc
Скачиваний:
37
Добавлен:
09.02.2015
Размер:
856.58 Кб
Скачать
    1. Организация «песочницы»

Для безопасного управляемого запуска решений применяются четыре утилиты ОС Linux: утилита «chroot» позволяет изолировать запускаемую программу внутри заданного каталога; утилита «su» запускает программу от имени специального непривилегированного пользователя; утилита «ulimit» ограничивает ресурсы, доступные программе; утилита «time» измеряет время работы программы.

Сервер тестирования работает от имени пользователя «root», потому что только администратору операционной системы разрешено пользоваться утилитой «chroot». Решение задачи изолируется в каталоге «/var/chroot», который, собственно, и является «песочницей». Это означает, что для решения этот каталог представляется корнем файловой системы, и поэтому доступ к элементам файловой системы вне этого каталога становится невозможным.

«Песочница» содержит копии всех исполняемых файлов и библиотек, которые могут понадобиться запускаемому решению. Кроме того, в рамках «песочницы» создан непривилегированный пользователь «tbmstu», от имени которого запускается решение. Этому пользователю доступен для записи только каталог «/home/tbmstu» в рамках песочницы (реально «/var/chroot/home/tbmstu»). Перед каждым запуском решения содержимое этого каталога стирается. Затем в каталог помещается исполняемый файл решения, а также файл «input», содержащий входные данные очередного теста. Файл «input» направляется в стандартный входной поток запускаемого решения, а стандартный выходной поток перенаправляется в файл «output».

Когда решение поступает на сервер тестирования, оно компилируется, после чего осуществляется пробный запуск. Пробный запуск позволяет оценить размер секций кода исполняемого файла решения. Этот размер прибавляется к значению поля MemoryLimit пакета Query для получения максимального размера оперативной памяти, предоставляемой решению.

Выполнение решения для каждого теста осуществляется под контролем утилиты «ulimit», которая не позволяет решению использовать больше памяти, нежели посчитанный максимальный размер. Кроме того, утилита «ulimit» не разрешает решению порождать дочерние процессы и создавать файлы, суммарный размер которых превышает 100 Мб.

Время выполнения решения контролируется самим сервером тестирования. Если решение на каком-то тесте работает вдвое дольше, чем указано в поле TimeLimit пакета Query, сервер тестирования принудительно завершает выполнение решения. Сервер тестирования задаёт грубую верхнюю границу времени выполнения приложения, потому что неспособен производить точное измерение времени.

За точное измерение времени выполнения решения отвечает утилита «time». Если решение не было принудительно завершено сервером тестирования, то время, измеренное, утилитой «time», умножается на поправочный коэффициент, зависящий от производительности компьютера, на котором запущен сервер тестирования, сравнивается со значением TimeLimit, и, в случае превышения этого значения, выносится вердикт с кодом TIME_LIMIT_EXCEEDED.

Из-за того что организация «песочницы» требует активного использования утилит ОС Linux, сервер тестирования не может работать в ОС Windows. Однако, предположительно, его можно развернуть на FreeBSD и MacOS X.