OSDev
http://osdev.su/

Канонические адреса
http://osdev.su/viewtopic.php?f=6&t=310
Страница 1 из 1

Автор:  KIV [ 23 фев 2010, 14:19 ]
Заголовок сообщения:  Канонические адреса

Как мне узнать сколько бит виртуально адреса поддерживает процессор. Например, Bochs только 47, а настоящий компьютер может и все 48 бит. А вдруг попадётся машина, которая и меньше 47 бит поддерживает. Как это узнать? Может есть какая-нибудь функция CPUID?

Автор:  SII [ 23 фев 2010, 20:43 ]
Заголовок сообщения:  Re: Канонические адреса

А что, в мануале ничего по этому поводу нет?

Автор:  KIV [ 23 фев 2010, 22:50 ]
Заголовок сообщения:  Re: Канонические адреса

Количество бит виртуального адреса: функция CPUID 0x80000008. В EAX[8..15] должно возвращается число бит. Однако в Bochs это число равно 0x30 = 48, хотя при попытке обратится к адресу в котором более 47 бит приводит к canonical failure. Может я не туда смотрю?

Автор:  SII [ 23 фев 2010, 23:55 ]
Заголовок сообщения:  Re: Канонические адреса

Вроде как туда. Возможно, ошибка в Боше -- все они прилично глючные... Если на реальном железе отрабатывает нормально, значит, проблема именно в нём. Но, может, это где-то ошибка в Вашем коде:

Цитата:
In 64-bit mode, an address is considered to be in canonical form if address bits 63
through to the most-significant implemented bit by the microarchitecture are set to
either all ones or all zeros.
Intel 64 architecture defines a 64-bit linear address. Implementations can support
less. The first implementation of IA-32 processors with Intel 64 architecture supports
a 48-bit linear address. This means a canonical address must have bits 63 through 48
set to zeros or ones (depending on whether bit 47 is a zero or one).


Если устанавливается старший реальный бит линейного адреса (47), то должны быть установлены и все более старшие биты. Фактически линейный адрес трактуется как число со знаком -- бред, конечно, но вся архитектура ИА-32 бредовая с самого начала...

Автор:  KIV [ 24 фев 2010, 16:35 ]
Заголовок сообщения:  Re: Канонические адреса

Цитата:
Если устанавливается старший реальный бит линейного адреса (47), то должны быть установлены и все более старшие биты.

Об этом я не знал. Значил дело в этом. Спасибо.

Автор:  Himik [ 26 фев 2010, 17:29 ]
Заголовок сообщения:  Re: Канонические адреса

SII писал(а):
Если устанавливается старший реальный бит линейного адреса (47), то должны быть установлены и все более старшие биты. Фактически линейный адрес трактуется как число со знаком -- бред, конечно, но вся архитектура ИА-32 бредовая с самого начала...

Не бред с точки зрения адресной арифметики. Вполне продуманно.

Автор:  SII [ 26 фев 2010, 22:52 ]
Заголовок сообщения:  Re: Канонические адреса

Бред абсолютный по-любому. Никогда я не встречал, чтобы адреса трактовались как числа со знаком, а имел дело я не с одним десятком разных архитектур. Ну а тут АМД повыёживаться решила, вот и расширила таким образом. В результате даже единый блок памяти нельзя образовать, если он пересекает границу смены знака, хотя физически память будет адресоваться всё равно линейно...

Автор:  Himik [ 27 фев 2010, 03:23 ]
Заголовок сообщения:  Re: Канонические адреса

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/