LINUX.ORG.RU

шина данных. адреса

 ,


0

3

здрасьте здрасьте люди добрые

помогите пожалуйста разобраться

у меня 64битный процессор, к примеру.

это, как я понял, значит , что адресная шина 64разрядная.

существует два режима: физический, и защищенный. при защищенном режиме мы можем адресовать больше , чем 2^20 . если мой процессор 64 разрядный, то это 2^64 и работать он будет в защищенном режиме. но как и в реальном, так и в защищенном режимах сегментные регистры остались 16битными. 2^16-это 64килобайта и назвали это сегмент памяти. и так как раньше нужно было с помощью 16битных регистров можно было адресовать 64Килобайта, а шина была 20 битной, то они добавляли 4бита, то есть смещали влево на 4 разряда. в 4 битах можно закодировать 16 байт. и эти 16 байт назвали параграф. параграф==странице?

не могу понять где тут место страницам. я описал сегментный тип памяти, но он тоже имеет страницы. чему они равны?

Страница в защищённом режиме никакого отношения к параграфам реального режима не имеет. В защищённом режиме сегментый регистр указывает на запись в особой таблице, которая где-то в памяти. В этой записи описывается сегмент (его размещение в физической памяти и размер). И разрядность сегментного регистра не влияет на разрядность адреса.

А страницы вобще отдельно. В 80286 ввели виртуальные адреса (защищённый режим), но без страничного преобразования. Там есть таблицы преобразования виртуального адреса (тот который в 64-бит регистре) в физический адрес. Часть виртуального адреса через эту таблицу определяет страницу (страшую часть физического адреса), а другая часть — смещение в этой странице.

что адресная шина 64разрядная.

Не совсем. Физическая адресная шина может быть и меньше. Виртуальных адресов 2^64, а ножек у процессора под шину адреса может быть всего 36 (или около того).

Сильно вникать в устойство страничного преобразования нужно разработчикам ОС, обычный процесс не может программировать таблицы страничного преобразования, таблицы дескрипторов сегментов.

mky ★★★★★ ()
Ответ на: комментарий от mky

зачем же они тогда добавляли 4 бита? сегментные регистры были 16 битными, а адресная шина 20 битной. то есть 16^2 и возможности новой шины 20^2 то есть невозможно было 16 битным регистром работать со всеми адресами, что могла дать шина со своими 20битами.

ребята, я не спорю, я просто пытаюсь разобраться. про селектр я читал но не могу увязать. щас

Assembler ()
Ответ на: комментарий от mky

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

теперь бы осталось еще понять, какое место тут страницам, при плоской модели памяти и при сегментной

Assembler ()
Ответ на: комментарий от LINUX-ORG-RU

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

Assembler ()
Ответ на: комментарий от Assembler

MMU это хардварная херня. Сам процессор спрашивает у неё разрешения дать доступ к памяти. Страницы там свои. Оно лишь даёт доступ или не даёт рулит трансляцией адресов, про выходе процесса за пределы дозволенного кидает исключение и передаёт управлене ядру которое пишет синментатион фаулт. Хотя не всегда так. Я не 100% в курсе что да как на самом деле происходит ничего не буду говорить. Дождись знающих. Которые зуб дадут что говорят верно.

Как на счёт полного отключения не в курсе. Читал список рассылки давно там ругались на такое )) Но можно конечно, только вот во что это выливается хз. Подписался

LINUX-ORG-RU ★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от LGH

Из за вас двух охламонов я таки снизойду раздуплить ассемблеры и аппаратные решения базовые. Вот всю жизнь мне оно нахрен было не нужно, а тут вы двое переодически мелькаете :D Молодцы. Больше таких тем и бесед. А то от зашквара толксов уже тошнить начинает. А когда интересно то подписываются на тред. Жми кнопку, колакольчик, лайк :D

LINUX-ORG-RU ★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

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

захожу, только если совсем уже непонятно. спасибо большое, думаю тот ваш труд не будет пустым, потому что знаю многих, кто учится и у кого также есть схожие вопросы.

многие смотрят и глупо лыбятся, ихидно спрашивая почему Ассемблер, почему Linux? типа хакер что ли?

меня даже выворачивает от таких слов! причем тут хакер. просто я выбрал то что мне нравится. Нравится мне Linux , нравится Assembler. то что в этом я не понимаю ничего , это отдельная тема. мне просто нравится. я хочу это узнавать, я хочу в этом развиваться. если я ограничен, это не значит, что я должен бросить и Linux и Assebler. вобщем сложно объяснить, но все иногда совсем не так , как может казаться. я лишь могу сказать одно: все эти вопросы и темы не для бесед и необычности, это просто желание получить ответы на те вопросы, до которых я сам не могу дойти.

Assembler ()
Ответ на: комментарий от Assembler

Всё правильно, занимайся тем что штырит. Мне вот программирование в хрен не упёрлось. Но каждый день мозги кипячу придумывая всякие штуки или допетривая до чего либо (не всегда успешно, но не суть) ::)

К слову, вот тебе поиграться

С нуля и очень просто можешь написать bootloader и в qemu или даже на реальном железе запускать любые свои штуки. Может быть полезно если захочется взять и наживую что-то проверить.

Там правда сишный код, а от ассемлера вставки. Но это не суть можно переписать как душе угодно или просто перегнать в асм всё.

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от Assembler

так почитай документацию на процессор(семейство), там всё рассказано про возможные модели организации адресации памяти. На сколько я знаю в Linux поддерживается только страничная организация памяти, т.е. переключиться на сегментную модель нельзя. Да и нет практического толку от нее на x64 процессорах, так как, как писали выше, физических линий адреса в нынешних процессорах меньше 64, т.е. существующая емкость адресов до конца не используется «в железе», а сегменты исторически появились для решения задачи адресации более чем 64кБ памяти на процессорах 16-битной архитектуры(там физическая ширина шины адреса была больше ширины регистров, которые использовались для адресации памяти)

anonymous ()

64битный процессор, к примеру. это, как я понял, значит , что адресная шина 64разрядная

Это значит, что регистры общего назначения 64 разрядные. Шины при этом могут быть разные, как меньше, так и больше - чисто технический момент.

существует два режима: физический, и защищенный

Там ещё херова туча спецрежимов.

параграф==странице

Параграфы к страницам никакого отношения не имеют. И вообще фичи реального режима никак не связаны с защищенным. Регистры используются для разных целей, никакой связи между тем и этим нет. Смотри на это как на 2 разных процессора.

no-such-file ★★★★★ ()
Ответ на: комментарий от Assembler

используются таблицы дескрипторов, которые ссылаются на сегменты

Это не те сегменты. Это сегменты защищённого режима и они устроены совершенно по-своему.

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Чувак, если я правильно понял автора темы, когда списывалчя с ним в vk , то сегментные регистры одни и теже что в реальном режиме, что в защищенном. Просто в защищенном, как мне пказалось селектор ссылается на дескриптор, а таблица дескрипторов, что описывают сегментные регистры , хранится в отдельном месте.

Как бы ни странно звучало, но как вот я только что понял благодаря этой теме, так это то, что в реальном режиме могут использоваться толко 16 битные регистры. 32-64 битные по бзику создателей могут быть использованны только в защищенном режиме. Простите, если ощибаюсь. И пусть автор не обидется что залез в его тему

LGH ()
Ответ на: комментарий от anonymous

Анус, ты опять воду мутишь? Автор и так не может разобраться. Что он тебе плохого сделал?

Ты ядро собирал? Ты видел там возможность выбора сегментной модели памяти и плоской?

Если я не разбираюсь, то я просто слушаю и стараюсь не лезть. Если вы чуваки, тыкаете носом автора, и твердите читай, но сами не шарите, и не читаете, то это как то не неайс. Вообщем автор в чем то прав, в том чего вы не знаете. И я тоже.

LGH ()
Ответ на: комментарий от LGH

регистры одни и теже что в реальном режиме, что в защищенном

Содержимое разное. Сегменты реального режима к сегментам защищённого не имеют никакого отношения. Это вообще разные вещи.

Как тогда память может быть сегментной без сегментов?

А она и не сегментная, эта фича не используется. Т.е. делается один сегмент на всю память и дальше уже рулят на уровне страниц.

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

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

Еще я понял от других, что как устроена память знают единицы. Пишут бред, для того чтобы запутать тех кто вдруг решит занятся крякерством. Так что если прочитали учебник, то можете смело быть уверены, что вас нае…ли.

Вобщем вряд ли мы узнаем, хоть и не имеем. Злого умысла.

LGH ()
Ответ на: комментарий от LGH

Все эти нюансы мало кому нужны, т.к. с одной стороны появились по историческим причинам (для совместимости), а с другой сами уже стали историей. Осталось плоская страничная память. Всё. Забудьте про сегменты, дескрипторы и прочий мусор. И тем более не нужно забивать этим голову, если начали изучать с нуля.

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от LGH

32-64 битные по бзику создателей могут быть использованны только в защищенном режиме.

Есть префиксы комманд (OperandSize = 66h, AddressSize = 67h) позволяющие работать с 32 битам в реальном режиме. Хотя, ЕМНИП, адрес всё равно остаётся 20-битным.

mky ★★★★★ ()
Ответ на: комментарий от Assembler

Я не знаю, почему разработчики 8086 выбрали такую модель памяти. До этого для 8-битных процессоров было нормой 16-битные адреса памяти — адрес складывался из двух регистров. И можно было бы это повторить и сделать 24 или 32 бита шину адреса и никаких сегментов. Возможно они считали, что 1 МегаБайт адресного пространства это более чем достаточно, а перекрывающиеся сегменты удобны для всяких операций копирования областей памяти.

При этом добавив защищённый режим они фактически отказались от этих мыслей. Сегменты реального и защищённого режима это совсем разные вещи. В реальном режиме сегменты реализованы аппаратно, всегда одинаково, в программист на ассемблере или компилятор может использовать факт перекрытия сегментов. Защищённый режим подразумевает какую-то программу супервизор, которая определяет размеры сегментов в защищённом режиме (создаёт их). Чтобы эти сегменты как-то соответствовали струтурам данных обычной программы, типа сегмент = массив, нужно придумывать какой-то механизм, внедрять его в компиляторы и ядро ОС. Все на это плюнули и память стала плоской. Аппаратно сегментные регистры остались, но они указывют на один сегмент. Точнее сегмента два — кода и данных, но они на одинаковом адресе.

mky ★★★★★ ()
Ответ на: комментарий от mky

почему разработчики 8086 выбрали такую модель памяти

Сегменты позволяли сделать программы релоцируемыми без дополнительных напрягов. Даже если адреса захардкожены, они же 16-битные внутри сегмента. В какой сегмент загрузишь, там программа и будет работать. Дёшево и сердито.

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)