Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

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

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

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

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

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

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

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


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

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

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

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

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

Цитата:
Сообщение от 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, 02:09   #4
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,230
Репутация: 1048
По умолчанию

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


08:01.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru