Skip to content

anvea-nsu/op-sys-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Введение

В данном разделе представлены задачи, последовательно выполняя которые вы познакомитесь с основными концепциями операционных систем и напишите свой кеширующий HTTP-прокси!

Структура проекта

Папка tasks содержит задачи, каждая из которых описана в файле labN.md. Задачи выполняются по мере увеличения номера N.

Каждый из этих файлов содержит набор теоретических вопросов к лабе, само задание, а также набор требований (включая интерфейсы), которым написанный вами код должен соответствовать. Все требования включаются друг в друга. Это означает, что требования к лабе 1 актуальны и для всех последующих лаб.

Основные требования, актуальные для всех лабораторных

  1. Код оформлен в едином стиле:
    1. однообразное именование функций, типов, переменных, макросов и т.д. (при этом допускается, что для каждого из этих объектов стиль именования свой);
    2. однообразные отступы;
    3. однообразная расстановка скобок;
    4. и т.д..
  2. Проверены возвращаемые значения функций и системных вызовов и предусмотрена адекватная реакция на ошибки. Можно не проверять на возвращаемое значение функцию printf().
  3. Сборка проекта должна производиться с помощью Makefile'ов
  4. При сборке кода не должно возникать ошибок и предупреждений (используйте -Wall -Wextra -Werror).
  5. Все ошибки в коде должны быть обработаны.
  6. При корректной работе программа должна завершаться с кодом возврата 0.
  7. Все ресурсы выделенные явно, должны быть также явно освобождены. Не должно быть точек выхода из программы, где не освобождаются явно выделенные ресурсы.

Как использовать тестирующую систему

  1. Склонируйте репозиторий тестов. Внимательно ознакомьтесь с README.md системы тестирования.
  2. Установите python3, pip и все необходимые зависимости командой pip install -r requirements.txt.
  3. Запустите тесты командой
    ./run_tests.py --src <путь до корневой директории вашего проекта>
    
    Примеры:
    ./run_tests.py --src /home/student/proxy
    ./run_tests.py --src ~/proxy
    ./run_tests.py --src ../../proxy
    
  4. При тестировании вы можете посмотреть описания всех тестов, увидеть какие были непройдены и почему.

Отлаживание падений

Тестовая система может сообщать о том, что при работе прокси был сгенерирован core dump (корка). Для этого нужно, чтобы был установлен gdb и ваша система могла генерировать корки. На линуксе это достигается следующим способом:

  1. Проверьте, установлен ли шаблон: cat /proc/sys/kernel/core_pattern.
    1. Если он начинается с символа |, то в вашей системе корки обрабатывает стороннее приложение. В этом случае тестовая система не сможет сообщать о корках. Вы можете сохранить текущее значение core_pattern, обновить на требуемое для тестирования, а потом вернуть обратно.
  2. Установить шаблон можно так: sudo sysctl -w kernel.core_pattern='core-%e.%p' или просто записав нужное значение в /proc/sys/kernel/core_pattern с правами администратора;
  3. Лимит на размер дампа ядра должен быть не 0. Для этого:
    1. Проверьте ограничение на размер корки командой ulimit -c unlimited;
    2. Замените его, если он равен нулю, командой ulimit -c unlimited (вместо unlimited можно число).
  4. Теперь при аварийном останове будут генерироваться дампы ядра, которые помогут вам при отлаживании. Файлы с корками будут лежать в той директории, в которой был вызван исполняемый файл (в случае шаблона core-%e.%p).

Если все настроено корректно, то тесты смогут ловить корки и выводить стектрейсы возникших падений.

Отлаживание из дампа ядра

Для дебага дампа нужно запустить gdb следующим образом:

gdb <путь до исполняемого файла> <путь до дампа ядра>

Получить стектрейс, который привел к падению, можно командой bt или bt full.

Улучшение проекта

Если вы нашли ошибки, неточности или противоречия в условиях задач или тестов, то будем рады, если вы сообщите о них. Также можете создавать пул реквесты для исправлений в репозиториях заданий и тестов.

About

Operating Systems: Proxy

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors