![]() |
![]() |
Главная страница Межпроцессное взаимодействие (состязание) 4) к адресу начала страницы прибавляется смещение, что дает в результате адрес в оперативной памяти, где расположено нужное слово; 5) наконец, происходит чтение или сохранение. Этот процесс продемонстрирован на рис. 4.23. Для простоты был опущен тот факт, что сегмент дескрипторов сам имеет страничное строение. Реально происходит следующее: регистр (основной регистр дескриптора) используется для определения расположения таблицы страниц сегмента дескрипторов, которая, в свою очередь, указывает на страницы сегмента дескрипторов. Как только дескриптор для необходимого сегмента найден, адресация продолжается согласно рис. 4.23. Виртуальный адрес MULTICS Номер сегмента Номер страницы Смещение Номер сегмента ![]() Сегмент дескрипторов Номер страниц Смещение Таблица страниц Страница Рис. 4.23. Преобразование в системе MULTICS адреса, состоящего из двух частей, в адрес в оперативной памяти Как вы, без сомнения, теперь догадались, если бы на практике предыдущий алгоритм выполнялся операционной системой для каждой команды процессора, программы были бы не слишком быстры. В действительности аппаратура для MULTICS содержит высокоскоростной буфер быстрого преобразования адреса (TLB) размером в 16 слов, способный производить поиск параллельно по всем своим записям для заданного ключа. Это проиллюстрировано на рис. 4.24. Когда компьютер получает адрес, аппаратура адресации сначала проверяет наличие виртуального адреса в TLB. При его наличии она получает номер страничного блока прямиком из TLB и формирует фактический адрес слова, к которому происходит обращение, не выполняя поиск в сегменте дескрипторов или таблице страниц. Адреса 16 самых часто востребуемых страниц хранятся в буфере (TLB). Программы, у которых рабочий набор меньше размера буфера, будут хранить адреса всего рабочего набора в TLB и, следовательно, работать эффективно. Если страница не находится в буфере быстрого преобразования адреса, фактически происходит обращение к дескриптору и таблице страниц, чтобы найти адрес страничного блока, и TLB обновляется для включения этой страницы. Тут же выгружается страница, не дольше других ожидавшая обращений. Поле возраста хранит информацию о том, какая из записей использовалась наиболее давно. Причиной для применения TLB служит обеспечиваемое им параллельное сравнение сегментов и номеров страниц всех записей. Поле сравнения Номер Виртуальная Страничный сегмента страница блок Защита Эта запись используется? Возраст V
Рис. 4.24. Простейший вариант буфера быстрого преобразования адреса в системе MULTICS. Два разных размера страниц делают фактическое строение TLB более сложным 4.6.3. Сегментация с использованием страниц: Intel Pentium Виртуальная память на компьютере Pentium во многих отношениях аналогична памяти в системе MULTICS, включая наличие и сегментации, и страничной организации. В то время как MULTICS имеет 256 К независимых сегментов, каждый до 64 К 36-разрядных слов, система Pentium поддерживает 16 К независимых сегментов, каждый до 1 млрд 32-разрядных слов. Хотя в последней системе меньше сегментов, их увеличенный размер намного более важен, так как программы редко нуждаются более чем в 1000 сегментах, но многим программам необходимы сегменты значительного размера. Основа виртуальной памяти Pentium состоит их двух таблиц: локальной таблицы дескрипторов iDr (Local Descriptor Table) и глобальной таблицы дескрипторов GDT (Global Descriptor Table). У каждой программы есть своя собственная таблица LDT, но глобальная таблица дескрипторов одна, ее совместно используют все программы в компьютере. Таблица LDT описывает сегменты, локальные для каждой программы, - ее код, данные, стек и т. д., тогда как таблица GDT несет информацию о системных сегментах, включая саму операционную систему. Чтобы получить доступ к сегменту, программа системы Pentium сначала загружает селектор для этого сегмента в один из шести сегментных регистров машины. Во время выполнения регистр CS содержит селектор для сегмента кода, а регистр DS хранит селектор для сегмента данных. Каждый селектор представляет собой 16-разрядный номер (рис. 4.25). Биты Индекс Уровень О = GDT/1 = LDT привилегированности (0-3) Рис. 4.25. Селектор в системе Pentium Один из битов селектора говорит, является ли данный сегмент локальным или глобальным (то есть находится ли он в локальной или глобальной таблице дескрипторов). Следующие тринадцать битов определяют номер записи в таблице дескрипторов, поэтому эти таблицы ограничены: каждая содержит 8 К сегментных дескрипторов. Остальные два бита относятся к проблемам защиты и будут описаны позже. Дескриптор О является запрещенным - его можно безопасно загрузить в сегментный регистр, чтобы обозначить, что сегментный регистр в данный момент недоступен, но при попытке его использовать вырабатывается прерывание. Во время загрузки селектора в сегментный регистр соответствующий элемент извлекается из локальной или глобальной таблицы дескрипторов и сохраняется в микропрограммных регистрах, что обеспечивает к нему быстрый доступ. Дескриптор состоит из 8 байт, в которые входят базовый адрес сегмента, размер и другая информация (рис. 4.26). 0:16-разрядный сегмент 1:32-разрядный сегмент 0: Предел в байтах 1: Предел в страницах База 24-31 База о-15 1 г , г 0: Сепиент отсутствует в памяти 1: Сегмент присутствует в памяти Уровень привилегированности (О-3) 0. Система 1: Программы-приложения Тип сегмента и защита
- 32 бита- Относительная адресация Рис. 4.2в. Дескриптор программного сегмента в системе Pentium. Сегменты данных немного отличаются от программных сегментов
|
© 2000 - 2025 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |