Иерархия запоминающих устройств. Принцип кэширования данных




Распределяемая память

Разделяемая память (англ. Shared memory) является самым быстрым средством обмена данными между процессами.

В других средствах межпроцессового взаимодействия (IPC) обмен информацией между процессами проходит через ядро, что приводит к переключению контекста между процессом и ядром, т.е. к потерям производительности.

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

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

 

Семафо́р (англ. semaphore) — объект, ограничивающий количество потоков, которые могут войти в заданный участок кода. Определение введено Эдсгером Дейкстрой. Семафоры используются для синхронизации и защиты передачи данных через разделяемую память, а также для синхронизации работы процессов и потоков.

 

В операционной системе Windows для создания разделяемой памяти используется функция CreateSharedMemory [13] из пакета Win32-SDK. C другой стороны, возможно использование функций CreateFileMapping и MapViewOfFile [14] из MSDN.

 

Иерархия запоминающих устройств. Принцип кэширования данных

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

Рис. 2.17. Иерархия ЗУ

Кэш-память - это способ организации совместного функционирования двух типов запоминающих устройств, отличающихся временем доступа и стоимостью хранения данных, который позволяет уменьшить среднее время доступа к данным за счет динамического копирования в "быстрое" ЗУ наиболее часто используемой информации из "медленного" ЗУ.

Кэш-памятью часто называют не только способ организации работы двух типов запоминающих устройств, но и одно из устройств - "быстрое" ЗУ. Оно стоит дороже и, как правило, имеет сравнительно небольшой объем.

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

Рис. 2.18. Кэш-память

В системах, оснащенных кэш-памятью, каждый запрос к оперативной памяти выполняется в соответствии со следующим алгоритмом:

  1. Просматривается содержимое кэш-памяти с целью определения, не находятся ли нужные данные в кэш-памяти; кэш-память не является адресуемой, поэтому поиск нужных данных осуществляется по содержимому - значению поля "адрес в оперативной памяти", взятому из запроса.
  2. Если данные обнаруживаются в кэш-памяти, то они считываются из нее, и результат передается в процессор.
  3. Если нужных данных нет, то они вместе со своим адресом копируются из оперативной памяти в кэш-память, и результат выполнения запроса передается в процессор. При копировании данных может оказаться, что в кэш-памяти нет свободного места, тогда выбираются данные, к которым в последний период было меньше всего обращений, для вытеснения из кэш-памяти. Если вытесняемые данные были модифицированы за время нахождения в кэш-памяти, то они переписываются в оперативную память. Если же эти данные не были модифицированы, то их место в кэш-памяти объявляется свободным.

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

В реальных системах вероятность попадания в кэш составляет примерно 0,9. Высокое значение вероятности нахождения данных в кэш-памяти связано с наличием у данных объективных свойств: пространственной и временной локальности.

  • Пространственная локальность. Если произошло обращение по некоторому адресу, то с высокой степенью вероятности в ближайшее время произойдет обращение к соседним адресам.
  • Временная локальность. Если произошло обращение по некоторому адресу, то следующее обращение по этому же адресу с большой вероятностью произойдет в ближайшее время.

Все предыдущие рассуждения справедливы и для других пар запоминающих устройств, например, для оперативной памяти и внешней памяти. В этом случае уменьшается среднее время доступа к данным, расположенным на диске, и роль кэш-памяти выполняет буфер в оперативной памяти.

Специальный файл.

Специальный файл - фиктивный файл, ассоциируемый с каким-либо устройством ввода-вывода, используется для унификации механизма доступа к файлам и внешним устройствам.

Специальный файл устройства, или просто файл устройства (англ. special device file) — это один из типов файлов в UNIX-подобной операционной системе[1]. Специальные файлы устройств содержат данные, необходимые операционной системе для взаимодействия с физическими устройствами, такими как диски и дисководы, принтеры и факсы и т. п. Фактически, специальные файлы устройств являются указателями на драйверы устройств, и когда процесс обращается к файлу устройств, он, по сути, работает с драйвером этого устройства[2].

Есть два типа файлов устройств: блочные (англ. block special files) и символьные (англ. character special files). Блочные файлы устройств используются для передачи данных, разделённых на пакеты фиксированной длины — блоки. А символьные файлы устройств используются для небуферизованного обмена данными[1]. Большинство устройств способно принимать и отправлять данные либо блоками (блочные устройства), либо сплошным потоком байтов (символьные устройства), но некоторые (такие как жёсткий диск) сочетают в себе обе эти возможности. Работа с первым типом устройств возможна либо через блочные, либо через символьные файлы, а вот с последним типом — подходят и те, и другие.

Для того, чтобы операционная система могла определить файл устройства и получить некоторые характеристики о самом устройстве, в файле содержатся 3 специальных поля: класс устройства, старший номер устройства и младший номер устройства. Класс устройства сообщает символьное устройство или блочное. В некоторых операционных системах (например, в Linux) есть и дополнительный класс устройств — небуферизованное символьное устройство. Кроме класса, есть ещё и тип устройства, который можно узнать по старшему номеру, например в Linux системе 1 означает оперативную память, 2 — дисковод гибких дисков, 3 — первый контроллер для жестких IDE-дисков, и т. д. В разных операционных системах один и тот же старший номер может указывать на разные типы устройств. Для того, чтобы отличить два устройства одного класса и типа предусмотрели младший номер. Он используется для нумерации устройств с одинаковыми старшими номерами. Например, если в компьютере 2 одинаковых дисковода, то специальные файлы устройств для них будут содержать один и тот же класс устройства, один и тот же старший номер, но вот младший номер у одного из них будет 0, а у другого — 1[2].

Файлы устройств размещаются в каталоге /dev или в его подкаталогах.

 

Примеры содержимого

· /dev/ sd буква — жёсткий диск (в системах на ядре Linux)

· /dev/ sd буква номер — раздел диска (в системах на ядре Linux)

· /dev/ sr номер (/dev/scd номер) — CD-ROM

· /dev/ eth номер — сетевые интерфейсы Ethernet

· /dev/ wlan номер — сетевые интерфейсы Wireless

· /dev/ lp номер — принтеры

· /dev/bus/ usb /000/ номер — устройство номер на шине USB первого контроллера (000) (в системах на ядре Linux)

· /dev/dsp звуковой вывод

· /dev/tty номер — текстовый терминал

· /dev/random — случайные данные (псевдоустройство)

· /dev/null — пусто (псевдоустройство)

· /dev/zero — нулевые байты (псевдоустройство)

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: