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/ |