powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Адресация памяти
25 сообщений из 31, страница 1 из 2
Адресация памяти
    #35304020
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Вычитал из литературы в интернете, что начало каждого сегмента находится в ячейке адрес которой кратен 16... Когда проверил, так оно и есть.... Например при выводе дампа памяти (через командную строку командой debug (ентер) -d) начиная с ячейки 001A:0003 я получаю точно ту же информацию что и с ячейки 0010:00A3 (таких експериментов я проводил десятки)...
Но тогда возникает вопрос, каким же образом адресуется память? Ведь тогда получается, что максимальный адрес равен FFFFF и таким образом адресуется только 1 Мб памяти (как в процессоре i8086).
Помогите пожалуйста, а то самому никак не разобраться (уже десятки статей прочитал, а там везде написано, что в новых процессорах может адресоваться до 4 Гб памяти, но как это делается не написано)...

P.S. Если можно, посоветуйте ссылочки на хорошие ресурсы, где можно было бы вычитать что-нибуть интересное по данной теме.

СПАСИБО!
...
Рейтинг: 0 / 0
Адресация памяти
    #35304084
Фотография Frenzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вобще-то с появлением 64-битной архитектуры может и больше адресоваться ))
как ваши рассуждения мешают указателю иметь размер 32 или даже 64-бита?

_______________________________________
2pro4U
...
Рейтинг: 0 / 0
Адресация памяти
    #35304126
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, что не отвечал... отходил от компа ))
подскажите пожалуйста, а как в таком случае обратиться к любому участку памяти (ведь обращаясь по адресам от 0000:0000 до ffff:ffff как я понимаю используется только мегабайт памяти... или там есть какая-то хитрость, до которой я никак не могу додуматься? )?
О вот ещё одну статью нашёл... может там повезёт и что-нибуть вычитаю ))
...
Рейтинг: 0 / 0
Адресация памяти
    #35304141
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет.... всё не то...
подскажите пожалуйста как это работает... или дайте ссылочки ))
...
Рейтинг: 0 / 0
Адресация памяти
    #35304167
Програмёрнет.... всё не то...
подскажите пожалуйста как это работает... или дайте ссылочки ))
Дядя... Федор.
При чем тут сегмент и адрес, и выравнивание? Ты вообще о чем?

16-ть байт - это выравнивание. Просто процессор данные так быстрее обрабатывает, когда они расположены выровнено по 16-ть байтному смещению.

Хотя никто не запрещает адресовать (иметь доступ) в любую ячейку памяти, пофег, чему она там кратна.

Но сегменты - это вообще отдельно. Сегмент - это вообще архаизм времен DOS, о знании которого уже можно не париться. Нет, ну есть еще страницы памяти - так то тоже, и сегменты памяти, выделяемые из операционной системы по запросу... так то совсем отдельная ботва (вопросы менеджера памяти, про который тебе знать и вредно, и рано, поди).

Короче, ты бы лучше обзадачился вопросом того - какого размера страницы между кешами и линейками памяти циркулируют (чисто для понимания, почему обход массива по
Код: plaintext
[i][j]
значительно быстрее обхода по
Код: plaintext
 [j][i]
).

А в остальном - то все туфта бесполезная, почитай лучше Playboy - оно всяк полезнее будет (для организму).
...
Рейтинг: 0 / 0
Адресация памяти
    #35304182
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрПрошу прощения, что не отвечал... отходил от компа ))
подскажите пожалуйста, а как в таком случае обратиться к любому участку памяти (ведь обращаясь по адресам от 0000:0000 до ffff:ffff как я понимаю используется только мегабайт памяти... или там есть какая-то хитрость, до которой я никак не могу додуматься? )?

Верно. Эта модель памяти (сегментная) использовалась в DOS-режиме. Указатель имеет 32 разряда но использует свою сетку неэффективно. Это последствия Intel-овских экспериментов. С режимами адресации. Как следствие - неудобство кодинга и различные драйверы (himem, emm) для доступа к памяти выше 1 м.

В современном программировании, практикуют подходы, при которых процессу доступно 4 Гб адресного пространства (из них 2 - системные) для 32х разрядных архитектур шины адреса (с небольшими извращениями PAE/3GB процесс мог через специально окно видеть и более адресов), и практически неограниченная память для 64х разрядных архитектур (Itanium). Ограничиватеся только своп-файлом, что само по себе очень здорово и решает массу ненужных проблем (вроде оверлеев), с которыми бились головой об клавиатуру кодеры 90-х годов.

В догонку, покури вот эту бумагу .

Всего.
...
Рейтинг: 0 / 0
Адресация памяти
    #35304184
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
))) возможно и правда рано ...
просто у меня в запасе очень мало времени, что бы понять чем побольше про компы... Поэтому некоторые вещи пропускаю надеясь, что догоню в ходе изучения более важных вещей. Иногда срабатывает, а иногда к сожалению нет :)

Всем спасибо за общение и пояснения :) .

P.S. Если кто-то знает хорошие ресурсы, где можно было бы побольше про компы прочитать (их строение, организация разных типов памяти и т.д.) киньте ссылочки пожалуйста... просто очень надо :)
...
Рейтинг: 0 / 0
Адресация памяти
    #35304186
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В догонку, покури вот эту бумагу .
Гугл ? ))) я эти запросы уже смотрел... ну лано, всё равно спасибо, пройдусь ещё раз (просто привычка у меня пропускать некоторые из результатов поиска :) )
...
Рейтинг: 0 / 0
Адресация памяти
    #35304203
Програмёрменя пропускать некоторые из результатов поиска :) )
Ты скажи, че тебе вообще надо (как вариант - в этой жизни).

Изучать все подряд - и глупо, и непродуктивно: уже не 90-е, и не 80-е, прочитать все книги по программированию несколько не реально (да и смысла нет).
...
Рейтинг: 0 / 0
Адресация памяти
    #35304225
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр пишет:

> Вычитал из литературы в интернете, что начало каждого сегмента находится
> в ячейке адрес которой кратен 16... Когда проверил, так оно и есть....

Эт какая платформа имеется в виду, какой процессор, какая операционка ?
Везде по разному.

> Но тогда возникает вопрос, каким же образом адресуется память? Ведь
> тогда получается, что максимальный адрес равен FFFFF и таким образом
> адресуется только 1 Мб памяти (как в процессоре i8086).

Сегментная адресация реального режима i8086 уже давно не используется.
(точнее используется на старте операционной системы)

> Помогите пожалуйста, а то самому никак не разобраться (уже десятки
> статей прочитал, а там везде написано, что в новых процессорах может
> адресоваться до 4 Гб памяти, но как это делается не написано)...

Новых ? i-32 уже я не помню даже сколько лет. В 1995-ом году
уже вышла Windows-95, работавшая частично в виртуальном режиме.
А это значит процессоры уже под это дело существовали года 3-4.

> P.S. Если можно, посоветуйте ссылочки на хорошие ресурсы, где можно было
> бы вычитать что-нибуть интересное по данной теме.

Книжку любую по процессорам Intel.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Адресация памяти
    #35304380
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо.... Вроде бы разобрался. Как я понял, что бы добраться к памяти свыше 1 Мб можно спомощью GDT (Global Data Table помоему так расшифровывается :-) ).

> Книжку любую по процессорам Intel.
Ну... любую не очень хотелось качать... Я имел ввиду если кто-то конкретную книгу посоветовать может ). Ща уже читаю несколько, но оказалось так, что они обе про i8086 и i8088 рассказывают... Хотелось бы что-нибуть по-новее ))
...
Рейтинг: 0 / 0
Адресация памяти
    #35304390
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы видите только метр памяти, значит работаете в виртуальной машине DOS, либо загризились под чистым DOS-ом (что маловероятно). Вы не видите физических адресов, все адреса "вымышленные". В реальном режиме вы то же не увидите, не "пощупаете" физических адресов. Будете адреса лишь в своей виртуальной памяти адресовать, кстати 32-разрядными регистрами адреса, так что и предел памяти тут другого порядка. Бывшие 16-адреса сегментов теперь не адреса вовсе, это - коды дескрипторов в которых хранится реальный адрес смещения доступный ОС, но не вам.
Обо всем этом очень доходчиво написал А. Кинг. в книге "Windows 95 изнутри" ("Дорога в Чикаго" - второе название ее). Книга вышла за год до выхода Windows-95, но до сих пор актуальна когда речь заходит о виртуальной памяти.
...
Рейтинг: 0 / 0
Адресация памяти
    #35304462
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок... Спасибо... постараюсь эту книгу достать :)
...
Рейтинг: 0 / 0
Адресация памяти
    #35304525
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр пишет:

> Всем большое спасибо.... Вроде бы разобрался. Как я понял, что бы
> добраться к памяти свыше 1 Мб можно спомощью GDT (Global Data Table
> помоему так расшифровывается :-) ).

Нет, ты понял неправильно. И нифига не разобрался.
i80486 и более напрямую адресуют 4 гига памяти, и для того, чтобы
ее адресовать, ничего дополнительно не надо.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Адресация памяти
    #35304549
Ынтырпрайз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господи, неужели эти книжонки еще не сожгли? Действительно лучше уж читать Плейбой, чем ус-во процессоров и компов, которых уже нет.
...
Рейтинг: 0 / 0
Адресация памяти
    #35304614
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Нет, ты понял неправильно. И нифига не разобрался.
))) Хм.... значит буду искать далее... (Windows 95 изнутри уже скачал... щас читаю, может оттуда что-то вычитаю)
...
Рейтинг: 0 / 0
Адресация памяти
    #35304640
Ынтырпрайз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр> Нет, ты понял неправильно. И нифига не разобрался.
))) Хм.... значит буду искать далее... (Windows 95 изнутри уже скачал... щас читаю, может оттуда что-то вычитаю)

Ищи книжки по внутреннему ус-ву Windows 2000
...
Рейтинг: 0 / 0
Адресация памяти
    #35304642
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Ищи книжки по внутреннему ус-ву Windows 2000
ок... Спасибо
...
Рейтинг: 0 / 0
Адресация памяти
    #35305349
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Програмёр wrote:
> Вычитал из литературы в интернете, что начало каждого сегмента находится
> в ячейке адрес которой кратен 16... Когда проверил, так оно и есть....
> Например при выводе дампа памяти (через командную строку командой debug
> (ентер) -d) начиная с ячейки 001A:0003 я получаю точно ту же информацию
> что и с ячейки 0010:00A3 (таких експериментов я проводил десятки)...
> Но тогда возникает вопрос, каким же образом адресуется память? Ведь
> тогда получается, что максимальный адрес равен FFFFF и таким образом
> адресуется только 1 Мб памяти (как в процессоре i8086).
> Помогите пожалуйста, а то самому никак не разобраться (уже десятки
> статей прочитал, а там везде написано, что в новых процессорах может
> адресоваться до 4 Гб памяти, но как это делается не написано)...
>

Современные процессоры intel поддерживают три режима адресации (кстати,
все они - сегментные, хотя нынешние операционки это прячут). Первая, о
которой вы читали появилась в i8086 и позволяла адресовать до 1
мегабайта физической памяти, размер сегмента - 64 килобайта. Это та
называется реальных режим (real mode).
Вторая - появившаяся в i80286, позволяла адресовать 16 мегабайт
физической памяти, и имела размер сегмента 1 гигабайт. Это называют
защищенным режимом (protected mode).
Последняя, появившаяся в i80386, позволяет адресовать до 64 терабайт
физической памяти и имеет размер сегмента 4 гигабайта. Этот режим
называют виртуальным режимом (virtual mode).

В общем случае, в i80386, эти адреса (их называют логическими) не
соответствуют адресам физической памяти - а преобразование адреса
выполняется при помощи таблиц преобразования, и могут быть настроены на
любой участок памяти. Конечно, ограничения все равно присутствуют, так,
например, в i386 адресуемый участок имеет адрес и размер кратные 4k. И,
кстати, коль скоро логические адреса не связанны жестко с физическими,
по ним нельзя сказать, какой объем физической памяти адресуется процессором.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Адресация памяти
    #35305383
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что-то напоминающее FAT там есть.
...
Рейтинг: 0 / 0
Адресация памяти
    #35310435
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за данный ответ, teras ... очень познавательно (а главное кратко и ясно :) ). Но дело в том, что меня сбили немного с толку слова:
> Последняя, появившаяся в i80386, позволяет адресовать до 64 терабайт
> физической памяти и имеет размер сегмента 4 гигабайта. Этот режим
> называют виртуальным режимом (virtual mode).
Дело в том, что я читаю эту статью (точнее прочитал, но решил вернуться, так как у меня не совсем "сошлось" :) ) и там написано, что данный режим называется защищённым (сама статья называется "Программирование процессоров Intel x86 в защищённом режиме")... Хотелось бы уточнить, надо ли расценивать это как недосмотр автора статьи, или же я чего-то не так как надо понял?
Просто вроде бы мелочь, а хотелось бы её знать (ведь если ошибка автора статьи, то не охота мучаться на .286 (хотя не уверен, что такими сейчас пользуются, но всё же..) стараясь включить виртуальный режим, думая что это защищённый)
Заранее спасибо...
...
Рейтинг: 0 / 0
Адресация памяти
    #35310449
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё один вопрос по данной теме, только ближе к ессемблеру... почему, когда моя программа доходит до команды lgdt (запись регистра gdtr) в виндовсе (сам файл досовский с расширением *.com), то она просто закрывается (соответственно весь код после этой команды остаётся невыполненный)? Является ли это защитой операционной системы, и будет ли команда выполнена нормально (и вообще вся программа), если загрузиться с чистого доса, а не с виндовса?
...
Рейтинг: 0 / 0
Адресация памяти
    #35311151
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрВычитал из литературы в интернете вот правильная литература , если точнее, вот – архитектура и модель памяти.
...
Рейтинг: 0 / 0
Адресация памяти
    #35311178
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрЯвляется ли это защитой операционной системыэто защита процессора. Читай там же Volume 2: System programming и Volume 3, раздел system instructions – там все исключения расписаны.
...
Рейтинг: 0 / 0
Адресация памяти
    #35311364
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo вот правильная литература , если точнее, вот – архитектура и модель памяти.
Спасибо... жалко только там на английском, не всё понимаю :)

А данная защита (от перезаписи регистра gdtr) срабатывает потому, что ОС выставляет для моей программы (сегментам с моей программой) авторитет ниже нулевого? просто очень хочеться знать когда защита всё же не сработает (то есть возможно ли задать свою таблицу загрузившись в досе, или же надо свою ОС начинать писать ?)...
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Адресация памяти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]