![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
TNKernel ⇐ ПредыдущаяСтр 7 из 7
TNKernel — компактная и быстрая многозадачная ОСРВ для встроенных систем. Задача в TNKernel это часть программного кода, которая с точки зрения программиста выполняется одновременно с другими задачами, что обеспечивается разделением процессорного времени между ними. Каждая задача может быть представлена как независимое приложение, которое владеет уникальными ресурсами (регистры процессора, указатель стека и т.п.). Эти ресурсы называются контекстом задачи, а время в течении которого задача выполняется можно назвать временем в контексте задачи. Когда текущая задача приостанавливает выполнение (в случае прерывания или вызова сервиса), осуществляется переключение контекста - контекст текущей задачи сохраняется в ее стеке, а контекст наиболее приоритетной задачи из готовых к выполнению восстанавливается. Этот механизм в TNKernel называется " диспетчером". Определение наиболее приоритетной задачи в момент переключения контекста осуществляется на основании набора правил, а механизм, который обеспечивает соблюдение этих правил называется " планировщиком". В TNKernel используется приоритетное вытесняющее планирование, основанное на приоритете, назначаемом каждой задаче, при этом чем меньше величина, тем выше уровень приоритета. В TNKernel доступно 32 уровня приоритета для 32-битных контроллеров (ARM, MIPS) и 16 уровней приоритета для 16-битных контроллеров (PIC24/dsPIC). Приоритеты 0 (самый высокий) и 31(15) (самый низкий) зарезервированы для системных задач. Для пользовательских задач доступны приоритеты от 1 до 30(14) включительно. В TNKernel несколько задач могут иметь одинаковый приоритет. Задачи в TNKernel могут находиться в одном из четырех состояний: 1. RUNNING – задача выполняется в данный момент 2. READY – задача готова к выполнению, но не может получить процессорное время, так как в данный момент выполняется задача с более высоким (или равным) приоритетом. 3. WAIT/SUSPEND – когда задача находится в состоянии WAIT/SUSPEND она не может начать выполнение до тех пор пока не выполнится условие, которого задача ожидает. При входе в состояние WAIT/SUSPEND контекст задачи сохраняется, при выходе из этого состояния контекст восстанавливается. Состояние WAIT/SUSPEND делится на три типа: 1) WAITING – задача находится в состоянии WAIT/SUSPEND до тех пор пока не наступит событие, которого она ожидает - завершится таймаут, освободится семафор, установится флаг и т.п. 2) SUSPENDED – задача перемещена в состояние WAIT/SUSPEND другой задачей или самостоятельно путем вызова специального сервиса 3) WAITING_SUSPENDED – задача находится как в состоянии WAITING, так и в состоянии SUSPENDED (ожидает события и приостановлена специальным сервисом). Если задача освобождается от состояния WAITING (ожидаемое событие наступило), то она остается в состоянии SUSPENDED и наоборот. 4. DORMANT – задача уже создана, но еще ни разу не запускалась или выполнение задачи завершено с помощью специального таймера. Можно так же выделить состояние задачи, в котором она еще не создана - состояние NON-EXISTENT. В TNKernel во время выполнения задачи с наивысшим приоритетом ни одна из других задач не может получить управление до тех пор, пока эта задача не перейдет в состояние WAITING/SUSPEND или DORMANT. Если несколько задач с разными приоритетами готовы к выполнению (т.е. находятся в состоянии READY), управление получит задача с наивысшим приоритетом. Если несколько задач с одинаковым приоритетом готовы к выполнению, то управление получит задача, которая перешла в состояние READY раньше остальных, т.е. первой стоит в очереди готовых к выполнению.
|