|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.12.2017, 18:46 | #1 |
Пользователь
Регистрация: 21.07.2017
Сообщений: 12
|
Сегментация памяти
Здравствуйте, читаю небольшой материал про процессор 8086 и появившийся в нем режим сегментации памяти.
Хотел бы задать несколько вопросов 1) Ключевую роль в адресации 1 Мб памяти сыграла 20 битная адресная шина? 2) Где происходят вычисления (умножение) над адресом сегмента? Куда-то ведь должно сохраняться полученное 20 разрядное число, а вся архитектура у него 16 битная? 3) Смещение в сегменте может храниться как в регистрах, так и в ОЗУ? 4) Для чего создали регистры сегментов, чтобы была упорядоченность данных в памяти? 5) Зачем нужны сегменты нулевой длины? |
02.12.2017, 20:03 | #2 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
В 8086 сегментов нулевой длины небыло. А ваш автор плохо разбирается в том о чём пишет. а что не понятно, что в процессоре? Скачайте схему 8086 и посмотрите где именно. Если конечно схему найдёте. Да и не умножение там, а просто ответвление проводов. С чего вы взяли, что должно? Ну в принципе вы отгадали. Только это не вопрос программирования, а вопрос разработки железа. Тригер это элементарная ячейка способная запоминать единичный бит информации. В языках описания аппаратуры VHDL они называются регистрами. В процессоре куче скрытых от программиста регистров их нельзя не считать не записать через программу. А так же почти на каждой ножке процессора есть буфер. Он тоже захватывает и запоминает выводимые данные. Нет. Дайте определение(-я) архитектуры процессора. Смещение это просто число. Его и на бумажке можно хранить. И че же они помогают в упорядочивание данных? Этот вопрос надо спрашивать у разработчиков процессора, если они ещё живы. Рискну предположить, что сегменты были созданы для виртуализации памяти. Хотя обще принятой теорий считается совместимость с предыдущим поколением процессоров при необходимости увеличения доступной памяти.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
03.12.2017, 00:52 | #3 | |||
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
Зачем? Не забивай себе мозги. Всё-равно потом придётся переходить на 32-битные маны (80386), а у них мало общего. Начиная с 386 и до сегодняшних дней, организация памяти более статична, и особых новшеств не наблюдается. Тем-более, что все 32-битные процессоры совместимы с 16-битными (в 64-битных её уже вырезали).
Код:
Цитата:
Цитата:
Поэтому в системе существуют 3 типа адресов: сегментный (логический), линейный и физический. В реальном режиме, (лин) совпадает с (физ). Linear введён только для вирт.памяти защищённого режима, при разбиении её на 4-Кбайтные страницы. Из трёх типов адреса, ЦП оперирует только логическим адресом - т.е. тем, который мы указываем в своих программах. В тушке процессора имеется блок MMU (Memory Management Unit), который занимается трансляцией адресов. Именно MMU преобразует логический адрес в физический (линейный), который и выставляется на шину-адреса, для выбора ячейки ОЗУ. Цитата:
В них имеется скрытая 8-байтная часть. Оставшиеся 2-байта это то, что мы привыкли видеть. Это слово называют "Селектор сегмента". Например, при вкл.машины, на аппаратном уровне в регистах(CS:IP) выставляются такие значения (см.маны интела IA32/64 том-3): Код:
Сегменты нулевой длинны применяются только в защищённом режиме. Это область для выявление некорректных указателей. Таким способом винда заботится о своей заднице. Вся виртуальная память размером в 0хFFFFFFFF делится на две части - мл.часть юзеру, старшая - виндозе. Системная начинается с адреса [0х80000000] и подпирается с двух сторон двумя 64-Кбайтными буферами. Обращение к этим областям со стороны программиста вызывает исключения (нулевые указатели).
Нашедшего выход - затаптывают первым..
|
|||
03.12.2017, 01:09 | #4 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
Полный алгоритм трансляции адреса в реальном режиме такой:
1. Скопировать селектор сегментного регистра в его скрытую базу. 2. Сдвинуть базу на 4-бита влево. 3. Прибавить к базе смещение. 4. Выставить базу на шину-адреса. ..при этом лимит остаётся 0хFFFF. Он задаёт размер сегменту - 64Кб.
Нашедшего выход - затаптывают первым..
Последний раз редактировалось R71MT; 03.12.2017 в 01:13. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сегментация символов | 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 |