|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 7:18 pm
Inline functions w/o substitution
| Автор |
Съобщение |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Inline functions w/o substitution
Позамислих се още за логиката на глобалния монитор... май има значение кой кур ще печели екслусива и кога. Потенциалните проблеми са: 1) Ако е фикснат победителя и той започне изключителен достъп, всички други духат супата. Но победителя може да започне достъпа от някоя нископриоритетна нишка, тя да бъде прекъсната и целият достъп яко да се да проточи, което би оставило другите курове на сухо... 2) Ако не е фикснат победителя пък, да кажем последния опитал. То може един да започне (убивайки текущия) и тъй като между четенето и записа може да са му нужни няколко други инструкции, другата страна да повтори опита и да прекъсне нашия човек. Съответно ние повтаряме и прекъсваме друг и така да се зацикли без никой да не успее да завърши...
Затова логиката може би трябва да е малко по-различна. Мисля си, че който поиска първи да си вдига бита. Ако поискат едновременно, само един разбира се. След това на печелившия трябва да му се даде шанс да завърши, без да го прекъсват. Но заради първия проблем по-горе пък и не може да го чакаме безкрайно. Въпросът е колко точно да го чакаме. Фиксиран таймоут е малко рисковано, защото наистина не знаем колко инструкции са нужни. Но това което знаем е, че ако два кура се бият за едно и също нещо, то най-вероятно и на двата им трябват еднакъв брой инструкции. Така че може да се направи логика при която първия печели при първи конфликт. Ако се стигне до втори конфликт, това означава че победения е завъртял целия цикъл, а победителя не е. Или въртят различни цикли или победителя дреме. И в двата случая може да дръпнем бита на победителя и да го дадем на по-упорития. Пак съществува някакъв минимален риск текущия победител да задреме след като вземе титлата, след време друг да я вземе и той да задреме и така до безкрай... Евентуално може да се помисли върху усложняване на смяната. Т.е. при първи конфликт не си разменят ролите. При втори конфликт си разменят ролите, но за следваща размяна да се изискват два нови кофликта. При четвърти пореден конфликт отново си разменят ролите, но следващата размята да е чак след още 4 нови конфликта. Демек размяната да става все по-трудна и накрая евентуално невъзможна.
|
| Съб Дек 03, 2016 2:58 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Inline functions w/o substitution
Не ти трябва да разбутваш нищо - говоря за чисто софтуерна емулация. Нещо като двустепенен или двуфазен мутекс. Т.е. мутекса в тези регистри ще синхронизира кода който прави мутекс във външните регистри - така ако друго ядро се опита да прави нещо ще бъде блокирано докато първото не си свърши работа. Разбира се това ще трябва само в случаи когато не можеш да събереш мутексите във тези специални регистри. Така ще имаш ограничен брой бързи и гарантирано синхронизирани мутекси и неограничен брой по бавни които костват един мутекс от бързите.
_________________ Мразя да мразя ...
|
| Нед Дек 04, 2016 2:05 am |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Inline functions w/o substitution
А да си се замислял за хардуерно детектване и отработка на deadlock?
_________________ Мразя да мразя ...
|
| Нед Дек 04, 2016 12:26 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|