Re: инициализация на паметта чрез DDR контролер
Бъс арбитрирането не е дребна работа, хубаво го премисли. Не знам какво наричаш "асъртване", предполагам, че е нещо
като bus error или machine check exception (все същото в различни архитектури).
Ако е така това предполага такова нещо да се обработи. Ако прекъснеш цикъл на ядро как да е, там обикновено
има как да се справи системата, примерно цикълът се опитва наново (rerun) докато успее. Ако е DMA самото ДМА няма да
има тоя акъл и ще трябва някое от ядрата да види, че са му прекъснали трансфера и да се погрижи да го подкара
наново. И това за всички ДМА-та в системата, а те могат да бъдат много различни, някои може просто да за загубили
информацията за това къде баш е прекъснат трансферът, колко от бърстовете са накюйчени (queued
и къде и въобще настава една тотална боза.
Дори да успееш да подкараш цялото това нещо - което предполага да познаваш поведението на всички бъс мастъри
в системата - дали ще спечелиш или ще загубиш цикли не ми се вижда особено предсказуемо.
Може би ако просто направиш твой си ДМА контролер който да бъде арбитриран от системния арбитър като
всички останали и да можеш да го пуснеш да бълва нещо към парче от RAM-а е най-реалистичното, което
виждам. Кога това парче е достъпно за операционната система и подобни вече си е работа на самата ОС,
стига ти да и дадеш статусни битове и да оставиш на нея да пуска бърсалката ти (примерно ако исках да ползвам
такова нещо в dps-а бих го пускал когато деалокирам даден клъстер (4к), но когато алокирам
физически клъстер (PTE-то е празно, първи достъп до този логически клъстер довел до page fault) ще трябва да проверявам
дали за тоя клъстер (MMU page в случая за който говоря е = клъстер) не е в процес на бърсане от ДМА-то).