OSDev

для всех
Текущее время: 22 окт 2017, 03:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: 09 янв 2016, 22:26 

Зарегистрирован: 08 янв 2016, 15:11
Сообщения: 5
pavia писал(а):
надо включить для видепамяти режим кэша Write Combining (WC)

А можно ссылку на пример реализации?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09 янв 2016, 23:07 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
К примеру можно из колибриОС взять.
http://websvn.kolibrios.org/filedetails ... 0&peg=5360
http://websvn.kolibrios.org/revision.ph ... 1&rev=5360


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 янв 2016, 22:10 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 80
Для таких вещей надо делать shadow буфер...
Т.е. копировать всё выводимое и на экран и туда, где должна получаться точная копия экрана. И при скроллировании или любом чтении с экрана использовать эту копию.

Поскольку копия в обычной памяти и на ней WB тип кэша - то работает она на порядок быстрее.

Что не отменяет, конечно, необходимости ставить Write Combine на видео - это ускоряет запись туда, тоже на порядки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 мар 2016, 23:46 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
Регистры MTRR можно не мучить, достаточно настройки MSR PAT
Код:
#define MSR_IA32_CR_PAT 0x277
#define asm_rdmsr(ecx, eax, edx)  asm volatile("rdmsr" : "=a" (eax), "=d" (edx) : "c" (ecx))
#define asm_wrmsr(ecx, eax, edx)  asm volatile("wrmsr" : : "c" (ecx), "a" (eax), "d" (edx))

   //Установить тип кэширования "write-combining" для ускорения видеопамяти.
   //Для этого устанавливаем регистр MSR PAT, элемент 1 (биты 8,9,10) значение 1
   //При использовании видеопамяти, виртуальная страница должна иметь атрибуты PAT=0, PCD=0, PWT=1.
   unsigned int eax, ecx, edx;
   if(CPUFeatures & 0x10000) //Проверка поддержки PAT в процессоре
   {
      ecx = MSR_IA32_CR_PAT;
      asm_rdmsr(ecx, eax, edx);
      ((UCHAR*)&eax)[1] = 1; //"write-combining"
      asm_wrmsr(ecx, eax, edx);
   }

Если в Си не спец, то ((UCHAR*)&eax)[1] буквально означает регистр AH.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB