Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2017, 18:46   #1
Player150
Пользователь
 
Регистрация: 21.07.2017
Сообщений: 12
По умолчанию Сегментация памяти

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

1) Ключевую роль в адресации 1 Мб памяти сыграла 20 битная адресная шина?
2) Где происходят вычисления (умножение) над адресом сегмента? Куда-то ведь должно сохраняться полученное 20 разрядное
число, а вся архитектура у него 16 битная?
3) Смещение в сегменте может храниться как в регистрах, так и в ОЗУ?
4) Для чего создали регистры сегментов, чтобы была упорядоченность данных в памяти?
5) Зачем нужны сегменты нулевой длины?
Player150 вне форума Ответить с цитированием
Старый 02.12.2017, 20:03   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от Player150 Посмотреть сообщение
Ключевую роль в адресации 1 Мб памяти сыграла 20 битная адресная шина?
Ключи не играют. Играют игроки.

Цитата:
Сообщение от Player150 Посмотреть сообщение
Зачем нужны сегменты нулевой длины?
В 8086 сегментов нулевой длины небыло. А ваш автор плохо разбирается в том о чём пишет.


Цитата:
Сообщение от Player150 Посмотреть сообщение
Где происходят вычисления (умножение) над адресом сегмента?
а что не понятно, что в процессоре? Скачайте схему 8086 и посмотрите где именно. Если конечно схему найдёте. Да и не умножение там, а просто ответвление проводов.

Цитата:
Сообщение от Player150 Посмотреть сообщение
Куда-то ведь должно сохраняться полученное 20 разрядное число
С чего вы взяли, что должно? Ну в принципе вы отгадали. Только это не вопрос программирования, а вопрос разработки железа. Тригер это элементарная ячейка способная запоминать единичный бит информации. В языках описания аппаратуры VHDL они называются регистрами. В процессоре куче скрытых от программиста регистров их нельзя не считать не записать через программу.
А так же почти на каждой ножке процессора есть буфер. Он тоже захватывает и запоминает выводимые данные.

Цитата:
Сообщение от Player150 Посмотреть сообщение
число, а вся архитектура у него 16 битная?
Нет. Дайте определение(-я) архитектуры процессора.

Цитата:
Сообщение от Player150 Посмотреть сообщение
Смещение в сегменте может храниться как в регистрах, так и в ОЗУ?
Смещение это просто число. Его и на бумажке можно хранить.

Цитата:
Сообщение от Player150 Посмотреть сообщение
Для чего создали регистры сегментов, чтобы была упорядоченность данных в памяти?
И че же они помогают в упорядочивание данных? Этот вопрос надо спрашивать у разработчиков процессора, если они ещё живы. Рискну предположить, что сегменты были созданы для виртуализации памяти. Хотя обще принятой теорий считается совместимость с предыдущим поколением процессоров при необходимости увеличения доступной памяти.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 03.12.2017, 00:52   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Player150 Посмотреть сообщение
читаю материал про 8086
Зачем? Не забивай себе мозги. Всё-равно потом придётся переходить на 32-битные маны (80386), а у них мало общего. Начиная с 386 и до сегодняшних дней, организация памяти более статична, и особых новшеств не наблюдается. Тем-более, что все 32-битные процессоры совместимы с 16-битными (в 64-битных её уже вырезали).
Код:
16-битные процессоры
---------------------
i8086 - 1978г. Первый процессор для PC-XT.
Режим работы:  R-Mode.
Регистры....:  16-бит, шина-данных(16), шина-адреса(20), частота(10 Мгц).
Память......:  1 Мб, сегментная(64К), непересекающихся сегментов(16).

80286 - 1982г. Первый процессор для PC-АT.
Режим работы:  R-Mode, P-Mode.
Регистры....:  16-бит, шина-данных(16), шина-адреса(24), частота(20 Мгц).
Память......:  16 Мб, сегментная, введена расширенная память EMS.

32-битные процессоры
---------------------
80386 - 1985г. Первый 32-разрядный процессор.
Режим работы:  R-Mode, P-Mode, V86-Mode.
Регистры....:  32-бит, шина-данных(32), шина-адреса(32), частота(40 Мгц).
Память......:  4 Гб, виртуальная.
Цитата:
Сообщение от Player150 Посмотреть сообщение
1) Ключевую роль в адресации 1 Мб памяти сыграла 20 битная адресная шина?
Ясно, что чем больше шина, тем больше адрес.

Цитата:
Сообщение от Player150 Посмотреть сообщение
2) Где происходят вычисления (умножение) над адресом сегмента? Куда-то ведь должно сохраняться полученное 20 разрядное число, а вся архитектура у него 16 битная?
Ячейки памяти ОЗУ выстроены в линейном порядке от 0 до N.
Поэтому в системе существуют 3 типа адресов: сегментный (логический), линейный и физический.
В реальном режиме, (лин) совпадает с (физ). Linear введён только для вирт.памяти защищённого режима, при разбиении её на 4-Кбайтные страницы.

Из трёх типов адреса, ЦП оперирует только логическим адресом - т.е. тем, который мы указываем в своих программах. В тушке процессора имеется блок MMU (Memory Management Unit), который занимается трансляцией адресов. Именно MMU преобразует логический адрес в физический (линейный), который и выставляется на шину-адреса, для выбора ячейки ОЗУ.

Цитата:
Сообщение от Player150 Посмотреть сообщение
4) Для чего создали регистры сегментов, чтобы была упорядоченность данных в памяти?
Начиная с 80286, размер сегментных регистров не 16-бит, а 10-байт.
В них имеется скрытая 8-байтная часть. Оставшиеся 2-байта это то, что мы привыкли видеть. Это слово называют "Селектор сегмента". Например, при вкл.машины, на аппаратном уровне в регистах(CS:IP) выставляются такие значения (см.маны интела IA32/64 том-3):
Код:
          |<--- скрыто --->|
          |                |   
CS = F000.FFFF0000.FFFF.0000
     |  | |      | |  | +--+--> атрибуты сегмента (для PMode)
     |  | |      | +--+-------> лимит сегмента (64Кб)
     |  | +------+------------> база сегмента
     +--+---------------------> селектор сегмента (для PMode)

IP = 0000FFF0 ----------------> смещение в сегменте
В реальном режиме, при трансляции этого адреса, MMU просто прибавляет к базе(CS) смещение(IP), и выставляет получившуюся базу [FFFFFFF0] на шину-адреса. Но поскольку в реальном режиме линия(А20) отключена, то шина получается 20-битная, и старшие биты базы отсекаются. Получается 20-битный адрес [FFFF0]. Это физический адрес первой инструкции BIOS, которая запускает процедуру POST.

Цитата:
Сообщение от Player150 Посмотреть сообщение
5) Зачем нужны сегменты нулевой длины?
Сегменты нулевой длинны применяются только в защищённом режиме. Это область для выявление некорректных указателей. Таким способом винда заботится о своей заднице.

Вся виртуальная память размером в 0хFFFFFFFF делится на две части - мл.часть юзеру, старшая - виндозе. Системная начинается с адреса [0х80000000] и подпирается с двух сторон двумя 64-Кбайтными буферами. Обращение к этим областям со стороны программиста вызывает исключения (нулевые указатели).
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 03.12.2017, 01:09   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Полный алгоритм трансляции адреса в реальном режиме такой:

1. Скопировать селектор сегментного регистра в его скрытую базу.
2. Сдвинуть базу на 4-бита влево.
3. Прибавить к базе смещение.
4. Выставить базу на шину-адреса.

..при этом лимит остаётся 0хFFFF. Он задаёт размер сегменту - 64Кб.
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 03.12.2017 в 01:13.
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сегментация символов DarkHacker Общие вопросы Delphi 7 14.07.2015 00:58
Сегментация изображений Acedia Помощь студентам 0 12.04.2015 13:39
Сегментация изображения vladerfeu C# (си шарп) 1 31.03.2014 09:41
сегментация изображений на фотке (карте) Piv_drotik Свободное общение 0 24.10.2011 11:51
Сегментация. Слияние-дробление voronchak Win Api 0 26.02.2010 12:11