Европейский Университет в Санкт-Петербурге
Опубликован: 19.10.2005 | Доступ: свободный | Студентов: 1764 / 169 | Оценка: 4.31 / 3.82 | Длительность: 18:28:00
Лекция 2:

Настройка ядра ОС, установка программ и обновлений

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Аннотация: Лекция посвящена настройке ядра системы, как для оптимизации работы, так и с целью изменения содержимого ядра и его параметров, например, при необходимости установить драйвер нового устройства или изменить размер системной таблицы семафоров, процедуру установки программ и обновлений (patches) в системе. Рассматривается возможность компиляции исходных текстов программ, администрирование пакетов программ.

Что настраивать в ядре?

Ядро состоит из статической части и динамической части ( модулей ). Кроме того, в ядре располагаются многочисленные таблицы, размер которых задается параметрами ядра. Фактически, настройка ядра сводится к следующим задачам:

  1. определение (или переопределение) параметров ядра (например, числа доступных семафоров в ядре);
  2. принудительное добавление указанных модулей в ядро;
  3. принудительное запрещение загрузки указанных модулей.

Частным случаем задачи (2) является добавление и настройка драйверов устройств.

Сейчас мы рассмотрим, как именно следует выполнять эти задачи, включая те или иные команды в файл конфигурации ядра /etc/system.

Изменение файла /etc/system

Конфигурация ядра Solaris, которая определяет технические параметры системы, может быть изменена в файле /etc/system. Файл содержит настройки ядра, отличные от принятых по умолчанию. Этот файл используется при загрузке системы. Изменения, внесенные в /etc/system, оказывают действие на конфигурацию ядра после перезагрузки.

Помните, что перед внесением изменений в любой файл конфигурации следует сделать его резервную копию - про запас.

Файл /etc/system содержит команды, которые представляют собой список пар имя=значение. Строки комментариев начинаются с символа "*" (звездочка) или "#" (решетка). Все команды, за специально оговариваемыми исключениями, можно давать в любом регистре как строчными, так и заглавными буквами. Длина команды не должна превышать 80 символов.

В командах перед именем параметра указывается пространство имен модуля, к которому относится параметр, например, semsys для изменения параметров подсистемы семафоров в приведенном ниже примере:

set semsys:seminfo_semmni=100

Следующие пространства имен являются общими для всех платформ под Solaris:

  • drv - драйверы устройств;
  • exec - модули поддержки разных форматов исполняемых файлов, а именно:
    • aoutexec - модуль только для SPARC;
    • coffexec - модуль только для Intel;

    для обеих платформ:

    • elfexec
    • intpexec
    • javaexec
  • fs - модули этого пространства имен - это драйверы файловых систем;
  • sched - реализация алгоритма планировщика задач;
  • strmod - модули STREAMS;
  • sys - модули исполнения системных вызовов;
  • misc - другие модули, не попавшие в указанные выше категории.

Только для платформы SPARC реализованы модули:

  • dacf - модули автонастройки устройств;
  • cpu - модули процедур ядра, связанных с конкретными процессорами.

Фактически, каждое пространство имен представляет собой каталог, в котором находится тот или иной модуль, например, модуль ipc находится в пространстве имен misc и располагается в каталоге /kernel/misc. Загрузка такого модуля выполняется командой

modload misc/ipc

В файле /etc/system допустимы следующие команды:

  • exclude: <namespace>/<modulename> - запрет загрузки модуля ;
  • include: <namespace>/<modulename> - разрешение загрузки модуля, любые модули по умолчанию разрешено загружать;
  • forceload: <namespace>/<modulename> - требовать загрузки модуля при инициализации ядра, в отличие от принятой по умолчанию загрузки по мере необходимости;
  • rootdev: <device name> - установить иное устройство для загрузки, чтобы изменить принятое по умолчанию при загрузке или установленное командой boot среды OpenBoot;
  • rootfs: <root filesystem type> - указать тип файловой системы загрузочного устройства;
  • moddir: <first module path>[[{:, }"second ...>]...] - установить список каталогов, в которых следует искать модули для загрузки;
  • set [<module>:]<symbol> {=, |, &} [~][-]<value> - установить параметр ядра в указанное значение; если параметр относится к конкретному модулю, в команде следует указать явно этот модуль (см. выше пример с установкой параметров семафоров в ядре).

Некоторые настраиваемые параметры ядра

Здесь мы рассмотрим параметры, влияющие на максимальное количество процессов, которые можно запустить в системе, и на максимальное количество процессов, которые может запустить один пользователь.

Основным параметром является maxusers, который влияет на значения параметров max_nprocs и maxuprc.

Параметр maxusers в прошлом определял максимальное разрешенное количество одновременно работающих в системе пользователей. Размер многих таблиц в ядре вычислялся с использованием этого параметра. В настоящее время старое значение этого параметра утратило смысл, но некоторые параметры ядра продолжают базироваться на maxusers. Это максимально допустимое количество процессов в системе, размер структур квотирования в системе и размер кэша имен каталогов (directory name lookup cache - DNLC). По умолчанию maxusers равно меньшему из двух чисел - объему памяти системы в мегабайтах или 2048. Может принимать любое значение от 1 до 2048, при явной установке в /etc/system - от 1 до 4096, но следует указывать разумные значения. Значение maxusers явно мало, если система выдает сообщения

out of processes

Значение maxusers по умолчанию скорее всего будет велико для систем с малым количеством запущенных процессов и большим объемом памяти - серверов баз данных, вычислительных серверов и т.п.

Еще одним важным параметром является max_nprocs: он ограничивает максимальное количество процессов, которые можно одновременно запустить в системе. Влияет на вычисление значения maxuprc. Кроме того, значение max_nprocs влияет на:

  • вычисление размеров кэша имен каталогов (DNLC);
  • резервирование структур, обеспечивающих квотирование дискового пространства (если не указано явно значение ndquot);
  • проверку того, что объем памяти, занятый под семафоры, не превышает системных ограничений;
  • настройку подсистемы Hardware Address Translation для систем x86 и sun4m.

Значение max_nprocs по умолчанию - 10 + (16 x maxusers), диапазон значений - от 266 до максимально возможного идентификатора процесса ( maxpid ). Изменение этого параметра понадобится, если потребуется запускать более 30 000 процессов одновременно.

Кроме ограничения на общее количество одновременно запущенных процессов, существует ограничение на количество процессов, запускаемых одним пользователем. Это количество контролируется параметром maxuprc.

По умолчанию этот параметр равен разности max_nprocs и reserved_procs, где reserved_procs - это параметр, отвечающий за резервирование некоторого количества идентификаторов процессов для пользователя root (даже если вся таблица процессов заполнена процессами пользователей, для процессов root оставляется резерв строк в этой таблице). По умолчанию reserved_procs устанавливается равным 5.

Количество процессов, которое имеет право запустить один пользователь, можно только уменьшить - сделать его большим, чем max_nprocs - reserved_procs, нельзя.

Превышение пользователем ограничения, установленного параметром maxuprc, приводит к выдаче сообщения

out of per-user processes for uid N

Для более детального изучения параметров ядра, доступных для настройки, имеет смысл ознакомиться с Solaris Tunable Reference Manual, размещенным на http://docs.sun.com.

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >