Это похоже на prezto, определяющее функцию, отменяющую diff
. У него вполне может быть способ отключить это, но я не знаю, что это такое (, но ericbn знает! ). У вас есть несколько вариантов:
/ usr / bin / diff
или команда diff
будет запускать команду diff
, а не функцию. unset -f diff
удалит функцию diff
. Вы можете поместить это в свою конфигурацию оболочки. colordiff
установлен, он будет использоваться функцией вместо git diff
. Это действительно похоже на ошибку в prezto.
Отображение ядра существует в первую очередь для целей ядра, а не пользовательских процессов». С точки зрения ЦП, любой адрес физической памяти, который не отображается как линейный адрес, может также не существовать. Но ЦП должен иметь возможность обращаться к ядру :для обслуживания прерываний, обработки исключений... Он также должен иметь возможность обращаться к ядру, когда пользовательский процесс выполняет системный вызов (. это может произойти разными способами, поэтому я не буду вдаваться в подробности ). На большинстве, если не на всех архитектурах, это происходит без возможности переключения таблиц страниц — см., например, SYSENTER
. Так что, как минимум, точки входа в ядро должны постоянно отображаться в текущем адресном пространстве.
Выделения ядра являются динамическими, а адресное пространство — нет. На 32 -бит x86 доступны различные разделения, такие как разделение 3/1 ГиБ, показанное на вашей диаграмме; на 64 -бит x86 верхняя половина адресного пространства зарезервирована для ядра (см. карту памяти в документации ядра ). Этот раскол не может двигаться.(Обратите внимание, что библиотеки загружаются в пространство пользователя. Модули ядра загружаются в пространство ядра, но опять же это изменяет только распределение, а не разделение адресного пространства.)
В пользовательском режиме существует единое сопоставление для ядра, совместно используемое всеми процессами. Когда изменяется сопоставление боковой страницы ядра -, это изменение отражается повсюду.
Когда KPTI включен, ядро имеет свои собственные частные сопоставления, которые не отображаются при запуске кода пробела пользователя -; поэтому с KPTI есть два сопоставления, и изменения в ядре -приватном не будут видны пользователю -пространство (, в чем и заключается весь смысл KPTI ).
Карта памяти ядра всегда отображает все ядро (в режиме ядра при запуске KPTI ), но это не обязательно одно -на -одно — на 64 -бит x86 например включает полная карта физической памяти, поэтому все физические адреса ядра отображаются как минимум дважды.