Сбросить TLB на контекстном переключателе

Это может зависеть от ОС, но в целом, насколько я понимаю, при возникновении ошибки страницы (нужной страницы нет в основной памяти) ОС дает указание ЦП прочитать страницу с диска, и мне интересно, отправляет ли ОС другую процесс во время дискового ввода-вывода? если это произойдет, произойдет полная очистка TLB при переключении контекста, правильно?


person peter    schedule 28.02.2015    source источник


Ответы (2)


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

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

person harold    schedule 28.02.2015
comment
понятно. Причина, по которой я спросил об этом, заключается в том, что после завершения ввода-вывода процессор обновит таблицу страниц, а также TLB, поэтому полная очистка, я думаю, не имеет смысла. - person peter; 01.03.2015
comment
@peter, это все равно будет работать, но будет медленнее, так как у вас будет много дополнительных промахов TLB, но на самом деле ничего не пойдет не так. - person harold; 01.03.2015

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

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

Источник: https://developer.arm.com/documentation/den0024/a/The-Memory-Management-Unit/Context-switching

person Amitesh Anand    schedule 11.07.2021