Обучение языку ассемблера и архитектуре ЭВМ являются важной составляющей большинства учебных программ по подготовке программистов. Эти курсы задают основу, необходимую для освоения других дисциплин, таких как разработка компиляторов, устройство операционных систем, системное программирование и многих других. Современные инструменты для разработки на языке ассемблера рассчитаны на профессионалов в этой области и требуют многих смежных знаний для их продуктивного использования. К таким знаниям, например, относится опыт работы с командной строкой, понимание механизмов компиляции и компоновки программ и умение работать с консольными отладчиками. Всё это создаёт препятствия тем, кто только начинает свой профессиональный путь и не может с лёгкостью использовать и настраивать подобные инструменты, имеющие высокий порог вхождения.
Преподаватели и организаторы процесса обучения языку ассемблера также сталкиваются с похожими трудностями. Инструменты, используемые в процессе обучения, должны быть максимально наглядными, а проверка заданий — как можно более автоматизированной. Для наглядности, инструмент должен предоставлять удобный способ просматривать внутреннее состояние процессора, на котором запускается пользовательский код, а также выполнять различные манипуляции над ним, например, выполнение по шагам или редактирование значений регистров. В этой работе рассматривается процесс реализации программного инструмента удалённой сборки и отладки программ на языке ассемблера, призванного решить эти проблемы.
В первой главе данной работы подробно рассматриваются и анализируются многие существующие альтернативные решения проблемы. Исходя из этого анализа, строятся требования к разрабатываемому решению, и, во второй главе, приводится описание архитектуры программной реализации разработанного инструмента. В третьей главе производится исследование свойств разработанного решения, а также поиск его возможных будущих улучшений.
Целью и основным результатом данной работы является реализация обучающего веб-инструмента удалённой сборки и интерактивной отладки программ на языке ассемблера. В частности, в ходе выполнения данной работы были получены следующие результаты:
1. Было проведено исследование существующих решений для запуска и отладки программ на языке ассемблера, обучения этому языку. В ходе исследования были выявлены достоинства и недостатки существующих решений.
2. Были сформированы функцицональные и нефункциональные требования к разрабатываемому инструменту, учитывающие недостатки существующих решений. К этим недостаткам были отнесены: отсутствие поддержки архитектур, не принадлежащим к семейству x86; отсутствие поддержки интерактивной отладки; отсутствие интеграции с существующими системами управления обучением; необходимость установки на компьютер пользователя; закрытый исходный код некоторых решений.
3. Был реализован инструмент обучения языку ассемблера, поддерживающий интерактивный запуск кода на архитектурах x86-64 и AVR, а также имеющий поддержку задач и интеграцию с системами управления обучением по протоколу LTI. Взаимодействие с инструментом производится через веб-интерфейс.
4. Было произведено измерение потребления ресурсов и производительности разработанного инструмента. Исследование показало, что основным ограничением количества одновременно запускаемых сессий отладки является объём доступной оперативной памяти. С малой степенью ошибки было определено количество оперативной памяти и процессорного времени, потребляемое интерактивными сессиями отладки. Каждая сессия отладки потребляет 14-15 МиБ памяти и 4-6 мс процессорного времени в секунду. Также было проведено измерение времени реакции интерактивного отладчика на действия пользователя.
Время запуска программы составило 1,1-1,2 секунды, время реакции на остальные действия — 2-3 мс.
Таким образом, цель данной работы была достигнута в полном объёме. В процессе исследования было установлено, что при запуске на архитектуре x86-64, процесс отладчика GDB является основным потребителем оперативной памяти. Следовательно, для уменьшения использования памяти инструментом, имеет смысл исследовать способы уменьшить это использование памяти GDB. Для уменьшения времени реакции на запуск программы пользователем, стоит заранее создать какое-то количество простаивающих контейнеров, а процессы GDB сервера или эмулятора QEMU запускать уже в них.