Поскольку это вопрос интервью, я просто предлагаю алгоритм решения этой проблемы.
Предположим, у нас есть три отдельные очереди для трех типов задач, что означает, что у нас есть три очереди, одна для Типа А, другаядля TypeB, другое для Typec.
У нас может быть queueToprocess, скажем, это Qp.
Есть планировщик, который контролирует Qa, Qb, Qc и заполняет Qp.
Допустим, у каждой Задачи в Qa, Qb, Qc будет специальное поле, в котором указано количество циклов ЦП, необходимое для выполнения задачи.
Позволяет сказать, что у Qa три задачиесли для первой задачи требуется 1 такт, для второй задачи требуется три такта, а для третьей - 3 такта.
Допустим, у Qb есть одна задача, для которой требуется 2 такта, а у Qc - одна задача, требующая 1 такт.
Планировщик разделит задачу T на небольшие задачи и выполнит запрос в Qp.
Тогда Qp будет выглядеть как Tc, Tb, Ta1, Ta2, Ta2, Ta2, Ta3, Ta3, Ta3.
Процессор может заблокировать Qp и выполнить задачу.
Если кто-то найдет способ улучшить этот алгоритм, пожалуйста, исправьте.