|
|
  |
вытясняющая многозадачность, чистый С без ОС |
|
|
|
Nov 29 2011, 14:22
|

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

|
Цитата(Zelepuk @ Nov 29 2011, 14:56)  Хочется найти хорошо расписанный пример написания программы с вытясняющим планировщиком без применения какой-либо ОС на чистом С. Если без какой-либо ОС, то это будет банальная каруселька. ( Статья в англицкой википедии). То есть несколько потоков (задач) будут работать по очереди. Да и то, для общения задач между собой потребуются некие функции, которые уже можно будет назвать зачатками ОСи. Добавьте ещё механизмы синхронизации, и у вас уже нормальная ОС. Так что, ИМХО, вытесняющий планировщик без ОС - это сферический конь в вакууме.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Nov 29 2011, 17:40
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
А вообще, когда становится понятно, что нужно городить огород из планировщиков, семафоров, мьютекcов...(вот сколько красивых слов по теме нашёл)?
Возьмём пример: система должна принимать данные от АЦП, обробатывать их блоками, передавать по UART (по 3-м сразу и независимо), весли лог работы на SD-карту, работать с часами реального времени.... вобщем пример класический)
Всё работает на "суперлупе" по прерываниям и циклическим опросам флагов. Когда (и какая) может возникнуть ситуация, что нужно будет задуматься о применении вытесняющией многозадачности (без ОС и пусть такая программа сама по себе нечто вроде ОС)? Можно подумать, что если всё работает и так, то я себе выдумываю проблемы, но эти вопросы мне не дают покоя)
Сообщение отредактировал Zelepuk - Nov 29 2011, 17:58
|
|
|
|
|
Nov 29 2011, 17:55
|

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

|
Цитата(DpInRock @ Nov 29 2011, 21:26)  У меня работает сферический конь в вакууме. ... У меня работает вот такой планировщик, который строго следит за очередностью А процессы стараются работаь по кооперативному принципу - если делать нечего - отдают остаток кванта следующей задаче. ... А вот планировщик - наверное все 100 (Это вместе с утилитами, типа добавить процесс, убить процесс и прочая). Дык, уже не в вакууме, "с утилитами"  Да и процессы работают не просто так, а "отдают остаток кванта следующей задаче". Если ещё копнуть, то наверняка и средства межпроцессного взаимодействия обнаружатся. Цитата(Zelepuk @ Nov 29 2011, 23:40)  А вообще, когда становится понятно, что нужно городить огород из планировщиков, семафоров, мьютеков...(вот сколько красивых слов по теме нашёл)? Это проще попробовать. Желательно не на навороченном проекте, а на небольшом, несложном. Если понравится (почти наверняка), то потом будете применять ОС вне зависимости от задачи
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Nov 29 2011, 17:59
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(AHTOXA @ Nov 29 2011, 21:55)  Дык, уже не в вакууме, "с утилитами"  Да и процессы работают не просто так, а "отдают остаток кванта следующей задаче". Если ещё копнуть, то наверняка и средства межпроцессного взаимодействия обнаружатся. Это проще попробовать. Желательно не на навороченном проекте, а на небольшом, несложном. Если понравится (почти наверняка), то потом будете применять ОС вне зависимости от задачи  а если я вижу программу для ОС, и там тоже переключение потоков организовано, получается ОС в ОС?)
|
|
|
|
|
Nov 29 2011, 18:34
|

Гуру
     
Группа: Участник
Сообщений: 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)
|
|
|
|
|
Nov 29 2011, 20:23
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|