PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Память. Верхний уровень

Память. Верхний уровень

Общие сведения по преобразованию адреса в процессорах семейства х86

Организация памяти в процессорах семейства х86 позволяет использовать следующие режимы работы

1. Реальный;

2. Защищенный (сегментации);

3. Страничный;

4. Системного управления.

Реальный режим служит для обеспечения преемственности предыдущих процессоров и программ, а также для некоторых применений.

Защищенный режим служит для того, чтобы дать каждой программе несколько независимых защищенных адресных пространств. Страничный режим используется прежде всего для поддержки виртуальной памяти, т.е. среды, в которой большие адресные пространства моделируются на базе небольшой области оперативной памяти и некоторой дисковой памяти. Разработчики систем могут использовать как оба этих механизма (2 и 3), так и любой из них. При одновременном выполнении нескольких программ для защиты одних программ от влияния на них других программ можно использовать любой механизм.

Режим системного управления прежде всего предназначен для обеспечения перехода процессора в состояние пониженного энергопотребления (будет рассмотрен позднее).

Сиситемные регистры процессоров Intel х86

На рисунке ниже показан формат управляющих регистров CR0, CR2, CR3 и CR4. В большинстве систем загрузка управляющих регистров из прикладных программ невозможна (хотя в незащищенных системах такая загрузка разрешается).

 

Формат регистров управления

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

Например,

MOV EAX, CR0
MOV CR3, EBX

Назначения регистров: СRO, CR4 — управляющие. CR1 — резерв. CR2 — линейный адрес страничной ошибки. CR3 — база каталога таблиц страниц.

Регистры CR0, CR4 содержат системные управляющие флаги, которые управляют режимами или указывают на состояние процессора в целом, а не относительно выполнения конкретных задач. Программа не должна пытаться изменить состояние каких-либо битов в зарезервированных позициях. Эти зарезервированные биты всегда должны устанавливаться в то состояние, которое они имели ранее при считывании.

Назначение большинства битов управляющих регистров приведено в нижеследующей таблице (см. таблица ниже).

 

Биты управляющих регистров

 

Принципы организации виртуальной памяти

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

Термин линейный адрес подразумевает, что все адреса, используемые программой, расположены в едином одномерном (линейном) адресном пространстве, и каждый программный объект (элемент данных или команда программного кода) имеет свой уникальный адрес в этом пространстве. В противоположность этому, при использовании оверлейной структуры, один и тот же адрес может соответствовать нескольким объектам из разных модулей (оверлеев), загружаемых в одну область памяти в разные интервалы времени.

Рассмотрим организацию таблицы страниц и механизма замещения. Блоки памяти в рассматриваемом примере имеют одинаковую длину, но это не обязательно. Простейший вариант : размеры блоков (страниц) одинаковы, равны "2к"(2 в степени к) и выровнены по "2-к"(2 в степени к) границам адресов (см. рисунок ниже). Пусть физическая память имеет ограниченный размер "2к+3"(2 в степени к+3) и разбита на 8 страниц, а выполняемая программа содержит N страниц размером "=<2к"(меньше, либо равно 2 в степени к). Для установления соответствия операционная система формирует в системной области памяти таблицу страниц, которая содержит информацию о всех блоках выполняемой программы.

Схема виртуальной памяти на основе страниц

Запись для каждого блока содержит обычно следующие поля:

1) Место на внешнем носителе, где расположен блок. Туда ОС обращается, когда требуется загрузить данный блок в физическую память. При этой загрузке ОС должна выбрать свободную страницу физической памяти, загрузить туда страницу с диска, а затем заполнить в строке таблицы страниц два поля:

2) записать номер страницы физической памяти, куда записана страница, а также установить

3) "бит присутствия" БП, который говорит о том, что данная страница находится в ОЗУ , в соответствующей строке таблицы автоматически устанавливается

4) "бит изменения" БИ устанавливается, если при работе программы в данную страницу происходит запись, т.е. страница подвергается модификации. Этот бит будет использован, если данная страница удаляется из ОЗУ, поскольку на его место требуется поместить в память новую страницу. Старую страницу требуется сохранять на диске только в том случае, если бит изменения был установлен, (т.е. страница была изменена).

Обычно для записи информации о местоположении страницы на диске (номер блока/сектора) используется специальная таблица — карта диска. Рассмотрим более подробно, как работает виртуальная память. Линейный (виртуальный ) адрес состоит из двух частей: номера страницы и адреса внутри страницы. По номеру страницы выбирается строка таблицы страниц. Если бит присутствия установлен в "1", то страница в ОЗУ есть. Виртуальный номер страницы замещается реальным номером страницы в ОЗУ, взятым из строки таблицы. Происходит обращение к странице ОЗУ с учетом смещения. Если бит присутствия установлен в "0", то это значит данной страницы в ОЗУ нет. Происходит прерывание и загрузка нужной страницы с установкой бита присутствия в "1". Затем формируется реальный адрес и считывается/ записывается операнд. Загрузку страниц определяют три группы правил.

Многозадачность и операционная система

Большинство операционных систем (ОС) поддерживают многозадачность. Они последовательно переключают задачи одну на другую.В каждый момент времени процессор выполняет только одну задачу. В многопоточных процессорах одновременно могут выполняться несколько задач. ОС планирует какая из задач будет выполняться следующей, выбирает эту задачу и переключает контексты задач. Методы переключения зависят от стратегии, выбранной ОС.

Рассмотрим методы планирования и диспетчерирования. Различают несколько видов планирования (см. таблица ниже).

Виды планирования

Задача (поток) в процессе жизни в ОС может находиться в одном из состояний:

  • Ready (готова) — готова к выполнению;
  • Standby (простаивает) — выбрана следующей для выполнения на конкретном процессоре, диспетчер переключит контекст на эту задачу;
  • Running (выполняется) — задача выполняется до момента:
    -Завершения;
    -Вытеснения задачей с более высоким приоритетом;
    -Самостоятельного перехода в состояние ожидания;
    -Окончания выделенного кванта времени.
  • Waiting (ожидает) — задача переходит в это состояние самостоятельно на синхронизирующем объекте или по команде ОС, по окончании ожидания задача переходит в состояние Running или Ready;
  • Transition (переходное состояние) — стек задачи выгружен из памяти, при загрузке переходи в состояние Ready;
  • Terminated (завершена) — заканчивается выполнение, может удаляться из памяти;
  • Initialized (инициализирована) — загужена из ROM или винчестера.

Обычная последовательность прохождения задачи по состояниям может быть такой:

Initialized — Ready — Standby — Running — Terminated. Более полно схема прохождения задачи по состояниям показана на рисунке (Win 2000 — см. рисунок ниже).

Схема продвижения задачи по состояниям

RAID 0. RAID 1: Зеркальные диски

RAID 0

RAID 0 (striping — «чередование») — дисковый массив из двух или более жёстких дисков с отсутствием резервирования. Информация разбивается на блоки данных (Ai) и записывается на оба/несколько дисков одновременно.

(+): За счёт этого существенно повышается производительность (от количества дисков зависит кратность увеличения производительности).

(-): Надёжность RAID 0 заведомо ниже надёжности любого из дисков в отдельности и падает с увеличением количества входящих в RAID 0 дисков, т. к. отказ любого из дисков приводит к неработоспособности всего массива.

RAID 1

Зеркальные диски представляют традиционный способ повышения надежности магнитных дисков. Это наиболее дорогостоящий из рассматриваемых способов, так как все диски дублируются и при каждой записи информация записывается также и на проверочный диск. Таким образом, приходится идти на некоторые жертвы в пропускной способности ввода/вывода и емкости памяти ради получения более высокой надежности. Зеркальные диски широко применяются многими фирмами. В частности компания “Tandem Computers” применяет зеркальные диски, а также дублирует контроллеры и магистрали ввода/ вывода с целью повышения отказоустойчивости. Эта версия зеркальных дисков поддерживает параллельное считывание.

Дублирование всех дисков может означать удвоение стоимости всей системы или, иначе, использование лишь 50% емкости диска для хранения данных. Повышение емкости, на которое приходится идти, составляет 100%. Такая низкая экономичность привела к появлению следующего уровня RAID.

(+): Обеспечивает приемлемую скорость записи и выигрыш по скорости чтения при распараллеливании запросов.

(+): Имеет высокую надёжность — работает до тех пор, пока функционирует хотя бы один диск в массиве. Вероятность выхода из строя сразу двух дисков равна произведению вероятностей отказа каждого диска. На практике при выходе из строя одного из дисков следует срочно принимать меры — вновь восстанавливать избыточность. Для этого с любым уровнем RAID (кроме нулевого) рекомендуют использовать диски горячего резерва. Достоинство такого подхода — поддержание постоянной доступности.

(-): Недостаток заключается в том, что приходится выплачивать стоимость двух жёстких дисков, получая полезный объём одного жёсткого диска (классический случай, когда массив состоит из двух дисков).