Я пытаюсь найти библиотеку c или c ++, которая могла бы работать с задачами (или потоками) упреждающим способом. Мне нужен механизм, который мог бы управлять задачами один за другим, как в RTOS. Создание задач (функция в качестве точки входа в задачу), временная привязка, переключение и т. Д.
Можно ли написать это в пространстве пользователя?
Самое простое решение — это запустить реальный ОСРВ в виртуальной машине или эмулятор процессора. Любую ОСРВ с портом x86 можно убедить запустить на виртуальной машине ПК, но вы также можете использовать QEMU.
Например, вы можете запустить RTEMS на QUEMU, и сам QUEMU может эмулировать цели ARM — хотя это может не иметь значения, и эмуляция i386 может удовлетворить ваши потребности и будет быстрее.
Планирование / диспетчеризация RTOS для эффективной обработки потоков требует аппаратных прерываний для эффективной связи с периферийным оборудованием (КБ, мышь, диск, NIC, таймер и т. Д.). Стандарт C не имеет средств обработки прерываний, поэтому вы не можете этого сделать.
Если у вас есть аппаратное обеспечение управления памятью, которое определяет отдельные права доступа к памяти пользователя и ядра, то нет — аппаратное прерывание изменит состояние аппаратного обеспечения, и вы оставите пространство пользователя независимо от того, хотите вы этого или нет.
Вы должны знать, что вытесняющие планировщики не предназначены в первую очередь для переключения между задачами, для которых требуется ЦП при прерывании по таймеру, — они спроектированы в первую очередь для обеспечения эффективного высокопроизводительного ввода-вывода, удаляя ЦП из задач, которые не нуждаются в этом, потому что их Запросы ввода / вывода не могут быть выполнены немедленно.