как Linux обновляет таблицу страниц после контекстного переключения

Отчасти само собой разумеется, что, если Вы копируете и восстанавливаете все, затем все будет там. Также cpio нечетный выбор, tar лучше.

1
14.04.2013, 21:06
2 ответа

Технически, "process1" не знает это. Существует ряд таблиц страниц для каждого процесса. Ядро знает, какой процесс оно переключит на и передвинет таблицы страниц. Часть этих таблиц страниц является ядром, которое совместно используется ВСЕМИ процессами (так, определенная часть диапазона адресов, обычно в диапазоне 0xc0000000 к 0xffffffff - хотя не ВСЕ те страницы будут присутствовать). Как правило, этот общий раздел достигается путем простого высказывания всего мнения наборов таблицы страниц в том же общем разделе "битов таблицы страниц ядра".

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

Точно то, как это работает, зависит от архитектуры, для которой создается ядро, но например в x86 (32 и 64 бита), CR3 является регистром, который указывает на текущую таблицу страниц. Таким образом для каждого процесса, существует указатель на таблицу страниц, и это загружается в CR3 как часть переключателя к новому процессу, точно так же, как значения регистра (по крайней мере, указатель вершины стека) восстанавливаются для процесса 1, когда это переключается в.

3
27.01.2020, 23:21
  • 1
    ! Я все еще не понимаю: Если Process1 продолжает использовать поврежденный кадр (потому что таблица страниц никакого обновленного Process1, когда Process2 изменяет содержание кадра), это откажет, но это не делает. Таким образом, я предполагаю, что ОС должна поддержать некоторую информацию о текущем владельце кадра, не так ли? –  cody 14.04.2013, 23:05
  • 2
    Таблица страниц содержит кадры, и каждый кадр принадлежит одному (или больше) процессы. Так обработайте 1, имеет, это - уникальный набор страниц. Структурируйте 1 в процессе 1, отличается от кадра 1 в процессе 2 (если мы не совместно используем память между процессами, в этом случае точки таблицы страниц в той же физической части памяти и в процессе 1 и в процессе 2 pagetable) [Технически, виртуальный кадр 1, вероятно, не доступен, поскольку это - часть "защиты доступа к нулевому указателю"] –   14.04.2013, 23:11
  • 3
    Вы избегаете или не можете понять то, что он спрашивает Mat. Вопрос состоит в том, если некоторая страница Процесса 1 выселена и если соответствующий кадр заменяется содержанием некоторой другой страницы Процесса 2, то, как Процесс 1 будет знать, что кадр, что его использование для выселенной страницы не допустимо? Я имею в виду, как ОС отслеживает эти выселенные страницы? –  Muhammad Razib 17.03.2014, 22:23
  • 4
    Каждый процесс имеет свой собственный УНИКАЛЬНЫЙ набор кадров (записи таблицы страниц). Нет никакого знания в рамках процесса 1 из процесса 2 страницы, и процесс 2 не знает о процессе 1 страницы. Виртуальный адрес X в процессе 1 жизнь на другом физическом адресе, чем процесс 2 версия адреса X. В большинстве процессоров значение имеется путем обновления регистра, который содержит основу pagetables того процесса. Если это не достаточно ясно, то формулируйте вопрос по-другому. (обратите внимание, что я не часто посещаю часть Linux/Unix Stackexchage, таким образом, я, вероятно, не буду видеть нового вопроса). –  Mats Petersson 17.03.2014, 23:32

Вопрос о конфликте страницы, когда переключение контекста двух процессов, а не о адресе виртуальной памяти Пространство (адресное пространство виртуальной памяти уникально для каждого процесса, это не новости.). Эта ссылка на переполнении стека имеет точно такой же вопрос и точный ответ. https://stackoverflow.com/questions/16581490/how-does-kernel-know-which-pages-in-the-virtual-address-space-Correspons-to-As?lq=1

1
27.01.2020, 23:21

Теги

Похожие вопросы