Как протестировать всю оперативную память

Тема в разделе "WASM.ELECTRONICS", создана пользователем AceOfTrump, 6 апр 2006.

  1. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Pavia

    В той статье от дарк мастера есть все, что тебе нужно

    Я попробывал, но у меня ничего не получилось, помоги пожалуйста. Вот как тестирую:
    Код (Text):
    1.     mov ecx,1048576
    2.  
    3. @@count:
    4.     mov     al,0h
    5.     mov     dl,byte ptr fs:[ecx]
    6.     mov     byte ptr fs:[ecx],al
    7.     mov     al,byte ptr fs:[ecx]
    8.     mov     byte ptr fs:[ecx],dl
    9.     cmp     al,0h
    10.     jnz     @@errormem
    11.     mov     al,0ffh
    12.     mov     dl,byte ptr fs:[ecx]
    13.     mov     byte ptr fs:[ecx],al
    14.     mov     al,byte ptr fs:[ecx]
    15.     mov     byte ptr fs:[ecx],dl
    16.     cmp al,0ffh
    17.     jnz @@errormem
    18.     inc ecx
    19.     cmp ecx,Volume_memory  ;Volume_memory= максим.
    20.                                ;объем памяти в байтах
    21.     jae @@mem_tested
    22.     jmp     @@count
    23.  
    24. @@errormem:        ;Ошибка в памяти
    25. @@mem_tested:     ;Тест пройден успешно
    26.  




    Всегда пишет что тест пройден успешно, хотя я также тестирую планку со сбойными ячейками.
     
  2. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Quantum

    ava

    Pavia



    Не подскажете как при тесте кешь обойти.
     
  3. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    "Не подскажете как при тесте кешь обойти"



    Устанавливаешь бит 30 (CD) регистра CR0 (это запрещает заполнение кэша), выполняешь WBINVD (80486 и выше). Затем тестируешь память. По окончании теста сбрасываешь бит 30 CR0:


    Код (Text):
    1.     mov eax,cr0
    2.     or  eax,40000000h
    3.     mov cr0,eax
    4.     wbinvd
    5.  
    6.     ... ; тестируем память
    7.  
    8.     mov eax,cr0
    9.     and eax,0BFFFFFFFh
    10.     mov cr0,eax




    По-моему, так...
     
  4. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Даа... Все равно ничего не получается... хотя уже по логике должно... Помогите.
     
  5. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Вот код, взятый с wasm.ru статья http://www.wasm.ru/article.php?article=hardzen

    с некоторыми моими вставками.... Но он все равно не работает, пишет что тест всегда пройден успешно (хотя планку памяти ставлю со 100% битыми ячейками...)
    Код (Text):
    1.  
    2. DESCRIPTOR STRUC
    3. limit dw 0
    4. base_1 dw 0
    5. base_2 db 0
    6. attr db 0
    7. lim_atr db 0
    8. base_3 db 0
    9. ENDS
    10.  
    11. GDT segment use16
    12. empty dq 0
    13. _code descriptor <0,0,0,0,0,0>
    14. _temp descriptor <0,0,0,0,0,0>
    15. GDT ends
    16.  
    17. a_data segment para
    18. gdtr df 0 ;Поле для регистра GDTR
    19. a_data ends
    20.  
    21. a_stack segment stack
    22. dw 100
    23. a_stack ends
    24.  
    25. a_code segment public
    26. assume ds:a_data, es:a_data, ss:a_stack, cs:a_code
    27.  
    28. .586P
    29. assume ds:gdt
    30.  
    31. mov ax,gdt
    32. mov ds,ax
    33.  
    34. mov _code.limit,65535
    35. mov eax,a_code
    36. shl eax,4
    37. mov _code.base_1,ax
    38. shr eax,8
    39. mov _code.base_2,0ah
    40. mov _code.attr,09Ah
    41.  
    42. mov _temp.limit,65535
    43. mov _temp.attr,092h
    44. mov _temp.lim_atr,08Fh
    45.  
    46. assume ds:a_data
    47. mov ax,a_data
    48. mov ds,ax
    49.  
    50. mov eax,gdt
    51. shl eax,4
    52. mov dword ptr [gdtr+2],eax
    53. mov word ptr gdtr,23
    54.  
    55. cli
    56. mov al,80h
    57. mov dx,70h
    58. out dx,al
    59.  
    60. lgdt gdtr
    61.  
    62. mov eax,cr0
    63. inc al
    64. mov cr0,eax
    65.  
    66. db 0EAh
    67. dw offset @@protect
    68. dw 08h
    69.  
    70. @@protect:
    71.  
    72. mov ax,10h
    73. mov fs,ax
    74.  
    75. mov eax,cr0
    76. dec al
    77. mov cr0,eax
    78.  
    79. db 0EAh
    80. dw offset @@real
    81. dw a_code
    82.  
    83. @@real:
    84.  
    85. mov dx,92h
    86. in al,dx
    87. or al,2
    88. out dx,al
    89.  
    90. mov eax,cr0 ;Запрет работы кеша
    91. or eax,40000000h ;
    92. mov cr0,eax ;
    93. wbinvd ;
    94.  
    95. mov ecx,1048576
    96.  
    97. @@count:
    98. mov al,0h
    99. mov dl,byte ptr fs:[ecx]
    100. mov byte ptr fs:[ecx],al
    101. mov al,byte ptr fs:[ecx]
    102. mov byte ptr fs:[ecx],dl
    103. cmp al,0h
    104. jnz @@errormem
    105. mov al,0ffh
    106. mov dl,byte ptr fs:[ecx]
    107. mov byte ptr fs:[ecx],al
    108. mov al,byte ptr fs:[ecx]
    109. mov byte ptr fs:[ecx],dl
    110. cmp al,0ffh
    111. jnz @@errormem
    112. inc ecx
    113. cmp ecx,volume_memory ;Volume_memory= максим.
    114. ;объем памяти в байтах
    115. jge @@test
    116. jmp @@count
    117. @@test:
    118. message mes_mem_tested ;Сообщение - память в порядке
    119. jmp @@Close_vent
    120. @@errormem:
    121. message mes_mem_error ;Сообщение - сбойная ячейка памяти
    122. @@Close_vent:
    123. mov eax,cr0 ;Разрешение кеширования
    124. and eax,0bFFFFFFFh
    125. mov cr0,eax
    126.  
    127. mov al,0
    128. mov dx,70h
    129. out dx,al
    130. sti
    131.  
    132. mov dx,92h
    133. in al,dx
    134. and al,0FDh
    135. out dx,al
    136.  
    137. mov ax,4c00h
    138. int 21h
    139. a_code ends
    140. end begin
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    AceOfTrump

    Статью прочти в нимательней

    там подсчет идет по мегабайтам.

    mov ecx,1048576

    тебе нужно по байтам.
     
  7. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Pavia

    Статью прочти в нимательней

    там подсчет идет по мегабайтам.

    mov ecx,1048576

    тебе нужно по байтам.


    Ты что, там как раз по байтам идет подсчет, а mov ecx,1048576 это начало теста начинается с 1 Мегабайта и т. д.
     
  8. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Народ, подскажите, сколько примерно минут после записи в память нужно подождать перед чтением, чтобы выявить сбойные ячейки (1,2,3 или минут 10)?
     
  9. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Pavia

    ava

    Quantum

    Короче, наконец то начали выявляться ошибки, но только после 4-5 минутной задержки после записи, т.е. получается около 10 минут задержки (для проверки 1 -> 4-5 минут и 0 -> 4-5 минут).

    Что то слишком долго, можно ли каким-либо образом уменьшить время теста?
     
  10. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    AceOfTrump

    Я уже писал одним циклом пишем другим читаем. Так для различных данных. Это позволит избежать всяких буферов и кешей. Также не искючаю, что там есть каректирующий код, который востанавливает значение. Это тоже поможит его заглушить.



    И еще в добавок. Память "мрет" через примерно 8 секунд без подачи питания.
     
  11. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Quantum

    Pavia

    ava

    Возникла такая проблема, я сначала записываю всю память, а потом считываю, т.е. не сохраняю данные, которые были до моей записи (затираю), так как не куда сохранить. Затем после исполнения программы под Дос стал виснуть комп. Как это исправить?
     
  12. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Я понял, это было из-за того что я во время теста вызывал прерывания при CLI. Я все убрал, теперь после исполнения проги появляется как обычно в Дос A:\>

    и ждет ввода команды, но все что я печатаю не отображается на экране, хотя курсор перемещается и все команды, которые я ввожу вслепую, исполняются, но также ничего не отображается! В чем дело?
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    AceOfTrump



    В нормальных условиях память работает довольно динамично, т.е. данные не висят в ней по несколько минут, если к ним никто не обращается. В многозадачной среде это особенно ощутимо. Поэтому, IMHO, даже одна минута - это много.
     
  14. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Осмелюсь предположить, что затирается память, в которой сидят резиденты. Тестить нужно либо до старта доса, либо частично сохранять данные на диск, либо двигать куски памяти (как при дефрагментации), чтоб диск не использовать. Ничего дельного больше на ум не приходит.
     
  15. AceOfTrump

    AceOfTrump New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2006
    Сообщения:
    23
    Всем ОГРОМНОЕ спасибо!!!