Количество обращений к памяти с пейджингом по требованию
Я изучал "Концепции операционных систем", и книга, на которую я ссылаюсь, - "Концепции операционной системы", написанные Питером Б. Гальвином, Грегом Ганге и Авраамом Зильбершатцем.
В главе "Виртуальная память" книга начинает рассказывать о пейджинге и количестве обращений к памяти, которые требуются системе для чтения данных, хранящихся в определенном кадре в памяти, по логическому адресу. Автор утверждает, что при наличии таблицы страниц в основной памяти системе потребуются два обращения к памяти для чтения данных, хранящихся во фрейме. Первый доступ осуществляется к таблице страниц для чтения правильного номера кадра, а следующий доступ - для чтения байта / слова из кадра.
После нескольких разделов книга рассказывает о пейджинге по требованию и неисправности страницы. Автор заявляет, что в случае отсутствия страницы сброса необходим один доступ к памяти, а в случае сбоя страницы мы рассмотрим время службы сбоя страницы (которое включает в себя время подкачки, время выгрузки, один доступ к памяти и т. Д.) И представляет читатели с формулой
Эффективное время доступа = (1-p) x одно время доступа к памяти + p x сервисное время отказа страницы
где p = частота отказов страницы
Я не могу понять, почему автор предполагает, что в случае отсутствия ошибки страницы потребуется только один доступ к памяти. Применив метод мышления, используемый в стандартной схеме подкачки страниц, ранее представленной теми же авторами, нам нужен один доступ к памяти для чтения таблицы страниц, а другой - для чтения данных из фрейма.
Это потому, что мы говорим о временном интервале после доступа к таблице страниц? Тогда почему тот же стандарт расчета не относится к стандартной версии подкачки?
1 ответ
Примечание: я не читал / не видел эту книгу.
Для учебного материала; если автор точно описывает реальность со всеми деталями, читатель просто запутается и не сможет учиться. Чтобы обойти это, авторы упрощают (опускают детали и игнорируют реальность), вводя различные концепции, так что читатель может изучать каждую концепцию по одному, накапливая знания, необходимые для понимания сложности реальности.
Проблема в том, что разные упрощения имеют смысл на разных этапах, и авторы являются людьми (несовершенными), поэтому иногда упрощения, которые были полезны в какой-то момент (в одной главе), вступают в противоречие с упрощениями, которые полезны в более поздний момент (в другой главе)).
Например, я мог бы (изначально) сказать кому-то "каждый доступ из виртуальной памяти включает в себя второе извлечение памяти из ОЗУ для определения перевода", чтобы помочь им понять, как работают таблицы страниц и что (потенциально) возникают проблемы с производительностью (вдвое больше) доступ к памяти). Затем я мог бы представить концепцию "буферов перевода в сторону" (после того, как читатель поймет, как работают таблицы страниц и узнает о проблеме, для решения которой предназначены TLB). Затем я мог бы объяснить, что часто реальные системы имеют несколько уровней таблиц страниц (например, в 64-битной 80x86 это четыре уровня, потенциально предполагающих 4 обращения к памяти для определения перевода) и что могут быть задействованы кэши / буферы более высокого уровня (а не только TLB, которые кэшируют окончательные переводы). В этом случае мое первоначальное утверждение ("каждый доступ из виртуальной памяти включает в себя второе извлечение памяти из ОЗУ для определения перевода") является преднамеренной ложью (упрощением), чтобы избежать сложности такого утверждения, как "каждый доступ из виртуальной памяти может или может не включать одну или несколько дополнительных выборок из некоторых или всех уровней таблиц страниц "(что поначалу слишком запутанно для новичков, поскольку создает множество вопросов, на которые у них пока нет ответов).
Я не могу понять, почему автор предполагает, что в случае отсутствия ошибки страницы потребуется только один доступ к памяти.
Одна реальность (для одного реального процессора 80x86 в длинном режиме, но не для всех процессоров 80x86 в длинном режиме и не для всех 80x86 в других режимах, если виртуализация не используется), для чтения из виртуальной памяти, которое не приводит к сбою страницы, если доступ не выровнен / не разделен по границам страницы (где ЦПУ пришлось бы делать все это дважды, чтобы получить байты с 2 разных страниц и объединить байты):
* if the translation is not in the TLB, then:
* if the area is not in the "page directory cache"
* fetch the PML4 entry to determine address of PDPT (try L1 cache, then L2 cache, then L3 cache, then RAM)
* do access checks based on flags in PML4 entry
* fetch the PDPT entry to determine address of PD (try L1 cache, then L2 cache, then L3 cache, then RAM)
* do access checks based on flags in PDPT entry
* insert data into "page directory cache"
* if the area is in the "page directory cache"
* do access checks based on flags in "page directory cache entry"
* fetch the PD entry to determine address of PT (try L1 cache, then L2 cache, then L3 cache, then RAM)
* do access checks based on flags in PD entry
* fetch the PT entry to determine address of page (try L1 cache, then L2 cache, then L3 cache, then RAM)
* do access checks based on flags in PT entry
* insert data into TLB (including setting the "accessed" flag in the page table entry)
* if the translation is in the TLB, then:
* do access checks based on flags in "TLB entry"
* do the "physical address = physical address of page + offset in page" calculation
* read the data for the physical address (try L1 cache, then L2 cache, then L3 cache, then RAM)
Для этой реальности (с упомянутыми ограничениями); число выборок из ОЗУ может быть любым от нуля до 5.
Можете ли вы понять, почему автор (пытаясь объяснить ошибки страниц и не пытаясь объяснить стоимость перевода) может захотеть избежать показа чего-то подобного и может упростить (предполагая, что вместо этого требуется только одна выборка, поскольку перевод находится в TLB)?
Основным источником вашей проблемы является то, что вы читаете книгу, которая подходит только для облицовки кошачьей коробки. То, что вы описываете, - это бессмысленная тарабарщина, которую используют учебники, чтобы создать путаницу среди студентов. Это не случай чрезмерного упрощения, потому что авторы, по-видимому, добавляют бессмысленную формулу для времени доступа.
Формула как это
Эффективное время доступа = (1-p) x одно время доступа к памяти + p x сервисное время отказа страницы
это все фекальные отходы крупного рогатого скота без каких-либо оснований в реальности.
Автор заявляет, что когда таблица страниц присутствует в основной памяти, системе потребуется два обращения к памяти для чтения данных, хранящихся в кадре.
Процессор должен преобразовывать логические адреса в физические адреса, используя таблицы страниц. Предполагая, что в CPU нет кэширования, CPU считывает таблицу страниц для каждого обращения к памяти.
Число считываний зависит от формата таблицы страниц, используемого ЦП.
Предположим, у вашего процесса есть многоуровневая таблица страниц. В этом случае процессор должен выполнить чтение для каждого уровня таблицы.
Если у вас есть ЦП, который имеет отдельные линейные системные и пользовательские таблицы страниц с пользовательскими таблицами в логических адресах, каждый доступ к системному пространству требует одного чтения из памяти, а каждый доступ к пользовательскому пространству требует как минимум двух обращений к памяти и может, в Факт, вызвать ошибку страницы. Первое чтение - это таблица системных страниц, чтобы найти запись таблицы пользовательских страниц. Второе чтение - это таблица страниц пользователя. Третий к данным.
В действительности, каждый процессор на планете выполняет кэширование таблицы страниц, поэтому отдельное чтение не требуется (все время).
Я не могу понять, почему автор предполагает, что в случае отсутствия ошибки страницы потребуется только один доступ к памяти.
Похоже, что книга не является последовательной в ее BS.
Реальность такова, что логический перевод памяти требует ряда шагов. Однако то, что эти шаги, зависит от состояния процессора, что непредсказуемо. Эти шаги выполняются незаметно за кулисами, и вам даже не нужно понимать их все, чтобы понимать операционные системы.
Что вам нужно знать в реальном мире, так это то, что ЦП преобразует логические адреса в физические. Если процессор не может выполнить этот перевод, он вызывает сбой страницы.