Как использует часть ядра в пространстве виртуальных памяти процессов Linux?

Это похоже на prezto, определяющее функцию, отменяющую diff . У него вполне может быть способ отключить это, но я не знаю, что это такое (, но ericbn знает! ). У вас есть несколько вариантов:

  • / usr / bin / diff или команда diff будет запускать команду diff , а не функцию.
  • unset -f diff удалит функцию diff . Вы можете поместить это в свою конфигурацию оболочки.
  • Как вы обнаружили, если colordiff установлен, он будет использоваться функцией вместо git diff .
  • Наконец, вы можете удалить или переименовать функцию из самого файла.

Это действительно похоже на ошибку в prezto.

9
29.09.2018, 10:31
1 ответ
  1. Отображение ядра существует в первую очередь для целей ядра, а не пользовательских процессов». С точки зрения ЦП, любой адрес физической памяти, который не отображается как линейный адрес, может также не существовать. Но ЦП должен иметь возможность обращаться к ядру :для обслуживания прерываний, обработки исключений... Он также должен иметь возможность обращаться к ядру, когда пользовательский процесс выполняет системный вызов (. это может произойти разными способами, поэтому я не буду вдаваться в подробности ). На большинстве, если не на всех архитектурах, это происходит без возможности переключения таблиц страниц — см., например, SYSENTER. Так что, как минимум, точки входа в ядро ​​должны постоянно отображаться в текущем адресном пространстве.

  2. Выделения ядра являются динамическими, а адресное пространство — нет. На 32 -бит x86 доступны различные разделения, такие как разделение 3/1 ГиБ, показанное на вашей диаграмме; на 64 -бит x86 верхняя половина адресного пространства зарезервирована для ядра (см. карту памяти в документации ядра ). Этот раскол не может двигаться.(Обратите внимание, что библиотеки загружаются в пространство пользователя. Модули ядра загружаются в пространство ядра, но опять же это изменяет только распределение, а не разделение адресного пространства.)

  3. В пользовательском режиме существует единое сопоставление для ядра, совместно используемое всеми процессами. Когда изменяется сопоставление боковой страницы ядра -, это изменение отражается повсюду.

    Когда KPTI включен, ядро ​​имеет свои собственные частные сопоставления, которые не отображаются при запуске кода пробела пользователя -; поэтому с KPTI есть два сопоставления, и изменения в ядре -приватном не будут видны пользователю -пространство (, в чем и заключается весь смысл KPTI ).

    Карта памяти ядра всегда отображает все ядро ​​(в режиме ядра при запуске KPTI ), но это не обязательно одно -на -одно — на 64 -бит x86 например включает полная карта физической памяти, поэтому все физические адреса ядра отображаются как минимум дважды.

16
20.08.2021, 11:11

Теги

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