реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вопрос по осям - ну уж не 0xff, скорей 0xfe, соседи почти, Как предпочтительней вызывать планировщик
greezol
сообщение Jan 29 2007, 01:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 29-01-07
Пользователь №: 24 831



При окончательном выходе из всех прерываний или можно из них? Я не говорю о переключателе контекста, только о планировщике.

По идее вроде как первый вариант прозрачнее - если несколько прерываний "вложились", и задали несколько условий отличающихся приоритетом и т.п., то на выходе планировщик пусть все разгребает. Чем вызывать его из каких-то под-под-программ и убивать стек почем зря, за и задымлять весь процесс.

С другой стороны, если есть какое-то прерывание, которое нужно ну просто срочняк выполнить, может сделать исключение.

А с третьей стороны, обработчики прерываний должны быть сами по себе быстрыми и на крайняк просто устанавливать скажем, флаг "необходимо перепланировать" (тупо скоректируем системый таймер, или установим его флаг, ну это уже частности)
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Jan 29 2007, 07:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(greezol @ Jan 29 2007, 03:06) *
При окончательном выходе из всех прерываний или можно из них? Я не говорю о переключателе контекста, только о планировщике.


А чем занимается планировщик, как не переключением контекста?
Вопрос Вы задали как-то сумбурно.
Вам надо почитать книгу Лябрусса по uCOS - классика жанра.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Alex03
сообщение Jan 29 2007, 07:29
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(greezol @ Jan 29 2007, 03:06) *
...
А с третьей стороны, обработчики прерываний должны быть сами по себе быстрыми и на крайняк просто устанавливать скажем, флаг "необходимо перепланировать" (тупо скоректируем системый таймер, или установим его флаг, ну это уже частности)


ОСя ОСи рознь, подходы всякие.
Обработчики прерываний конечно должны быть быстрыми, считал данные в буфер, "оживил" ожидающую данные задачу (задачи), и вышел.
А "необходимо перепланировать" или не необходимо пусть планировщик и решает.
Go to the top of the page
 
+Quote Post
greezol
сообщение Jan 29 2007, 09:49
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 29-01-07
Пользователь №: 24 831



Цитата(Alex03 @ Jan 29 2007, 07:29) *
Цитата(greezol @ Jan 29 2007, 03:06) *

...
А с третьей стороны, обработчики прерываний должны быть сами по себе быстрыми и на крайняк просто устанавливать скажем, флаг "необходимо перепланировать" (тупо скоректируем системый таймер, или установим его флаг, ну это уже частности)


ОСя ОСи рознь, подходы всякие.
Обработчики прерываний конечно должны быть быстрыми, считал данные в буфер, "оживил" ожидающую данные задачу (задачи), и вышел.
А "необходимо перепланировать" или не необходимо пусть планировщик и решает.


Я имею ввиду - само переключение контекстов должно происходить уже все всех прерываний?
Go to the top of the page
 
+Quote Post
gladov
сообщение Jan 29 2007, 14:31
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(greezol @ Jan 29 2007, 09:49) *
Я имею ввиду - само переключение контекстов должно происходить уже все всех прерываний?


Конечно, т.к. на то оно и "прерывание", что прерывает основную работу, и его, по идее, имеет право приостановить лишь более высокоприоритетное прерывание, но никак не другая задача ОС. В любом случае, нужно взводить флажок о том, что требуется перепланирование, но оно должно происходить после обработки всех ожидающих прерываний.

А вообще, см. совет Andy Mozzhevilov - книга действительно стоящая!
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 30 2007, 11:51
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Планировщик это процедура решающая какая задача будет активной при выходе из прерывания.
В общем случае планировщик вызывается в каждом вложенном прерывании если оно использует сервисы RTOS, например, установку семафора.
Переключение контекста в прерывании это восстановление состояния регистров не той задачи которая была прервана, а другой которая стала активной в результате обработки прерывания. А вложенные прерывания прерывают не задачу, а другое прерывание.
В uCOS вложенные прерывания всегда возвращаются в процедуру обработки прерывания которую они прервали, т.е. переключения контекста не происходит.
Но есть RTOS где из прерываний вообще не происходит выхода при отсутствии активных задач. (в uCOS, кстати, всегда есть фоновая задача IDLE, тут выходить надо обязательно). В таких RTOS можно говорить, что контекст может быть переключен из любого уровня вложенности.

Цитата(greezol @ Jan 29 2007, 02:36) *
При окончательном выходе из всех прерываний или можно из них? Я не говорю о переключателе контекста, только о планировщике.

По идее вроде как первый вариант прозрачнее - если несколько прерываний "вложились", и задали несколько условий отличающихся приоритетом и т.п., то на выходе планировщик пусть все разгребает. Чем вызывать его из каких-то под-под-программ и убивать стек почем зря, за и задымлять весь процесс.

С другой стороны, если есть какое-то прерывание, которое нужно ну просто срочняк выполнить, может сделать исключение.

А с третьей стороны, обработчики прерываний должны быть сами по себе быстрыми и на крайняк просто устанавливать скажем, флаг "необходимо перепланировать" (тупо скоректируем системый таймер, или установим его флаг, ну это уже частности)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 19:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01428 секунд с 7
ELECTRONIX ©2004-2016