User Tag List

Показано с 1 по 10 из 30

Тема: Вытесняющая многозадачность (диспетчер mzkernel)

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #13

    Регистрация
    14.03.2005
    Адрес
    Russia, Saint-Petersburg
    Сообщений
    213
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Простой пример: что будет, если задача не вызовет ни одну функцию ядра, вызывающую "вытеснение"? Тогда - либо прерывание (таймер) и вытеснение есть, либо вытеснения нет, и имеем чистую кооперативную модель.

    Конечно, сделать вытесняющую многозадачность можно и с вытеснением раз в 1/50 секунды, но смысла в этом большого реально нет. Основное применение шедулера на ZX, как мне видится, это возможность в фоне считать "длинные" и вспомогательные задачи, параллельно исполняя основные, которые отрисовывают результат.

    Мои потоки переключаются только тогда, когда происходят события, требующие переключения потоков.
    Я взял немножко другую модель - каждый поток может либо сам отдать время исполнения, т.е. чистая кооперативность, либо быть вытесненным по таймеру, если оное для потока разрешено. Никто, опять же, не мешает запихать принудительную кооперативность в некие системные вызовы ядра - и получим примерно то, что сделано в твоём планировщике - задача в принципе не узнает, что её время было отдано. Но это несколько плохо для синхронизации.

    Почему настоятельно советую попробовать взять мой планировщик - собственно по двум причинам: а) он сильно оптимизирован; б) он умеет то, что жизненно необходимо ZX - хотя бы приблизительную синхронизацию с экраном. При условии, конечно, что задачи сообщают адекватное время выполнения в кооперативной модели. Как это работает - можно посмотреть в примерах. Он под GPLv2, поэтому можно смело выкладывать в GIT, если будут идеи - я присоединюсь к доработке, времени 100% мейнтейнить, к сожалению, нет. Да, код самого планировщика получился к сожалению достаточно сложным, оптимизация требует жертв. Там очень много комментариев, которые помогут разобраться.
    Последний раз редактировалось Alex/AT; 15.07.2014 в 21:49.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Диспетчер памяти в KAY-1024...
    от SoftFelix в разделе KAY
    Ответов: 16
    Последнее: 30.08.2010, 12:07
  2. диспетчер ROM памяти
    от p@lex в разделе Память
    Ответов: 5
    Последнее: 29.03.2010, 22:58
  3. Многозадачность
    от captain cobalt в разделе Оси
    Ответов: 23
    Последнее: 23.04.2005, 19:04

Ваши права

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