Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

memory

338
26 ноября 2003 года
chigevara
529 / / 29.09.2003
А расскажите мне, товарищи OS-deveлоперы, как вы определяете размер имеющейся физической памяти без BIOSа. И кто какие способы тестирования знает. Очень интересно, и реально очень надо.
1.8K
26 ноября 2003 года
gwg605
76 / / 06.03.2003
Цитата:
Originally posted by chigevara
А расскажите мне, товарищи OS-deveлоперы, как вы определяете размер имеющейся физической памяти без BIOSа. И кто какие способы тестирования знает. Очень интересно, и реально очень надо.


Очень просто:

inline bool isRam( unsigned __int32* pPointer ) {
unsigned __int32 v ;
v = *pPointer ;
*pPointer = 0x55555555 ;
bool bRam = *pPointer == 0x55555555 ;
*pPointer = 0xAAAAAAAA ;
bRam &= *pPointer == 0xAAAAAAAA ;
*pPointer = v ;
return( bRam ) ;
}

unsigned __int32* check_mem( /*in,out*/ unsigned __int32** pStart ) {
unsigned __int32* pCurrent = *pStart ;
while( !isRam( pcurrent ) ) pCurrent += 1000 ; // one page 4096
*pStart = pCurrent ;
while( isRam( pCurrent ) ) pCurrent += 1000 ; // one page 4096
return( pCurrent ) ;
}

На вход подаем check_mem подаем стартовый адрес (0 для начала), по выходе возвращается указатель на первый байт последней страницы в блоке памяти, а в pStart записывается адрес первой страницы найденного блока. Блоков может быть несколько.

Сорри, прогу писал "по памяти" и может сразу и не пойти, также нет проверки на окончание поиска.

Удачи,
Валерий.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог