OSDev

для всех
Текущее время: 10 май 2024, 10:37

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Канонические адреса
СообщениеДобавлено: 23 фев 2010, 14:19 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Канонические адреса
СообщениеДобавлено: 23 фев 2010, 20:43 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
А что, в мануале ничего по этому поводу нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Канонические адреса
СообщениеДобавлено: 23 фев 2010, 22:50 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Канонические адреса
СообщениеДобавлено: 23 фев 2010, 23:55 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Вроде как туда. Возможно, ошибка в Боше -- все они прилично глючные... Если на реальном железе отрабатывает нормально, значит, проблема именно в нём. Но, может, это где-то ошибка в Вашем коде:

Цитата:
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 бредовая с самого начала...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Канонические адреса
СообщениеДобавлено: 24 фев 2010, 16:35 

Зарегистрирован: 16 фев 2010, 22:03
Сообщения: 101
Цитата:
Если устанавливается старший реальный бит линейного адреса (47), то должны быть установлены и все более старшие биты.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Канонические адреса
СообщениеДобавлено: 26 фев 2010, 17:29 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
SII писал(а):
Если устанавливается старший реальный бит линейного адреса (47), то должны быть установлены и все более старшие биты. Фактически линейный адрес трактуется как число со знаком -- бред, конечно, но вся архитектура ИА-32 бредовая с самого начала...

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Канонические адреса
СообщениеДобавлено: 26 фев 2010, 22:52 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Канонические адреса
СообщениеДобавлено: 27 фев 2010, 03:23 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
SII, вообще-то действительно, для исходного значения не обязательно быть знаковым числом, даже для знаковой арифметики. Я так понял, они произвели закругление адресного пространства, устранили нерабочую область из адресации. Но процессор мог и так отслеживать выход за границу. Надо будет поинтересоваться истинными причинами сего действа, должна быть веская причина.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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