“В embedded устройствах не нужно разграничивать адресные пространства процессов и не нужно думать о виртуальной памяти – здесь просто ее так мало, что не разгуляешься, да и никакого юзерского кода нет в принципе. А если все делаешь сам и для себя – нет смысла париться про безопастность.
Таким образом в 32-битных системах на RISC-процессорах используется единое адрессное пространство размером 4Гб т.е. адреса 00000000 – FFFFFFFF. И все всё видят, почти как ring-0 в винде, где существует только Non-paged память. Или как это в x86 называется plane-адресация.”
То есть про реальный режим в x86 люди уже не знают. Для них существует только ring 0…
Оригинал этой записи. Комментировать можно тут или там.
Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме
Tags:
no subject
Кстати, я не помню точно пределы адресации в реальном режиме. Не один ли мегабайт? Вроде как там про FFFFFFFF даже речи не было.
no subject
no subject
no subject
no subject
no subject
На x86 (начиная с 286, кажется) в реальном режиме адресовался мегабайт плюс ещё немножко: если в сегментный регистр положить 0xFFFF, то можно было дойти до 0xFFFF0+0xFFFF=0x10FFEF. Старший бит по идее должен был отбрасываться из-за переполнения, но он не отбрасывался.
no subject
no subject
no subject
no subject
no subject
no subject
P.S. ring 0 то вполне существует, ядро с драйверами в нем сидят и стараются друг-друга не ушибить.
no subject
no subject
no subject
А физической памяти может быть гораздо больше или гораздо меньше и т.п. В ядре есть некоторые вещи, виртуальный адрес которых умышленно совпадат с физическим, но их мало и они очень специальные.
no subject
Селектор-то штука логическая, ему совершенно не обязательно численно совпадать с сегментом, который он адресует.
no subject
В NT используется "плоская" модель - сегменты имеют базу 0 и размер в 4 Гига. Их несколько - чтобы можно было разные права доступа установить и при переходе kernel mode -> user mode и обратно выбираются соответствующие селекторы, но все равно в режиме ядра сегмент описывает все адресное пространство.
В x64 по-другому и сделать нельзя, а в x86 мало кто использует сегменты так, как Intel предполагал когда 386 процессор создавался.
Виртуальная память в ядре используется для того, чтобы все что не нужно можно было вытеснять на диск, освобождая физические страницы для того, что нужнее.
От физической адресации, даже если адрес совпадает и если у кода есть права доступа к странице, это все равно отличается - например процессор установит dirty bit, access bit и т.п. Кроме того, трансляция адреса все равно производится (виртуального в физический) и никак нельзя от этого отказаться. Что в свою очередь означает что CR3, селекторные регистры, GDTR, LDTR, IDTR и GDT/LDT и таблицы и каталоги страниц все должны быть заполнены правильно.
В физической адресации ничего этого не используется (кроме, быть может, IDTR).
no subject
Если точно известно, что селектор 0 относится к физическому сегменту, начинающемуся с нулевого адреса, то получаем виртуальную адресацию, совпадающую с физической, но в общем случае этого никто не обещал. А в реальном режиме, как ты правильно описал, никаких дополнительных данных не нужно - берём адрес сегмента, сдвигаем на 4 бита, прибавляем смешение и получаем однозначный физический адрес.
no subject
Если точно известно, что селектор 0 относится к физическому сегменту, начинающемуся с нулевого адреса, то получаем виртуальную адресацию, совпадающую с физической,
>>>
Это упрощенние.
Чтобы получить физический арес из виртуального нужно:
(в классичесокй x86 модели)
взять селектор из сегментного регистра, используя селектор как индекс в GDT или LDT взять дескриптор сегмента.
К базе сегмента прибавить смещение - получится линейный адрес.
Линейный адрес состоит из индекса page table, индекса страницы и смещения внутри страницы.
Теперь из CR3 нужно достать физический адрес PDT, используя индекс page table нужно из pdt достать физический адррес page table и используя индекс страницы достать из page table фихический адрес страницы. К физическому адресу страницы нужно прибавить смещение и получить искомый физический адрес.
Вся эта процедура делается даже если PDT/PT отображает линейные адреса в физические 1:1. Для ускорения процесса используется TLB и кэш дескрипторов.
no subject
no subject
no subject
no subject
no subject
no subject
Или это что-то совсем embedded было?
no subject
это если про Sinclair и его клоны говорить, но у нас про Amstrad и не слышали почти.
no subject
no subject
Короче, DDK ему в зубы, а про безопасность - вообще бред.
no subject
no subject
no subject
http://dil.livejournal.com/975809.html?thread=7370689#t7370689
no subject
Про эмбеды Артемка Кокорев в теме, он на них собаку слопал, но где его сейчас искать - не в курсе.
no subject
Я уже не говорю о системах контроля версий, грамотной организации проекта в смысле фалов-имён-статик-не-статик, etc. — там для огромного их числа Откровение и Прорыв то, что CVS Существует.
no subject
no subject
no subject
Полная версия: http://xtin.activebb.net/forum-f1/tema-t38.htm