> man operating_systems
Центр информации по операционным системам :: Форумы :: Программирование :: Низкоуровневое программирование
 
<< Предыдущая тема | Следующая тема >>
Вот она была и вот ее нет - страничная память
Переход на страницу  1 [2]
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
Chizh
Воскресенье 06.02.2005 16:19
ID пользователя #90
Зарегистрирован: Понедельник 13.09.2004 18:42
Сообщений: 170
написал(а) ...
Да, в документации по i486, п. 10.4.2.
Спасибо. А к стати, если адреса следующих команд те-же, то можно и не прыгать.
Наверх
Сайт
Bastard
Понедельник 07.02.2005 14:18
Гость
>поскольку операции с cr0 весьма медленные.
Откуда такая информация? По тактам полностью эквивалентно сбросу бита в регистре, ведь работает это без фантастики - страничный блок получает всегда управление, но дальнейшую работу или не работу определит сей обычный бит. Я заблуждаюсь?
>К тому же, риск получить прерывание или исключение в момент отключённого PG - все таблицы и обработчики будут указывать в никуда.
Мне кажется, что разместить ядро и первые приёмники прерываний логично в первом мб. Ведь переключение в реальный не отменяется?
Наверх
vilmor
Понедельник 07.02.2005 15:38
ID пользователя #140
Зарегистрирован: Пятница 29.10.2004 17:09
Местонахождение: Tomsk, Russia
Сообщений: 35
Bastard написал(а) ...
>поскольку операции с cr0 весьма медленные.
Откуда такая информация? По тактам полностью эквивалентно сбросу бита в регистре, ведь работает это без фантастики - страничный блок получает всегда управление, но дальнейшую работу или не работу определит сей обычный бит. Я заблуждаюсь?

Информация взята из личного опыта. Специально для проверки временных затрат на модификацию битиков в CR0, соорудил микробенчмарк, который считал количество тактов на выполнение блока инструкций mov cr0, eax. При этом, код был предварительно закэширован. Оказалось, что на модификацию разных битов тратится разное время, где-то порядка десяти тактов и более. Точных чисел не помню.

Кроме этого, у меня есть подозрение, что при установке бита PG, буфер TLB аннулируется, но сам этого не проверял, и в документации на этот счёт ничего не говорится. Возможно, это зависит от конкретного процессора.
Если TLB аннулируется, что он должен будет опять заполнен, а это - не одна и не две операции с памятью, которые всегда были узким местом в производительности.

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

Думаю, разработчики Linux тоже думали в своё время о таком решении, но сопоставив надёжность и быстродействие, выбрали более традиционный способ.

Bastard написал(а) ...
>К тому же, риск получить прерывание или исключение в момент отключённого PG - все таблицы и обработчики будут указывать в никуда.
Мне кажется, что разместить ядро и первые приёмники прерываний логично в первом мб. Ведь переключение в реальный не отменяется?

AFAIK, в Linux оно находится в верхних адресах виртуальной памяти, где-то за 0x8000000 (при компиляции ядра можно настраивать). Соответственно, там и GDT, IDT, и обработчики прерываний. Естественно, в физической памяти они находятся совсем по другим адресам, пусть хоть и в первом мегабайте.

В итоге, получается, что для отключения PG потребуется спроецировать кусок кода в нижние линейные адреса, там где обычно находится пользовательская программа. Этот кусок кода должне иметь fixup на эти адреса, либо быть позиционно-независимым. И ещё потребуется поменять адреса GDT и IDT, либо просто запретить прерывания.
Одним словом, прийдётся поизвращаться =)
Наверх
Сайт
revenge
Четверг 10.02.2005 10:46

ID пользователя #206
Зарегистрирован: Четверг 10.02.2005 10:33
Местонахождение: Питер
Сообщений: 3
>Оказалось, что на модификацию разных битов тратится разное время, где-то порядка десяти тактов и более. Точных чисел не помню.
такие тармаза тока на старых процах.. хачу сказать что обращение к cr0 дело очень частое, независимо от нашего желания. А его модификация занимает савсем не больше чтения... TLB сбрасывается тока при смене режимов проца и cr3. Так что с производительностью в этом плане всё супер
<span class='smallblacktext'>[ Редактирование четверг 10.02.2005 11:16 ]</span>

Есть люди поступков которых мы не замечаем, но они меняют весь ход событий...
Наверх
Сайт
Переход на страницу  1 [2]  

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.