При каждом обращении к памяти выполняется поиск номера виртуальной страницы, содержащей требуемый адрес, затем по этому номеру определяется нужный элемент таблицы страниц, и из него извлекается описывающая страницу информация.
По признаку присутствия определяется, надо или нет загружать страницу. Если нужная страница в данный момент выгружена на диск, то выполняется так называемое страничное прерывание – выполняющийся процесс переводится в состояние ожидания (загрузки страницы), а в это время активируется другой процесс, находившийся в очереди готовых процессов.
По номеру физической страницы выполняется преобразование виртуального адреса в физический – простота такого преобразования определяется размером страниц, кратным степени двойки (в операционных системах для процессоров Pentium компании Intel размер страниц обычно 4096 байт = 4 Кбайт).
Любой виртуальный адрес процесса состоит из двух частей: старшие разряды соответствуют номеру виртуальной страницы, а младшие – номеру ячейки в странице. Замена виртуального адреса на физический состоит в замещении старших разрядов – номер виртуальной страницы меняется на номер соответствующей физической страницы памяти.
Размер страницы влияет на производительность системы и эффективность использования памяти. Чем меньше размер страницы, тем меньше фиктивная ее часть и неиспользуемая часть кода процесса, но учащается процесс смены страниц в оперативной памяти.
Размер страниц влияет и на количество записей в таблице страниц. Учитывая, что в современных процессорах максимальный объем адресного пространства процесса, как правило, не меньше 4 Гбайт, то при размере страницы 4 Кбайт и длине записи 4 байта для хранения таблицы страниц может потребоваться до 4 Мбайт памяти.
Так как у объемных процессов таблица страниц занимает несколько страниц физической памяти, то часть из них (менее интенсивно используемых) может быть вытеснена на диск. Для этого общее виртуальное пространство страниц процесса разбивается на разделы и для каждого раздела создается собственная таблица страниц, которая занимает в памяти одну страницу (для процессоров Pentium – на 1024 записи). Информация о страницах с таблицами находится в таблице разделов, которая постоянно расположена в оперативной памяти.
Страничное распределение памяти может быть реализовано в упрощенном варианте без выгрузки страниц на диск. Все виртуальные страницы процессов находятся в памяти. В этом случае нет преимуществ, которые дает виртуальная память, зато можно успешно бороться с фрагментацией памяти, т. к. все страницы имеют фиксированные размеры, а виртуальные страницы жестко не привязаны к физическим страницам.
2.2.4. Сегментное распределение памяти
При этом методе виртуальное адресное пространство процесса делится на части – сегменты, размер которых определяется с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т. п. «Осмысленность» сегментов упрощает их защиту.
Деление виртуального адресного пространства на сегменты осуществляется компилятором на основе указаний программиста или по умолчанию, в соответствии с принятыми в системе соглашениями.
Сегменты не упорядочиваются друг относительно друга, так что общего для сегментов линейного виртуального адреса не существует. Виртуальный адрес задается парой чисел: номером сегмента и линейным виртуальным адресом внутри сегмента.
Максимальный размер каждого сегмента при 32-разрядной организации процессора равен 4 Гбайт.
При загрузке процесса в оперативную память помещается только часть его сегментов, полная копия виртуального адресного пространства находится в дисковой памяти.
На этапе создания процесса во время загрузки его образа в оперативную память создается таблица сегментов процесса (аналогичная таблице страниц), в которой для каждого сегмента указываются:
· базовый физический адрес сегмента в оперативной памяти;
· размер сегмента;
· правила доступа к сегменту;
· признаки модификации, присутствия и обращения к данному сегменту, а также некоторая другая информация.
Достоинства сегментного распределения памяти:
· если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре, и который в этом случае называется разделяемой памятью;
· возможно задание дифференцированных прав доступа процесса к его сегментам, например, только чтение или запись.
Недостатки:
· более громоздкий механизм преобразования виртуальных адресов процесса в физические. При страничной организации страницы имеют одинаковый размер, кратный степени двойки. Поэтому ОС заносит в таблицы страниц не полный адрес физической памяти, а только номер физической страницы, который одновременно представляет собой старшие разряды физического адреса любой ячейки этой страницы при преобразовании адресов. При сегментной организации сегменты могут начинаться с любого физического адреса памяти, поэтому в таблице сегментов необходимо задавать полный начальный физический адрес;
· избыточность, т. к. единицей перемещения между памятью и диском является сегмент, который в общем случае больше страницы;
· фрагментация памяти, которая возникает из-за непредсказуемых размеров сегментов.
Сегментно-страничное распределение памяти.
В этом методе реализуются достоинства страничного и сегментного методов распределения памяти.
Как и при сегментной организации памяти, виртуальные адресные пространства разделены на сегменты. Это позволяет определить разные права доступа к разным частям кодов и данных программ.
Однако в большинстве современных реализаций все виртуальные сегменты образуют одно непрерывное линейное виртуальное адресное пространство процесса.
Перемещение данных между памятью и диском осуществляется не сегментами, а страницами. Для этого каждый сегмент и физическая память делятся на страницы одинакового размера, что позволяет эффективно использовать память, сократив до минимума фрагментацию.
Преобразование виртуального адреса в физический адрес происходит в два этапа.
На первом этапе работают механизмы сегментации. Однако в таблице сегментов в поле базового адреса указывается не начальный физический адрес сегмента в оперативной памяти, а начальный линейный виртуальный адрес сегмента в пространстве виртуальных адресов процесса. Поэтому исходный виртуальный адрес, заданный в виде пары (номер сегмента, смещение) преобразуется в линейный виртуальный адрес.
На втором этапе работает страничный механизм, при помощи которого полученный линейный виртуальный адрес преобразуется в искомый физический адрес.
2.3. Кэширование данных
2.3.1. Иерархия запоминающих устройств в компьютере
Память компьютера представляет собой иерархию запоминающих устройств, отличающихся средним временем доступа к данным и стоимостью хранения одного бита данных (рис. 2.4).
Внешняя память (дисковая) компьютеров в настоящее время достигла объема десятков…сотен гигабайт, но скорость доступа к данным является невысокой.
Оперативная память компьютера обычно является динамической (DRAM), которая имеет среднее время доступа 10…20 нс. Для хранения данных, к которым необходимо обеспечить быстрый доступ, используется статическая оперативная память (SRAM), не требующая специальных циклов регенерации, а поэтому более быстродействующая.
Известно – чем более быстродействующая память, тем дороже ее производство. Однако пользователю хотелось бы иметь и недорогую, и быстродействующую память. Кэширование данных представляет некий компромисс в решении этой проблемы.

Рис. 2.4. Иерархия запоминающих устройств компьютера
2.3.2. Кэш-память
Кэш-память, или просто кэш (cache), – это способ совместного функционирования двух типов запоминающих устройств (ЗУ), отличающихся временем доступа и стоимостью хранения данных, который за счет динамического копирования в быстрое ЗУ наиболее часто используемых данных из медленного ЗУ позволяет уменьшить среднее время доступа к данным и экономить более дорогую быстродействующую память.
Кэш-память прозрачна для программ и пользователей. С ней работает только операционная система.
Кэш-памятью называют не только способ организации работы двух типов запоминающих устройств, но и одно из них – быстрое ЗУ.
В современных компьютерах применяют кэширование, как оперативной памяти так и диска. Рассмотрим процесс кэширования на примере кэширования оперативной памяти, которую часто называют основной памятью.
В процессе работы системы в кэш-память заносятся данные, считываемые системой из оперативной памяти при выполнении каких-либо задач. Каждая запись в кэш-памяти включает в себя:
· значение элемента данных;
· адрес, который этот элемент данных имеет в основной памяти;
· дополнительную информацию, которая используется для реализации алгоритма замещения данных в кэше и обычно включает признак модификации (1/0) и признак действительности данных (1/0).
При каждом обращении к основной памяти просматривается содержимое кэш-памяти с целью определения, не находятся ли там нужные данные. Кэш-память не является адресуемой, поэтому поиск осуществляется по содержимому. Далее возможна одна из двух ситуаций:
· если данные обнаруживаются в кэш-памяти (кэш-попадание), то они считываются из нее;
· если нужные данные отсутствуют в кэш-памяти (кэш-промах), то они считываются из основной памяти и одновременно с этим копируются в кэш-память.
Понятно, что эффективность кэширования зависит от вероятности кэш-попаданий, обусловленной разными факторами: объемом кэша, объемом кэшируемой памяти, алгоритмом замещения данных в кэше и другими особенностями компьютера и вычислительного процесса. Тем не менее, в большинстве систем процент кэш-попаданий не менее 90 %.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 |



