OSDev
http://osdev.su/

Многозадачность, многопроцессорность
http://osdev.su/viewtopic.php?f=26&t=645
Страница 1 из 1

Автор:  Станислав [ 31 окт 2012, 10:16 ]
Заголовок сообщения:  Многозадачность, многопроцессорность

При инициализации своих объектов задачи ставлю их в кольцо задач, и процессор BSP вместо простого зацикливания ставлю на постоянное хождение по кольцу задач и проверку бита на активацию по этому биту.
Основная активация конечно по прерываниям, но эта активация тоже очень пригодиться.
У объекта задача есть страница для каталога страниц и страница для стека процессора, плюс данные о уровне защиты и много чего ещё.
Вообще ядро буду делать как модуль для работы с объектами, т.к. главное в моей системе это стабильная работа задач, и настройка объектов (устройств, модулей, протоколов, форматов, ...).
Часть кода для настройки процессоров выглядит так:
Код:
            ;Синхронизация
@@:   bt    dword[SEMAPHORE],0
   jnc   @b            ;ожидание сброса бита занятости
   lock btr dword[SEMAPHORE],0      ;установка бита занятость для изменения общих регистров
   jnc   @b
      inc byte[sys_080]
      mov esp,0
   lock bts dword[SEMAPHORE],0      ;снятие бита занятости

   mov ecx,1Bh         ;включим APIC
   rdmsr
   bts eax,11
   wrmsr 
   mov eax,[0FEE00000h+20h]
   shr eax,24         ;номер lapic   
       
movzx edx,byte[sys_080] ;номер cpu
dec edx
mov ebp,cpusss+4096
shl edx,8
add ebp,edx
movzx edx,byte[sys_080] ;номер cpu

здесь объекты забиваю для процессора   
 
   mov ecx, 1Bh
   rdmsr
   bt eax, 8       ;Если процессор не BSP (bootstrap processor) то АР (application processor) и мы выходим.
   jc @f
sti
.0:
   hlt
jmp .0
@@:     
mov esp,cpusss+4096

call init_cpu   ;сообщение процессорам для пробуждения   
                      здесь код
jmp         в кольцо задач


Процессор BSP уходит на кольцо задач, а процессоры АР в hlt и ждут задания, причём они не имеют своего стека, а получают стек от задачи.
Для себя поставил цель сделать так, чтобы процессоры AP решали все проблемы задачи, и при активации задачи ей даётся свободный процессор или сам BSP идёт её выполнять.
Ещё будет работа нескольких процессоров над одной задачей (без стека)
Как известно процессоры быстрее не станут, а их количество будет расти.
Подробности писать не буду, если есть что добавить к алгоритму пишите, буду рад.

Автор:  Станислав [ 31 окт 2012, 10:29 ]
Заголовок сообщения:  Re: Многозадачность, многопроцессорность

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

Автор:  Станислав [ 02 ноя 2012, 05:58 ]
Заголовок сообщения:  Re: Многозадачность, многопроцессорность

Кстати придумал модель параллельной работы объектов.
Предположим есть первый процессор и остальные, первый не главный, т.к. всё может выполняться любым процессором. Объекты могут быть параллельные и нет, у параллельных есть свой стек, например ebp указывает на адрес объекта(его начало), а esp на конец объекта и там небольшой объём для стека и функции работающие с этим объектом используют этот стек.
У объекта есть управляющие биты, активен, не активен(запущен, или в ожидании и в этих случаях стек занят и сохранён его указатель), установка этих битов естественно синхронизирована для процессоров.
Объекты имеют свою задачу с адресным пространством в котором они работают, а у задачи стек для не параллельных объектов.
Смысл понятен, подробности писать не буду.

Модель очень параллельна и выигрыш во всех смыслах, но только я не могу понять почему её не используют, неужели всё так печально в параллельности систем?

Автор:  pavia [ 29 ноя 2012, 13:47 ]
Заголовок сообщения:  Re: Многозадачность, многопроцессорность

Цитата:
Модель очень параллельна и выигрыш во всех смыслах, но только я не могу понять почему её не используют, неужели всё так печально в параллельности систем?

Я был поражён как в ДОС всё летает на 2МГц(Мегагерцы - это не опечатка). А это однапроцесная ОС.

Автор:  achesnokov [ 30 ноя 2012, 14:52 ]
Заголовок сообщения:  Re: Многозадачность, многопроцессорность

Цитата:
Кстати придумал модель параллельной работы объектов.
Предположим есть первый процессор и остальные, первый не главный, т.к. всё может выполняться любым процессором. Объекты могут быть параллельные и нет, у параллельных есть свой стек, например ebp указывает на адрес объекта(его начало), а esp на конец объекта и там небольшой объём для стека и функции работающие с этим объектом используют этот стек.


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

Автор:  iz56 [ 01 дек 2012, 10:54 ]
Заголовок сообщения:  Re: Многозадачность, многопроцессорность

pavia писал(а):
Я был поражён как в ДОС всё летает на 2МГц(Мегагерцы - это не опечатка). А это однапроцесная ОС.

Есть некоторый недавний опыт работы под дос на 75МГц. Всё не так радостно когда графические какие-нибудь дела.
Даже в двухцветных видеорежимах вывод буковок (особенно через BIOS) - "ползает".

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/