Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
в потоках Linux реального времени ⇐ ПредыдущаяСтр 3 из 3
По умолчанию, использование операций с вещественными числами в потоках Linux реального времени запрещается. Вы должны использовать следующих функций реального времени для изменения статуса операций с вещественными числами: int pthread_setfp_np (pthread_t thread, int flag);
Для разрешения операций с вещественными числами в потоках используйте флаг 1, а для запрещения – передайте 0. Каталог examples/fp содержит различные примеры, которые используют вещественные числа и математическую библиотеку.
Соглашения по созданию симметричных многопроцессных задач С точки зрения планировщика потоков, для каждого активного CPU, Linux реального времени организует отдельный Unix процесс. В общем, функции управления потоками должны быть использованы только для потоков, которые запущены в локальном CPU. Заметными исключениями являются функции: int pthread_wakeup_np (pthread_t thread);// Разбудить остановленный поток int pthread_delete_np (pthread_t thread);// удаляет поток */
Связывание компонентов реального времени на Linux Потоки реального времени разделяют общее адресное пространство с ядром Linux, в принципе могут вызывать функций ядра Linux. Однако, в общем случае это не безопасно, так как потоки реального времени могут запускаться даже тогда, когда прерывания от Linux отключены. Поэтому, только функции которые не могут изменить данных ядра Linux могут быть вызваны из потоков реального времени (например, функция vsprintf). Чтобы обходить эти ограничения Linux реального времени предоставляют два механизма выполнения с задержкой: программные прерывания и очередь задач.
Использование прерываний В Linux реального времени имеется два типа прерываний: аппаратные и программные. Программные прерывания являются нормальными прерываниями ядра Linux. Они имеют преимущество, что некоторые функции ядра Linux могут быть вызваны безопасно в процедурах обработки прерывания (некоторые из них зависят от версии ядра). Однако, во многих задачах они не обеспечивают жесткого исполнения в реальном времени, они могут задерживаться чем допустимое время задержки. Аппаратные прерывания (прерывания реального времени) имеют намного меньше задержку. Однако, как и потоки реального времени, они имеют ограниченный набор функций, которые могут быть вызваны в процедурах обработки прерываний.
Решением этой проблемы является разделение функциональности между аппаратными и программными прерываниями.
#include <rtl_core.h>
int rtl_request_irq (unsigned int irq, unsigned int (*handler)(unsigned int, struct pt_regs *)); int rtl_free_irq (unsigned int irq);
Эти две функции используются для инсталляции и снятия процедур обработки аппаратных прерываний для определенных прерываний. Страницы руководства пользователя описывает эту работу в подробностях. Потоки реального времени вызываемые прерываниями могут быть созданы использованием функций запуска и остановки: int pthread_wakeup_np (pthread_t thread); int pthread_suspend_np (void); Поток управляемый прерыванием вызывает функцию pthread_suspend_np и блоков. Позже, процедура обработки прерывания вызывает функцию pthread_wakeup_np для этого потока. Поток будет запущен до тех пор, пока не выполнится следующий вызов функции pthread_wakeup_np.
Программные прерывания int rtl_get_soft_irq (void (*handler)(int, void *, struct pt_regs *), const char * devname); Эта функция размещает виртуальный номер прерывания и задает для него функцию как обработчик прерывания. Позже, это виртуальное прерывание будет запущен с помощью функции: void rtl_global_pend_irq(int ix); Эта функция безопасна при использовании в потоках реального времени и в прерываниях реального времени. Функция void free_irq(unsigned int irq, void *dev_id); является функцией ядра Linux, который снимает процедуру обработки прерывания для прерывания "irq". Для программных прерываний параметр dev_id должен быть равен 0. Программные прерывания использованы в реализации FIFO в Linux реального времени (файл fifos/rtl_fifo.c).
Написание планировщика и изменение стандартного планировщика Эта сложная тема должен записываться позже. Здесь только некоторые точки для отталкивания: Планировщик реализован в файле: scheduler/rtl_sched.c и в файлах зависимых от архитектуры (папки include/arch-i386 и scheduler/i386). Решение функциональности планировщика определена в функции rtl_schedule(). Путем изменения этой функции можно изменить политику планирования.
|
|||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 256; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.174.111 (0.005 с.) |