OSDev

для всех
Текущее время: 01 июл 2025, 06:54

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 179 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 18  След.
Автор Сообщение
СообщениеДобавлено: 01 фев 2012, 19:30 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Mr.McD. писал(а):
Кстати, вопрос к старожилам форума: кто и как использует программную многозадачность в своих осях?

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 19:48 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Нет. Имел ввиду именно невытесняющую кооперативную многозадачность на основе тех же сопрограмм или активных объектов. Я их упомянул выше.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 21:01 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
У меня есть приоритет system real time, который по сути реализует кооперативную многозадачность внутри ядра. Потоки с этим приоритетом могут быть вытеснены только системным потоком менеджера процессов, активируемым только в режиме ручного управления.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 21:06 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Чиж, если "невытесняемые" потоки сделать "вытесняемыми", то придётся их обеспечить механизмами синхронизации и выделить приличный кусок памяти под контекст потока. В случае с кооперативкой - это всё не нужно (всё и так синхронно, а контекст - пара байт). Я считаю, если можно обойтись без вытеснения, то нужно обходится без него.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 21:17 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
Хотя последнее и было адресовано не мне, хочу сказать, что придерживаюсь другого подхода: все, что можно сделать вытесняемым, нужно сделать вытесняемым.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 21:29 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Фантом, а в чём приоритет-то? Вытесняемыми потоки из невытесняемых не получится сделать прозрачно, скрыв всё "в ядре". Как минимум придётся явно в коде потоков объявлять функции захвата мутексов или отправки синрхонизирующих сообщений. А если вытеснение необязательно, то всё можно скрыть в языке. Например, реализавав всё в виде сопрограмм...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 21:48 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 976
Откуда: Дагоба
К сожалению, тот недостаток, что зависает вся система при зависании одного потока, ставит крест на широком применении модели невытесняющей многозадачности.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 21:56 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Yoda,
Цитата:
К сожалению, тот недостаток, что зависает вся система при зависании одного потока, ставит крест на широком применении модели невытесняющей многозадачности.
Используем сторожевой таймер и нет проблемы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 22:04 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Павиа, верно. Сторожевой таймер, связанный с диспетчером таких лёгких потоков. А ещё лучше возложить все моменты стабильности на язык программирования, я считаю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 фев 2012, 22:33 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Mr.McD. писал(а):
Я считаю, если можно обойтись без вытеснения, то нужно обходится без него.

Для однопроцессорных систем это естественно.

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

Способ не плох и не хорош, просто позволяет экономить несколько байт на контекст задачи и несколько тактов на переключение. Это актуально только в каких-то невероятно жёстких условиях, что весьма специфично. Для PC не потребно.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 179 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 18  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB