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/ |