Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Сегментная организация памяти. Страничная организация распределения памяти страдает большими недостатками




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

· таблица символов, которая содержит имена и атрибуты переменных;

· исходный код;

· таблица констант;

· стек, для вызова процедур и т.д.

Некоторые из таблиц увеличиваются в процессе компиляции, другие уменьшаются, а стек ведет себя совершенно непредсказуемо. В одномерном пространстве эти таблицы не смогли бы мирно ужиться (некоторые будут переполняться, хотя другие будут полупустыми). Что делать? Нужно освободить программиста от управления размерами таблиц. Для этого надо создать много абсолютно независимых адресных пространств, границы которых плавают, размеры плавают и их совокупности плавают! Такие блоки и называются сегментами.

Память может логически организовываться в виде одного или множества блоков, сегментов произвольной длины. Мы уже говорили, что в защищенном режиме возможно разбиение логической памяти на страницы размером 4 Кбайт (до 5 Мбайт в современных процессорах), каждая из которых может отображаться на любую область физической памяти. Сегментация и страничная трансляция адресов могут применяться совместно и по отдельности. Сегментация является средством организации логической памяти на прикладном уровне, а страничная трансляция адресов на системном уровне.

Что бы лучше понять принцип сегментирования рассмотрим его на примере процессора Intel 8086. Вся память системы представляется не в виде непрерывного пространства, а в виде нескольких блоков — сегментов заданного размера (по 64 Кбайт), положение которых в пространстве памяти можно изменять программным путем. Для хранения кодов адресов памяти используются не отдельные регистры, а пары регистров:

  • сегментный регистр определяет адрес начала сегмента (база сегмента), то есть положение сегмента в памяти;
  • регистр указателя (регистр смещения) определяет положение рабочего адреса внутри сегмента.

При этом физический 20-разрядный адрес памяти, выставляемый на внешнюю шину адреса, образуется путем сложения смещения, и адреса сегмента со сдвигом на 4 бита. Сегмент может начинаться только на 16-байтной границе памяти (так как адрес начала сегмента, по сути, имеет четыре младших нулевых разряда, то есть с адреса, кратного 16. Эти допустимые границы сегментов называются границами параграфов. Отметим, что введение сегментирования, прежде всего, связано с тем, что внутренние регистры процессора 16-разрядные, а физический адрес памяти 20-разрядный (16-разрядный адрес позволяет использовать память только в 64 Кбайт, что явно недостаточно).

База сегмента
    Данные
ПАМЯТЬ

FFFFFH

 

 

16 битное расстояние

Регистр смещения

64 Кбайт

15…………… 0

       
   
 
 
Смещение


 

базовый адрес сегмента

 

16 байт 1 Мбайт

 

 

15………………. 0 00000H

 

Сегментный регистр

Рис. 8.6 Сегментная память процессора 8086

 

Для обращения к нужной ячейке памяти надо задать базу сегмента и 16-битное расстояние от базы называемое смещением или относительным адресом. Что бы упростить обращение к памяти, за каждой командой закреплен сегментный регистр по умолчанию. Преобразование пары сегмент/смещение (наз. также виртуальным адресом) в физический адрес довольно простое:

- пусть имеется команда MOV AX,[SI]

- пусть регистр DS содержит 1234H, а регистр SI содержит 101H, тогда физический адрес в команде MOV AX (загрузить слово в регистр AX из сегмента, базовый адрес которого находится в сегментном регистре DS, а смещение 101H в сегментном регистре SI) будет

DS x 16 + SI = 12340H + 101H = 12441H

Базовые адреса четырех одновременно доступных программе сегментов находятся в сегментных регистрах:

· регистр команд – CS;

· регистр данных – DS;

· стека – SS

· регистр дополнительных данных – ES.

Каждый из них 16-ти битовый, но можно считать, что они 20-ти разрядные.

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




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 278; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.