Назначение адресно-разделенных идентификаторов (ASID) - PullRequest
0 голосов
/ 09 октября 2018

В настоящее время я изучаю операционные системы А. Зильбершаца, П. Гальвина, Дж. Ганье.

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

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

Выше приведена цитата из учебника, объясняющая ASID.

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

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

Что меня интересует, так это то, что когда ASID используется для отказа от процесса, не должен ли он перехватывать, а не пропускать TLB?TLB miss перенаправит процесс в таблицу страниц, где логический адрес процесса сможет быть сопоставлен с определенным адресом в основной памяти.

Пожалуйста, помогите мне, если я неправильно понимаю.

Спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

Допустим, в вашей системе запущены два процесса.2-я страница процесса А сопоставлена ​​с фреймом 100-й страницы, а 2-я страница процесса сопоставлена ​​с фреймом 200-й страницы.

Так что теперь MMU должен найти страницу № 2, но не хочет читатьснова таблицы страниц.Идет ли речь о фрейме страницы 100 или фрейме страницы 200?

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

Другой - назначить какой-то уникальный идентификатор для каждого процесса и включить его в записи кэша TLB.

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

Для перевода логической страницы #X к физическому фрейму страницы:

  1. Найдите в TLB #X.Если нет, перейдите к таблице страниц.
  2. [# X существует] Есть ли запись для #X с ASID, который соответствует текущему процессу?Если нет, перейдите к таблице страниц.
  3. Используйте отображение страниц в TLB

Что мне интересно, когда ASID используется для отказа от процесса,Разве он не должен перехватывать вместо промаха TLB?

Тогда вы получите ловушки при первом обращении к странице, и программа завершится сбоем.

...