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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> вытясняющая многозадачность, чистый С без ОС
Zelepuk
сообщение Nov 29 2011, 08:56
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Хочется найти хорошо расписанный пример написания программы с вытясняющим планировщиком без применения какой-либо ОС на чистом С. Нашёл отличное описание кооперативного планировщика, но хочется разобраться с вытясняющим.
Подскажите, кто знает.
Go to the top of the page
 
+Quote Post
dxp
сообщение Nov 29 2011, 12:48
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Zelepuk @ Nov 29 2011, 15:56) *
Хочется найти хорошо расписанный пример написания программы с вытясняющим планировщиком без применения какой-либо ОС на чистом С. Нашёл отличное описание кооперативного планировщика, но хочется разобраться с вытясняющим.
Подскажите, кто знает.

А чем, по-вашему, принципиально отличается вытесняющий планировщик от ОС? Точнее, в каком окружении он живёт, и как можно назвать совокупность этого окружения и планировщика?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 29 2011, 13:10
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(dxp @ Nov 29 2011, 16:48) *
А чем, по-вашему, принципиально отличается вытесняющий планировщик от ОС? Точнее, в каком окружении он живёт, и как можно назвать совокупность этого окружения и планировщика?

для меня к примеру тем что наверняка существуют программы (standalone) которые работают по такому принципу*(http://chipenable.ru/index.php/programming-c/110-scheduler.html), и есть ОСи, предоставляющие сервисы и имеющие интерфейсы для приложений.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 29 2011, 13:47
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Автомат на прерываниях с разрешением вложенности.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 29 2011, 13:55
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(MrYuran @ Nov 29 2011, 17:47) *
Автомат на прерываниях с разрешением вложенности.

спасибо, можно немного подробнее?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 29 2011, 14:22
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Zelepuk @ Nov 29 2011, 14:56) *
Хочется найти хорошо расписанный пример написания программы с вытясняющим планировщиком без применения какой-либо ОС на чистом С.

Если без какой-либо ОС, то это будет банальная каруселька. (Статья в англицкой википедии). То есть несколько потоков (задач) будут работать по очереди.
Да и то, для общения задач между собой потребуются некие функции, которые уже можно будет назвать зачатками ОСи. Добавьте ещё механизмы синхронизации, и у вас уже нормальная ОС. Так что, ИМХО, вытесняющий планировщик без ОС - это сферический конь в вакууме.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 29 2011, 15:26
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



У меня работает сферический конь в вакууме.

Все, что нужно сделать - это переключатель контекста. А уж вмешиваться в переключение по очереди, или не вмешиваться - дело десятое.
Будете вмешиваться - назовете это планировщиком. А не будете - тоже планировщиком, но у которого в планах - без очереди никого не пускать.

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

Но полностью на си написать такое - врядли.
Сам переключатель задач - на ассемблере - строк 50, думаю.
А вот планировщик - наверное все 100 (Это вместе с утилитами, типа добавить процесс, убить процесс и прочая).



--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 29 2011, 17:40
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



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

Возьмём пример:
система должна принимать данные от АЦП, обробатывать их блоками, передавать по UART (по 3-м сразу и независимо), весли лог работы на SD-карту, работать с часами реального времени....
вобщем пример класический)

Всё работает на "суперлупе" по прерываниям и циклическим опросам флагов.
Когда (и какая) может возникнуть ситуация, что нужно будет задуматься о применении вытесняющией многозадачности (без ОС и пусть такая программа сама по себе нечто вроде ОС)?
Можно подумать, что если всё работает и так, то я себе выдумываю проблемы, но эти вопросы мне не дают покоя)

Сообщение отредактировал Zelepuk - Nov 29 2011, 17:58
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 29 2011, 17:55
Сообщение #9


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(DpInRock @ Nov 29 2011, 21:26) *
У меня работает сферический конь в вакууме.
...
У меня работает вот такой планировщик, который строго следит за очередностью А процессы стараются работаь по кооперативному принципу - если делать нечего - отдают остаток кванта следующей задаче.
...
А вот планировщик - наверное все 100 (Это вместе с утилитами, типа добавить процесс, убить процесс и прочая).

Дык, уже не в вакууме, "с утилитами" sm.gif Да и процессы работают не просто так, а "отдают остаток кванта следующей задаче". Если ещё копнуть, то наверняка и средства межпроцессного взаимодействия обнаружатся.

Цитата(Zelepuk @ Nov 29 2011, 23:40) *
А вообще, когда становится понятно, что нужно городить огород из планировщиков, семафоров, мьютеков...(вот сколько красивых слов по теме нашёл)?

Это проще попробовать. Желательно не на навороченном проекте, а на небольшом, несложном. Если понравится (почти наверняка), то потом будете применять ОС вне зависимости от задачиsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 29 2011, 17:59
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(AHTOXA @ Nov 29 2011, 21:55) *
Дык, уже не в вакууме, "с утилитами" sm.gif Да и процессы работают не просто так, а "отдают остаток кванта следующей задаче". Если ещё копнуть, то наверняка и средства межпроцессного взаимодействия обнаружатся.


Это проще попробовать. Желательно не на навороченном проекте, а на небольшом, несложном. Если понравится (почти наверняка), то потом будете применять ОС вне зависимости от задачиsm.gif


а если я вижу программу для ОС, и там тоже переключение потоков организовано, получается ОС в ОС?)
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 29 2011, 18:18
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Zelepuk @ Nov 29 2011, 21:59) *
а если я вижу программу для ОС, и там тоже переключение потоков организовано, получается ОС в ОС?)

возможно, это неправильное применение ОС? Хотя, я имею ввиду именно простейшие, не Lin
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Nov 29 2011, 18:34
Сообщение #12


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Вообще-то в большинстве случае проц в единственном числе, и все заморочки (надстройки над изначальным переключателем) являются бессмысленными ( с точки зрения траты ресурсов).

А по поводу отдать квант времени - это всего лишь одна ассемблерная команда SWI. Т.е. переключает контекст вместо (и наравне) с таймером. А уж если таймер вмешивается после SWI, то он просто не переключает на новую задачу. Ибо знает, что за мгновенье до этого это сделано другим способом.

Сам планировщик, который работает в прерывании (Сишный) занимает примерно 4-5 операторов Си.

Единственное, что я добавил, это счетчик пропусков переключений контекста. Т.е. любая задача записав в переменную число - получит именно столько лишних квантов. Т.е. даже не вызов функции, а простая запись в переменную. Это бывает надо, когда к примеру распаковываешь 12 мегабайтный джпег, и хочется побыстрее...

http://martin.hinner.info/ARM-Microcontrol...er-HOWTO-7.html

Вот я с этой статьи начинал. Чутка добавил, чутка убавил.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 29 2011, 18:43
Сообщение #13


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Zelepuk @ Nov 29 2011, 23:59) *
а если я вижу программу для ОС, и там тоже переключение потоков организовано, получается ОС в ОС?)

Переключение потоков-то организовано не само по себе, а средствами ОС, так же? Тогда это нормально, просто программа пользуется предоставленными средствами.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Nov 29 2011, 20:15
Сообщение #14


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Посмотрите AVR учебный курс на http://easyelectronics.ru/
Кажется какой-то простенький планировщик там был(видел краем глаза, деталей не помню).


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 29 2011, 20:23
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (DpInRock @ Nov 29 2011, 18:26) *
У меня работает сферический конь в вакууме.
....
У меня работает вот такой планировщик, который строго следит за очередностью А процессы стараются работаь по кооперативному принципу - если делать нечего - отдают остаток кванта следующей задаче.
И где тут вытесняющая многозадачность?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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