Программное управление буфером TLB

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

В былые времена такое предположение вполне соответствовало действительности. Но многие современные RISC-машины, включая SPARC, MIPS и (теперь уже ставшие историей) HP PA, осуществляют практически все управление страницами программным образом. На этих машинах записи TLB загружаются операционной системой явным образом. Когда нужная запись в TLB отсутствует, диспетчер памяти, вместо того чтобы обращаться к таблицам страниц для поиска и извлечения сведений о нужной странице, просто генерирует TLB-ошибку и подбрасывает проблему операционной системе. Система должна отыскать страницу, удалить запись из TLB, внести новую запись и перезапустить команду, вызвавшую ошибку. И разумеется, все это должно быть сделано с использованием минимума команд, поскольку ошибка отсутствия записи в TLB случается намного чаще, чем ошибка отсутствия страницы в таблице.

Как ни странно, но при умеренно большом TLB (скажем, 64 записи) программное управление этим буфером оказывается вполне эффективным средством снижения количества ошибок отсутствия нужной записи. Основным преимуществом такого управления является существенное упрощение диспетчера памяти, освобождающее большую площадь микросхемы центрального процессора под кэш и другие функциональные узлы, способные повысить производительность. Программное управление TLB рассмотрено в работе Uhlig et al., 1994.

Для улучшения производительности на машинах, осуществляющих программное управление TLB, в давние времена были разработаны различные стратегии. В одном из подходов прилагались усилия как по сокращению ошибок отсутствия нужных записей в TLB, так и по уменьшению издержек при возникновении этих ошибок (Bala et al., 1994). Иногда для сокращения количества ошибок отсутствия нужных записей в TLB операционная система может воспользоваться своей интуицией для определения того, какие из страниц, скорее всего, будут востребованы в следующую очередь, и заранее загрузить касающиеся их записи в TLB. Например, когда клиентский процесс отправляет сообщение серверному процессу на той же самой машине, высока вероятность того, что сервер вскоре также будет задействован. Располагая этими сведениями во время обработки системного прерывания, занимающегося отправкой (send), система может заодно с этим проверить, присутствуют ли в карте отображения страницы кода, данных и стека сервера, и отобразить их до того, как появятся предпосылки для возникновения ошибки TLB.

Обычный способ аппаратной или программной обработки ошибки TLB заключается в переходе к таблице страниц и осуществлении операций индексации для определения местоположения затребованной страницы.

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

При использовании программного управления TLB важно понять разницу между различными видами ошибок отсутствия записей. Программная ошибка отсутствия происходит, когда страница, к которой идет обращение, отсутствует в TLB, но присутствует в памяти. Для ее устранения требуется лишь обновление TLB и не требуется выполнение операций ввода-вывода с обращением к диску. Обычно устранение программной ошибки отсутствия требует 10-20 машинных команд и может быть завершено за несколько наносекунд. В отличие от нее аппаратная ошибка отсутствия происходит, когда сама страница отсутствует в памяти (и, разумеется, запись о ней отсутствует в TLB). Для получения страницы требуется обращение к диску, занимающее в зависимости от используемого диска несколько миллисекунд. Аппаратная ошибка отсутствия обрабатывается почти в миллион раз медленнее, чем программная. Просмотр отображения в иерархии таблиц страниц называется просмотром таблиц страниц (page table walk).

Фактически дела обстоят еще хуже. Ошибка отсутствия носит не только программный или аппаратный характер. Некоторые ошибки отсутствия имеют по сравнению с другими ошибками отсутствия больше программный (или больше аппаратный) характер. Например, при просмотре таблицы страниц нужная страница в таблице страниц процесса отсутствует, и программа, таким образом, сталкивается с ошибкой отсутствия страницы. В данной ситуации существуют три возможности. Во-первых, страница фактически может находиться в памяти, но отсутствовать в таблице страниц процесса. Например, страница может быт взята с диска другим процессом. В таком случае нужно вместо нового обращения к диску просто соответствующим образом отобразить страницу в таблицах страниц. Это скорее программная ошибка отсутствия страницы, известная как легкая ошибка отсутствия страницы (minor page fault). Во-вторых, если страницу нужно брать с диска, это будет считаться серьезной ошибкой отсутствия страницы. В-третьих, вполне возможно, что программа просто обратилась по неверному адресу и в TLB вообще не нужно добавлять никакого отображения. В таком случае операционная система обычно прекращает выполнение программы с выдачей ошибки сегментации. И только в этом случае программа действительно делает что-то неправильно. Во всех остальных случаях ценой некоторой потери производительности все автоматически исправляется оборудованием и/или операционной системой.

3.3.4.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Программное управление буфером TLB:

  1. Том ДеМарко. Вальсируя с Медведями Управление рисками в проектах по разработке программного обеспечения, 2005
  2. Программное обеспечение
  3. 2.4.1. Программный анализатор
  4. КОНЦЕПЦИЯ ПРОГРАММНО - РОЛЕВАЯ
  5. Богомазова Г.Н.. Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования, 2015
  6. 2.4.1. Программный анализатор
  7. Перевод программных вопросов в анкетные
  8. Эд САЛЛИВАН. ВРЕМЯ — ДЕНЬГИ Создание команды разработчиков, программного обеспечения, 2001
  9. Статья 1040. Обращение взыскания на имущество, переданное в управление, по требованию кредитора установщика управления
  10. Глава 39 О ПРОГРАММНЫХ СВОЙСТВАХ ХУДОЖЕСТВЕННОЙ ЛИТЕРАТУРЫ
  11. Алистэр Коуберн. Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения, 1999
  12. § 3. Право управления предприятием как особый вид абсолютных прав. Право полного и ограниченного управления (п. 1774-1776)
  13. УПРАВЛЕНИЕ ВРЕМЕНЕМ VERSUS УПРАВЛЕНИЕ СОБОЙ
  14. Статья 361-1. Создание, использование и распространение или сбыта вредных программных или технических средств, а также их распространение или сбыт
  15. § 4. Правопреемство как следствие приобретения права управления предприятием. Условия отчуждения и приобретения права управления предприятием (п. 1777-1782)
  16. Демократизация управления телевидением
  17. Управление термами
  18. Управление деканатами
  19. Статья 1029. Договор управления имуществом