Да, причина, что важные составляющие (такие как мм) не могут быть загружаемыми модулями, состоит в том, потому что они важны - ядро не будет работать без них.
Я не могу найти ссылки, утверждая, что эффекты фрагментации памяти относительно загружаемых модулей являются значительными, но эта часть практического руководства LLKM могла бы быть интересным чтением для Вас.
Я думаю, что вопросом является действительно неотъемлемая часть проблемы фрагментации памяти обычно, которая происходит на двух уровнях: фрагментация реальной памяти, которой подсистема мм ядра управляет, и фрагментация виртуального адресного пространства, которое может произойти с очень крупными приложениями (то, которое я предположил бы, является главным образом результатом того, как они разработаны и скомпилированы).
Относительно фрагментации реальной памяти я не думаю, что это возможно в более прекрасном, чем размер страницы (4 КБ) гранулярность. Таким образом, при чтении 1 МБ фактически непрерывного пространства, которое является на самом деле 100%, фрагментированными в 1 024 страницы, может быть 1 000 дополнительных незначительных включенных операций. В том бите практического руководства мы читаем:
Основное ядро содержит в его дорогом непрерывном домене большое пространство допускающей повторное использование памяти - пул kmalloc. В некоторых версиях Linux загрузчик модуля пытается сначала получить непрерывную память от того пула, в который можно загрузить LKM и только если достаточно большое место не было свободным, перейдите к пространству vmalloc. Andi Kleen отправила код, чтобы сделать это в Linux 2.5 в октябре 2002. Он утверждает, что различие находится в диапазоне на несколько процентов.
Здесь пространство vmalloc, которое является, где приложения пространства пользователя находятся, было бы этим, которое потенциально подвержено фрагменту в страницы. Это - просто действительность современных операционных систем (они все управляют памятью через виртуальное обращение). Мы могли бы вывести из этого, что виртуальное обращение могло представить потерю производительности "нескольких процентов" в пространстве пользователя также, но поскольку виртуальное обращение необходимо и неизбежно в пространстве пользователя, это только относительно чего-то абсолютно теоретического.
Существует возможность для дальнейшей фрагментации соединения фрагментацией виртуального адресного пространства процесса (в противоположность реальной памяти позади него), но это никогда не относилось бы к модулям ядра (тогда как последний абзац, по-видимому, мог).
Если Вы хотите мое мнение, это не стоит много рассмотрения. Следует иметь в виду, что даже с очень модульным ядром, наиболее используемые компоненты (фс, сети, и т.д.) будут иметь тенденцию быть загруженными очень рано и оставаться загруженными, следовательно они, конечно, будут в непрерывном регионе реальной памяти, если это имеет значение (который мог бы быть причиной для не, бессмысленно загружают и разгружают модули).
Обновление
Выполнение следующей команды:
дает строчную линию:
Таким образом каким-то образом кажется, что в данном случае [1122636]su[1122637] прогрызает лишний [1122638]--[1122639], не передавая его на баш, возможно, из-за ошибки (или, по крайней мере, из-за недокументированного поведения). Однако это не съест больше двух аргументов [1122640]--[1122641]:
pip install greenlet
. Если у вас уже есть значения, которые вы подаете оболочке, вам не нужно [1122702]--[1122703] три раза. Параметры оболочки имеют [1122704] значение [1122705] - всегда, в любое время, а не только при вызове [1122706] (за исключением $0 и -i):
git clone https://github.com/gevent/gevent.git
И все это цитирование оболочки может ввести в заблуждение. Это немного упрощает ситуацию:
python setup.py build
Аргументы родительской оболочки составляют [1122708]set[1122709] to 4, 5, и 6 и затем передаются в подоболочку, вызываемую [1122710]su[1122711] через позиционный параметр [1122712] "$@array".
python setup.py install
Обратите внимание, как я [1122714]( subhell )[1122715] выполнил вышеприведенную команду - я делаю это, потому что не хочу вмешиваться в мое текущее окружение оболочки - потому что я могу случайно изменить что-то, чего бы я не хотел, если бы сделал это с помощью [1122716]set.
ОТВЕТ:
Прежде всего, ваша Unix-система работает с файлами - разрешениями на доступ к файлам, содержимым файлов, атрибутами файлов. Так или иначе, каждый используемый вами объект данных может [1122718](и, по крайней мере, на мой взгляд, должен)[1122719] быть адресован как файл. Переадресация указывает на файл - вот и все. A [1122720]< В приведенных ниже комментариях запрашивающая сторона отмечает, что при попытке использовать этот метод в качестве пользователя [1122722]root[1122723] ему выдается ошибка разрешения. Когда я ответил, я предложил ему [1122724]chown[1122725] или [1122726]chgrp[1122727] специальный файл [1122728]/dev/fd/${num}[1122729], но это, вероятно, не самый лучший метод. Причина, по которой он сталкивается с этой проблемой, заключается в том, что [1122730] root[1122731] получает [1122732] разрешения на чтение [1122733], но не выполняет [1122737] разрешения. Вы можете легко справиться с этим, просто избегая вызова [1122738]exec[1122739]. Вместо вызова файла [1122740]/dev/fd/${num}[1122741] непосредственно в командной строке выполните: Использование двух heredocs может помочь с экранированием. Вот что происходит в каждом случае: НЕ УСТАНОВЛЕНО В [1122742]< OUTPUT SET [1122744] "$@"[1122745]В [1122746]< SET [1122748] "$@"[1122749]И БОЛЕЕ В [1122750]< OUTPUT telnet your.mail.server.com 143
. login username password
. list "" "*"
. select INBOX
. fetch 1:* flags
. fetch 1 rfc822.text