|
|
@@ -0,0 +1,114 @@
|
|
|
+# Техническое задание
|
|
|
+## на разработку обучающей игры «Диспетчер потоков: управление режимами»
|
|
|
+
|
|
|
+### 1. Общие сведения
|
|
|
+
|
|
|
+**Название проекта:** «Диспетчер потоков: управление режимами» (Thread Scheduler Simulator)
|
|
|
+
|
|
|
+**Назначение:** Обучающее ПО для демонстрации алгоритмов планирования потоков в операционных системах, переключения между пользовательским режимом и режимом ядра, а также обработки прерываний.
|
|
|
+
|
|
|
+**Целевая аудитория:** Студенты IT-направлений, преподаватели курсов по операционным системам, разработчики многопоточных приложений.
|
|
|
+
|
|
|
+**Платформа реализации:**
|
|
|
+- Язык программирования: Python 3.8 и выше.
|
|
|
+- Графическая библиотека: Pygame 2.5.
|
|
|
+- Поддерживаемые ОС: Windows 10/11, Ubuntu 20.04+, macOS 11+.
|
|
|
+- Минимальные требования: 2 ГБ ОЗУ, процессор от 1.5 ГГц, разрешение экрана от 1024×768.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 2. Функциональные требования
|
|
|
+
|
|
|
+**2.1. Выбор алгоритма планирования**
|
|
|
+При запуске игрок видит две кнопки: «Round Robin» и «Приоритетное (с вытеснением)». Выбор определяет поведение планировщика на протяжении всей игры.
|
|
|
+
|
|
|
+**2.2. Управление потоками**
|
|
|
+После выбора алгоритма появляется интерфейс добавления потоков. Кнопка «+ Поток» создаёт новый поток со следующими случайными параметрами:
|
|
|
+- уникальный идентификатор (ID);
|
|
|
+- приоритет от 1 до 5 (1 – наивысший);
|
|
|
+- остаток процессорного времени (CPU burst) от 4 до 12 тактов.
|
|
|
+Игрок может добавить любое количество потоков, но для перехода к симуляции необходимо минимум три потока.
|
|
|
+
|
|
|
+**2.3. Отображение очереди и активного потока**
|
|
|
+Все добавленные потоки показываются в виде цветных прямоугольников. На каждом прямоугольнике подпись: «T[ID] (ост. X)». Текущий выполняемый поток выделяется красным мигающим контуром или заливкой. Очередь визуально обновляется после каждого шага.
|
|
|
+
|
|
|
+**2.4. Пошаговое выполнение**
|
|
|
+Кнопка «Шаг (квант)» запускает один шаг планировщика.
|
|
|
+- Для Round Robin: поток выполняется 3 такта (квант), после чего перемещается в конец очереди, если не завершился раньше.
|
|
|
+- Для приоритетного алгоритма: каждый такт проверяется наличие потока с более высоким приоритетом (меньшим числом). Если такой есть – текущий поток вытесняется и помещается в начало очереди (или в конец – на усмотрение реализации, но вытеснение должно быть заметно).
|
|
|
+
|
|
|
+**2.5. Эмуляция прерывания**
|
|
|
+После того как игрок сделал не менее четырёх шагов, появляется кнопка «Прерывание!». При её нажатии имитируется внешнее прерывание (переход в режим ядра). Эффект: приоритет текущего потока повышается на 2 (числовое значение уменьшается на 2, но не ниже 1). На экран выводится сообщение: «Прерывание обработано! Приоритет потока T[X] повышен».
|
|
|
+
|
|
|
+**2.6. Завершение игры**
|
|
|
+Когда все потоки исчерпали свой остаток процессорного времени, появляется сообщение «Все потоки завершены! Игра пройдена» и кнопка «Выход». Также кнопка «Выход» доступна на любом этапе для принудительного закрытия.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 3. Нефункциональные требования
|
|
|
+
|
|
|
+**3.1. Производительность**
|
|
|
+Частота кадров должна быть не ниже 30 FPS при работе с 10 потоками. Отклик на нажатие кнопок – мгновенный (без заметных задержек).
|
|
|
+
|
|
|
+**3.2. Надёжность**
|
|
|
+Программа не должна завершаться аварийно при некорректных действиях пользователя, например при попытке сделать шаг, когда очередь пуста, или при нажатии на кнопку до выбора алгоритма.
|
|
|
+
|
|
|
+**3.3. Удобство использования**
|
|
|
+Всё управление осуществляется мышью. Кнопки имеют эффект наведения (меняют цвет). Текст сообщений (о добавлении потока, о прерывании, о завершении) выводится в специальной области экрана.
|
|
|
+
|
|
|
+**3.4. Требования к графике и анимациям**
|
|
|
+- Тёмная цветовая схема (фон тёмно-синий, элементы очереди – яркие контрастные цвета).
|
|
|
+- Скруглённые углы кнопок и прямоугольников потоков.
|
|
|
+- Пульсация активного потока (плавное изменение яркости или мигание).
|
|
|
+- Плавное обновление очереди (при удалении завершённого потока остальные сдвигаются).
|
|
|
+
|
|
|
+**3.5. Расширяемость**
|
|
|
+Код должен позволять легко добавлять новые алгоритмы планирования (например, FCFS или многоуровневые очереди). Для этого параметры вроде кванта времени и диапазонов приоритетов выносятся в константы в начале файла.
|
|
|
+
|
|
|
+**3.6. Совместимость**
|
|
|
+Использовать только кроссплатформенные возможности Pygame. Избегать системно-зависимых вызовов.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 4. Архитектура приложения
|
|
|
+
|
|
|
+Проект состоит из одного Python-скрипта. В нём реализованы:
|
|
|
+
|
|
|
+- **Класс Thread** – хранит ID, приоритет, оставшееся время, цвет для отрисовки.
|
|
|
+- **Класс Scheduler** – управляет очередью потоков, текущим потоком, алгоритмом, счётчиком кванта. Содержит методы `add_thread` и `step` (основная логика планирования).
|
|
|
+- **Функции отрисовки** – `draw_button` (рисует кнопку и возвращает True при нажатии), `draw_queue` (отображает очередь и активный поток), `draw_message` (вывод сообщений в нижней части экрана).
|
|
|
+- **Главный цикл** – обрабатывает события Pygame, управляет сценами (0 – выбор алгоритма, 1 – добавление потоков, 2 – симуляция), вызывает функции отрисовки и обновляет экран.
|
|
|
+
|
|
|
+Логика работы: сцена 0 → выбор алгоритма → сцена 1 → добавление не менее 3 потоков → сцена 2 → пошаговое выполнение с возможностью прерывания → завершение.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 5. Состав документации и поставки
|
|
|
+
|
|
|
+Вместе с программой поставляются следующие файлы в формате Markdown:
|
|
|
+
|
|
|
+- `lecture.md` – лекция по теме «Управление режимом потоков» объёмом около 650 слов, без орфографических ошибок, с оригинальностью выше 50%.
|
|
|
+- `questions.md` – пять вопросов для самопроверки, каждый с четырьмя вариантами ответа, правильный ответ выделен полужирным шрифтом.
|
|
|
+- `scenario.md` – сценарий интерактивной игры из пяти сцен, с описанием элементов, действий и условий перехода.
|
|
|
+- `thread_scheduler_game.py` – исполняемый код на Python с графическим интерфейсом.
|
|
|
+- `technical_specification.md` – настоящее техническое задание.
|
|
|
+
|
|
|
+Инструкция по запуску: установить Python, выполнить `pip install pygame`, затем запустить скрипт командой `python thread_scheduler_game.py`.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 6. Критерии приёмки
|
|
|
+
|
|
|
+- Программа успешно запускается на целевой ОС без ошибок.
|
|
|
+- Реализованы все функциональные требования: выбор алгоритма, добавление потоков, пошаговое выполнение, прерывание после четырёх шагов, корректное завершение.
|
|
|
+- Присутствуют анимации (мигание активного потока, эффекты наведения кнопок).
|
|
|
+- Исходный код соответствует стандарту PEP 8, содержит комментарии к сложным участкам.
|
|
|
+- Лекция содержит более 600 слов, орфографических ошибок менее 2%, не является копией готовых источников.
|
|
|
+- Сценарий игры включает минимум пять сцен с чёткими условиями перехода.
|
|
|
+- Вопросы оформлены согласно варианту №1: каждый вопрос с новой строки, ответы – ниже, правильный ответ полужирный, вопросы разделены пустой строкой.
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 7. Примечания
|
|
|
+
|
|
|
+Данное техническое задание является итоговым документом для разработки. Все изменения согласовываются с заказчиком. В будущем возможно расширение функционала: добавление графиков эффективности, звукового сопровождения, сохранения результатов. Текущая версия предназначена для демонстрации базовых концепций управления потоками в игровой форме.
|