Являются ли модули ядра Linux своего рода выгружаемым пулом системы Linux?

Esto no usa grep, pero como punto de referencia, podría usar el operador condicional =~de bash para comparar el primer argumento del script con la clase de expresión regular para un name, que está definido por el ] Manual de referencia de Bash como:

A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names.

$ cat isvarname
#!/bin/bash
if [ "$#" -ne 1 ]
then
   echo "Usage: $0 a-string"
   exit 1
fi

if [[ "$1" =~ ^[[:alpha:]_][[:alnum:]_]*$ ]]
then
  echo yes
else
  echo no
fi

5
22.07.2019, 21:18
2 ответа

Подкачка страниц памяти (Вы называете это "пейджинг" )и загрузка/выгрузка модулей ядра Linux — две совершенно разные функции.

Модуль ядра Linux может быть загружен в ядро ​​-, после чего он становится частью ядра. Цель здесь состоит в том, чтобы приспособить ядро ​​к данному аппаратному обеспечению. Например, существуют сотни типов сетевых карт и множество модулей ядра, поддерживающих эти карты -, но на любой конкретной машине в любой момент у вас будет только один тип сетевой карты. Linux выбирает правильный модуль ядра для этой карты и загружает его, оставляя все остальные модули во внешней памяти.

Для получения дополнительной информации о модулях ядра, пожалуйста, прочитайте здесь .

5
27.01.2020, 20:32

Никакая часть ядра Linux не может быть выгружена, даже те части, которые поступают из модулей.

Модуль ядра может быть загружен и (, если модуль его поддерживает, )может быть выгружен. Это всегда происходит из явного запроса от пользовательского процесса с системными вызовами init_moduleи delete_module(обычно, через утилиты insmodили modprobeдля загрузки и через rmmodдля выгрузки ).

Когда модуль загружен, он становится частью ядра, как и любая другая часть ядра. В частности, невозможно изолировать память, используемую конкретным модулем. Ядро отслеживает, какая часть памяти содержит код конкретного модуля, но не отслеживает, где модуль может хранить данные. В конце концов, модуль может модифицировать любую структуру данных ядра.

Модуль потенциально может добавлять некоторый код в любую подсистему ядра. Большинство модулей являются аппаратными драйверами, но некоторые не являются (, например. они могут обеспечивать функции безопасности, файловые системы, сетевые функции и т. д. ). Если бы данные или код, используемый модулем, можно было бы выгрузить, остальная часть ядра должна была бы загружать их по мере необходимости, что сильно усложнило бы дизайн системы. Ядро также должно гарантировать, что никакая часть памяти, которая была выгружена, никогда не потребуется для ее обратного выгрузки, что сложно. Что, если файл подкачки находится в файле подкачки в сетевой файловой системе, а модуль обеспечивает функциональность брандмауэра, связанную с обменом данными с сервером, на котором хранится файл?

Можно полностью выгрузить модуль, потому что задача модуля — предоставить код, гарантирующий, что модуль ни для чего не нужен. Ядро запускает функцию выхода модуля,и выгружает модуль только в том случае, если эта функция сообщает, что модуль можно безопасно выгрузить. Функция выхода должна освободить любую оставшуюся память данных, которая «принадлежит» модулю (, т. е. данные, которые нужны модулю, но не нужны никакой другой части ядра ), и должна проверить, что код в модуле не зарегистрирован. звонить, когда что-то происходит. Невозможно сохранить данные модуля для замены :модуль можно удалить из ОЗУ только в том случае, если в нем не осталось данных.

11
27.01.2020, 20:32

Теги

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