# пользователь user1 может останавливать систему systemA и systemB
systemA user1
systemB user1
# администратор может останавливать все системы
+ root
# любой пользователь может остановить систему systemC
systemC +
Отсутствие файла /etc/shutdown.allow или отсутствие в нем администратора (root) не может помешать администратору остановить систему.
После запуска, shutdown выполняет:
· сброс на диск всех суперблоков файловых систем находящихся в памяти
· установку real UID в 0
· широковещательную посылку сообщения всем пользователям
· запуск /sbin/rc для выполнения корректного завершения всех основных системных и пользовательских программ
· выполнение пргораммы reboot для реальной остановки или перезагрузки системы.
Так же как и при старте, во время остановки системы используется скрипт /etc/rc . Если стартовый скрипт линк (например /sbin/rcN.d/S123test) в последовательности N имеет стоп действие, соответствующий остановочный скрипт должен быть помещен в последовательность
N-1 (/sbin/rcN-1.d/K200test). Действия запущенные на уровне N должны быть остановлены на уровне N-1. Поэтому остановка системы (т.е., переход с уровня 3 напрямую в уровень 0) приведет к корректному завершению всех подсистем путем вызова соответствующих остановочных скриптов.
Помомо команды shutdown существует команда rebooot которая выполняет похожие действия. Например reboot –h вызывает остановку системы а reboot без параметров перезагрузку. Между командами reboot и shutdown есть принципиальная разница. reboot всем процессам в системе (кроме самой себя -) посылает 9-й сигнал, который процесс не может перехватить или обработать и после этого вызывает остановку или перезагрузку системы. Поэтому не рекомендуется использовать эту команду в системах где есть критически важные приложения (например сервера баз данных) которые требуют корректной остановки.
Для большинства систем вполне хватает стандартной конфигурации ядра, однако в ряде случаев оговоренных ниже возникает необходимость переконфигурирования ядра. К этим случаям можно отнести:
· Добавление или удаление периферии (драйверов устройств) а также псевдодрайверов. В случае удаления периферии удалять драйвер устройства из ядра совсем не обязательно, но крайне желательно, т.к. в этом случае ядро будет меньше по обьему и будет работать более эффектино. Прежде чем удалять драйвер устройства убедитесь не зависят ли от него драйвера других устройств проверив файлы в директории /usr/conf/master.d в таблицах зависимости в секции DRIVER_DEPENDENCY. Особое внимание следует обратить на файл core-hpux.
· Изменение системных параметров (tunable parameters). В тех случаях когда система работает с большим количеством пользователей часто возникает необходимость изменения стандартных системных параметров. Эти параметры определяются в секции TUNABLE в файлах /usr/conf/master.d. Большинство из них находится в файле core-hpux.
· Инсталирование специализированного програмного обеспечения HP (подсистем). Если вы добавляете в систему специализированное програмное обеспечение например поддержку LAN, ATM, FDDI и.т.п в этом случае также требуется модификация ядра.
· Добавление файловых систем отлдичных от HFS.
· Добавление, удаление или модификация swap и (или) dump областей, устройства консоли или корневой файловой системы.
Драйвера по своим возможностям а также по методу доступа и управлению ими можно разделить на три основных типа:
· Символьные драйвера. Работа с этими драйверами происходит в побайтном режиме без использования буферного кэша. К таким драйверам можно отнести драйвера таких устройств как драйвера последовательных портов, терминалов, магнитных лент …
· Блочные драйвера. Этот тип драйверов позволяет проводить обмен блоками данных. Так например обмен с диском происходит фиксироваными блоками (секторами), даже в том случае если идет операция с данными количество которых меньше размера блока всеравно физически будет прочитан или записан один блок. При работе эти драйвера используют системный буферный кэш.
· Драйвера низкого уровня (raw drivers) Этот тип драйверов производит обмен с блочными устройствами напрямую минуя буферный кэш с ситемы.
Кроме драйверов устройств существует множество других драйверов не имеющих непосредственного отношения к периферии компьютера. Такие драйвера называются псевдодрайверами. Вот примеры некоторых из них:
/dev/kmem обеспечивает доступ к физической памяти компьютера
/dev/mem обеспечивает доступ к виртуальной памяти ядра
/dev/null нулевое устройство. Призаписи в него данные удаляются, а при чтении считывается 0 байт
lvm (Logical Volume Manager) обеспечивает построение и доступ к логическим дискам
Драйвера адресуются старшим номером устройства (major number). Помимо него также существует младший номер (minor number) для адресации одного из клонов драйвера. Например в случае с драйвером диска младший номер может означать номер диска.
$ ls -l /dev/dsk/
total 0
brw-r--r-- 1 root sys 31 0x002000 Jun 10 1996 c0t2d0
brw-r--r-- 1 root sys 31 0x005000 Jun 10 1996 c0t5d0
brw-r--r-- 1 root sys 31 0x006000 Jun 10 1996 c0t6d0
$ ls -l /dev/rdsk/
total 0
crw-r----- 1 root sys 188 0x002000 Jun 10 1996 c0t2d0
crw-r----- 1 root sys 188 0x005000 Jan 3 16:47 c0t5d0
crw-r----- 1 root sys 188 0x006000 Jun 10 1996 c0t6d0
Первая команда выводит файлы блочных дисковых устройств, вторая файлы raw дисковых устройств. Как создаются файлы устройств будет показано чуть позже. Доступ к драйверу осуществляется через специальную структуру данных называемою коммутатором устройств каждый элемент которой содержит указатели на соответствующие функции драйвера (d_open(), d_close(), d_strategy(), d_read(), d_write(), d_ioctl, d_xpoll(), d_intr(), …), так называемые точки входа. Старший номер является указателем на элемент коммутатора устройств. Блочные и символьные устройства имеют свои собственные коммутаторы. Список драйверов можно посмотреть воспользовавшись программой lsdev.
К одним из основных системных параметров относится параметр MAXUSERS который является макросом на основании которого вычисляются множество других параметров (например nproc вычисляется как 20+8*MAXUSERS). Этот параметр не указывает, как может показаться на первый взгляд на максимальное число пользователей в системе. На системах с небольшим количеством пользователей (рабочие станции) он обычно равен 32, на больших системах (T500) его значение может превышать 200. Перечислим краткий список основных системных параметров:
Параметр | Значение по умолчанию | Описание |
dbc_max_pct | 50 | Максимальный размер буферного кэша в процентах от обьема RAM |
maxdsiz | 67108864 | Максимальный размер сегмента данных |
maxssiz | 8388608 | Максимальный размер стека |
maxtsiz | 67108864 | Максимальный размер сегмента кода |
maxfiles | 60 | Максимальное количество открытых файлов на процесс |
maxuprc | 75 | Максимальное число процессов пользователя |
maxusers | 32 | Макрос через который определяются большинство других параметров |
nfile | 2172 | Максимальное число открытых файлов в системе |
nflock | 200 | Максимальное количество заблокированных файлов |
npty | 60 | Максимальное количество псевдотерминалов в системе |
semmns | 128 | Максимальное количество семафоров |
shmmax | 67108864 | Максимальный обьем разделяемой памяти |
shmmni | 200 | Максимальное количество идентификаторов разделяемой памяти |
shmseg | 120 | Максимальное количество сегментов разделяемой памяти на процесс |
Для изменения системных параметров можно воспользоваться утилитой SAM либо выполнить изменения конфигурационных файлов и пересобрать ядро вручную. При использовании SAM после запуска sam необходимо:
· Открыть меню “SAM Kernel Configuration”
· Выбрать “Configurable parameters”
· Выбрать нужный параметр из списка
· Активировать пункт меню “Actions->Modify Configurable Parameter”
· Ввести новое значения параметра
После выхода из раздела “Configurable parameters” SAM предложит создать новое ядро и перезагрузить систему.
Конфигурирование ядра с использованием команд HP-UX.
Для этого необходимо выполнить следующую последовательность действий:
· cd /stand/buil
· /usr/lbin/sysadm/system_prep –v –s system
Этот скрипт сосздает файл system являющийся шаблоном конфигурационного файла ядра
· vi system
Редактируем файл ядра
· mk_kernel –s system
Компилируем ядро. Новое ядро будет содержаться в файле /stand/build/vmunix_test
· mv /stand/vmunix /stand/vmunix.prev
mv /stand/system /stand/system.prev
Создаем резервные копии старого ядра и конфигурационного файла
· mv /stand/build/vmunix_test /stand/vmunix
mv /stand/build/system /stand
Перемещаем ядро в директорию из которой идет загрузка
· shutdown –r now
выполняем перезагрузку системы
Файлы устройств
Обычно файлы устройств располагаются в каталоге /dev и cуществует специальное соглашение по поводу их имен. Имена файлов устройств как правило маркируются в соответствии со следующим соглашением: c#t#d#[s#] :
c# представляет класс интерфейса или интерфейсной карты.
t# адрес устройства на шине. Обычно он выставляется физически
переключателями расположеными на устройстве.
d# номер устройства. (для SCSI устройств это логический номер устройства LUN)
s# необязательный параметр показывающий номер секции устройства. Например для дисков он показывает номер портиции, 0 – указывает на целый диск.
Утилиты lssf и ioscan могут помочь в определении интерфейса к которому подключено то или иное устройство. Например: