Как в процессе узнать физический адрес по виртуальному?
От: jek_  
Дата: 18.10.07 04:36
Оценка:
Собственно, сабж.

Есть некий виртуальный адрес в конкретный момент исполнения приложения. Хочется узнать, на какой физический адрес он отображается в этот момент.

Есть ли способ узнать это? Если да, то как?
Re: Как в процессе узнать физический адрес по виртуальному?
От: Pavel Dvorkin Россия  
Дата: 18.10.07 06:47
Оценка:
Здравствуйте, jek_, Вы писали:

_>Собственно, сабж.


_>Есть некий виртуальный адрес в конкретный момент исполнения приложения. Хочется узнать, на какой физический адрес он отображается в этот момент.


_>Есть ли способ узнать это? Если да, то как?


В третьем кольце никак. Более того, если бы ты и мог узнать это, то пока узнавал бы — этот адрес мог бы поменяться (отправили страницу в своп и вернули в ОП, но в другое место).

В нулевом кольце — не проблема. Местоположение каталога страниц задается регистром CR3, дальше вручную проводишь трансляцию виртуального адреса (делишь по схеме 10-10-12, берешь значения из каталога и таблицы страниц) и получаешь искомое, если бит присутствия не равен 0.

А зачем это вдруг понадобилось ? Вся идея виртуальной памяти основана на том, что она абсолютно прозрачна, ты не можешь это знать, не должен знать и не должен хотеть знать.
With best regards
Pavel Dvorkin
Re[2]: Как в процессе узнать физический адрес по виртуальном
От: jek_  
Дата: 18.10.07 08:18
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>В третьем кольце никак. Более того, если бы ты и мог узнать это, то пока узнавал бы — этот адрес мог бы поменяться (отправили страницу в своп и вернули в ОП, но в другое место).


Дык я понимаю, что может перемапироваться или усвопиться. Но всё же хочется узнать, хотя бы при таких условиях.

PD>В нулевом кольце — не проблема. Местоположение каталога страниц задается регистром CR3, дальше вручную проводишь трансляцию виртуального адреса (делишь по схеме 10-10-12, берешь значения из каталога и таблицы страниц) и получаешь искомое, если бит присутствия не равен 0.


Угу. Но неужели таки нету API какой-нибудь Ki..... функции? Может быть, всё-таки есть?

PD>А зачем это вдруг понадобилось ? Вся идея виртуальной памяти основана на том, что она абсолютно прозрачна, ты не можешь это знать, не должен знать и не должен хотеть знать.


Так и знал, что этот вопрос задаст кто-нибудь Дело в том, что на одной из систем периодически валится большой тест. Изредка портится элемент массива — всегда однообразно портится — но всегда разный элемент. Отследить, кто гадит в память, не представляется возможным. Никак. На других системах не проявляется. Всё это наводит на мысль, что на данной системе битая память/шина, хотя все третьесторонние тесты на память система проходит...

Дык вот и хочется понять, есть ли какая-то корреляция между физическими адресами битого элемента массива после N падений теста.
Re[3]: Как в процессе узнать физический адрес по виртуальном
От: Pavel Dvorkin Россия  
Дата: 19.10.07 08:07
Оценка:
Здравствуйте, jek_, Вы писали:

_>Угу. Но неужели таки нету API какой-нибудь Ki..... функции? Может быть, всё-таки есть?


Нет. Просто потому, что не должно быть. Представь себе, что есть. Это бы означало, что ты можешь вмешиваться в механизм вирт. памяти, а это не положено в 3 кольце.

PD>>А зачем это вдруг понадобилось ? Вся идея виртуальной памяти основана на том, что она абсолютно прозрачна, ты не можешь это знать, не должен знать и не должен хотеть знать.


_>Так и знал, что этот вопрос задаст кто-нибудь


Естественно


>Дело в том, что на одной из систем периодически валится большой тест. Изредка портится элемент массива — всегда однообразно портится — но всегда разный элемент. Отследить, кто гадит в память, не представляется возможным. Никак. На других системах не проявляется. Всё это наводит на мысль, что на данной системе битая память/шина, хотя все третьесторонние тесты на память система проходит...


Так, стоп. Что такое система ? Конкретная машина ? На другой машине с примерно тем же ПО не валится ? Если есть предположение, что там аппаратные проблемы, то надо не Windows внутри изучать, а взять тест памяти, работающий в DOS (memtest,
goldmem) и пустить на сутки. У меня goldmem прекрасно ошибки памяти на новокупленной машине отловил.
With best regards
Pavel Dvorkin
Re[4]: Как в процессе узнать физический адрес по виртуальном
От: jek_  
Дата: 24.10.07 09:03
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Нет. Просто потому, что не должно быть. Представь себе, что есть. Это бы означало, что ты можешь вмешиваться в механизм вирт. памяти, а это не положено в 3 кольце.


Дык надо-то всего лишь read access. Linux, к примеру, позволяет... хотя там и утилитный драйвер написать — десять минут работы. А под виндами я не умею

PD>Так, стоп. Что такое система ? Конкретная машина ?


Угу.

PD>На другой машине с примерно тем же ПО не валится ?


Угу.

PD>Если есть предположение, что там аппаратные проблемы, то надо не Windows внутри изучать, а взять тест памяти, работающий в DOS (memtest,

PD>goldmem) и пустить на сутки. У меня goldmem прекрасно ошибки памяти на новокупленной машине отловил.

Угу, пробовали. Один хрен — DOS тесты проходят, моя приблуда падает.

Поменяли память — падёж исчез. Вот так вот.
Re[5]: Как в процессе узнать физический адрес по виртуальном
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 28.10.07 08:57
Оценка:
Здравствуйте, jek_, Вы писали:

_>Дык надо-то всего лишь read access.


Понятно, что надо. Непонятно, какой в этом может быть практический смысл. Память тестируется другими средствами, а зачем бы разработчикам API делать какую-то возможность просто так, для красоты?

_>Поменяли память — падёж исчез. Вот так вот.


Тайминги памяти по SPD в точности те же? Ибо это мог быть очень хитрый глюк синхронизации, например.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.