Младший номер определяет собой: расположение устройства и его драйвер-зависимые характеристики. Некоторые примеры младших номеров файлов устройств приведено ниже. Более полную информацию можно почерпнуть из руководства “Configuring HP-UX for Peripherals”.
SCSI Disk device. Рассмотрим что означает младший номер 0x023000 у SCSI устройства.
bits | 8-11 | 12-15 | 16-19 | 20-23 | 24-27 | 28-31 |
Binary | 0000 | 0010 | 0011 | 0000 | 0000 | 0000 |
hex | 0 | 2 | 3 | 0 | 0 | 0 |
0000 0010 Первые восемь бит идентифицируют интерфейс или интерфейсную карту
0011 SCSI адрес диска
оставшиеся биты нулевые.
SCSI ленточный накопитель.
Bits 16-19 | 20-23 | 24-27 | 28-31 | |
Binary | SCSI номер | SCSI LUN | 24 – поведение как у BSD систем при закрытии 25 – без перемотки 26 – конфигурационный метод (если 1 то биты от 27 до 31 означают индекс, если 0 то плотность записи) 27-31 Индекс/плотность записи |
Создавать файлы устройств можно с помощью команды mknod. Она имеет следующий синтаксис:
mknod file_name [c|b] major minor
например
|
|
mknod /dev/null c 3 0x000002
Инсталирование периферии на примере ленточного накопителя.
Прежде чем перейти к включению ленточного накопителя нужно убедится в том что его SCSI id не совпадает ни с одним из уже установленных устройств (диски, CD-ROM, …). После физического подключения накопителя к SCSI шине необходимо в ядро. В случае использования SAM для этого необходимо войти в раздел Kernel Configuration -> Drivers, в списке драйверов найти stape, и активировать его выбрав опцию Actions -> Add driver to Kernel. После выхода из окна конфигурации ядра SAM предложит перестроить я дро и перегрузить компьютер, также создаст все необходимые файлы устройств в каталоге /dev/rmt. Все тоже самое можно сделать используя командыв hpux как это было указано выше. В качестве имя драйвера нужно использовать stape.
# cd /stand/build
# /usr/lbin/sysadm/system_prep –v –s system
# vi system
# /usr/sbin/mk_kernel –s system
# mv /stand/system /stand/system.prev
# mv /stand/vmunix /stand/vmunix.prev
# mv /stand/build/system /stand/system.prev
# mv /stand/build/vmunix_test /stand/vmunix
# shutdown –r now
# ioscan –f –C tape
Class I H/W Path Driver S/W State H/W Type Description
================================================================
tape 0 2/0/1.3.0 stape CLAIMED DEVICE HP HP35480A
# lsdev | grep tape
205 -1 stape tape
# mkdir /dev/rmt
# cd /dev/rmt
# mknod 0m c 205 0x003000
# mknod 0mn c 205 0x003040
# mknod 0mnb c 205 0x0030c0
Примечание: младшие номера для файла устройств можно узнать из файла /usr/include/sys/mtio.h (раздел Masks for minor number bits)
Инсталирование софта
Для работы с программными пакетами существует целая серия команд. Эти команды носят название SD-UX команды. Приведем список основных из них:
swintsall инсталирование программных пакетов
|
|
swremove удаление программных пакетов
swlist список инсталированого програмного обеспечения
swacl просмотр и модификация прав для защиты программных компонент
Управление процессами
Что такое процесс?
Процесс это запущенная программа обслуживаемая такими компонентами ядра как планровщик задач и подсистемой управления памятью. Процесс состоит из сегмента кода, данных и стека. С процессом ассоциировано два стека – пользовательский и системный. В дополнение к этому роцесс идентифицируется
· програмными данными (переменные, массивы, записи …)
· номером процесса PID, номером процесса родителя PPID, и номером группы процессов PGID
· идентификатором пользователя и группы PID, GID
· информацией о открытых файлах
· текущей рабочей директорией
Взаимоотношения процессов
Процессы в системе постороены по иерархическому принципу родитель-потомок. Каждый процесс (за исключением init) имеет одного родителя, но каждый родитель может иметь несколько потомков. Процесс потомок наследует окружение родителя (переменные окружения, открытые файлы, рабочую директорию). Все процессы за исключением init, pagedaemon, и
swapper) принадлежат к группам процессов.
Процесс ID и родительский процесс ID.
Во время создания процесса HP-UX назначает ему уникальный номер известный как процесс ID (PID), именно по этому номеру ядро идентифицирует процесс при выполнении системных вызовов. Помомо PID процесс имеет параметр как PPID (PID родителя). Используя программу ps можно посмотреть эти параметры:
$ ps -f
UID PID PPID C STIME TTY TIME COMMAND
torry 3865 3699 2 13:35:43 ttyp3 0:00 ps -f
torry 3699 3698 0 12:58:21 ttyp3 0:00 ksh
Идентификаторы пользователя и группы. (реальные и эффективные)
Помимо PID и PPID процесс имеет еще ряд идентификационных номеров:
* реальный идентификатор пользователя (a real user ID)
* реальный идентификатор группы (a real group ID)
* эффективный идентификатор пользователя (effective user ID)
* эффективный идентификатор группы effective group ID.
Реальный идентификатор пользователя это целое число показывающее владельца процесса. Реальный идентификатор группы это целое число показывающее группу к которой принадлежал пользователь создатель процесса. Комманда id показывает оба этих значения.
%id
uid=513(torry) gid=20(users)
% grep 513 /etc/passwd
torry:EqqHevH:513:20:Torry Ho,[44MY],474-1969,:/home/torry:/usr/bin/csh
Эффективный идентификатор пользователя и группы процесса позволяет процессу получать доступ к файлам или выполнять программы как пользователь имеющим ID равным эффективному. Обычно реальный и эффективные идентификаторы процессов совпадают, но не всегда. Когда эффективный идентификатор равен нулю, процесс начинает выполнять системные вызовы как администратор системы.
Эффективный идентификатор пользователя и группы остаються установленными до:
* окончания процесса.
* пока они не заменяться при выполнении системного вызова exec() программы c
установленными битами setuid или setgid.
* пока эффективный, реальный или сохраненные идентификаторы группы и пользователя не будут установлены системными вызовами setuid(), setgid(), setresuid().
Группы процессов
Каждый процесс за исключением системных процессов таких как init и swapper принадлежат к группе процессов. Когда созхдается задание, шелл присваивает всем процессам в задании одну и туже группу процессов. Сигналы при этом могут распостраняться на все процессы в группе, в этом и заключается преимущество управления заданиями. Каждая группа процессов идентифицируется целым числом которое называется Process Group ID (PGID). PGID у группы процессов равен PID лидера группы – создателя группы. Все процессы в группе имеют одинаковый GID. PGID не может быть использован системой пока живет группа процессов. Время жизни группы процессов определяется как период времени между созданием группы и когда процесс покидает группу. Процесс покидает группу если:
|
|
* когда другой процесс вызывает wait() или waitpid() функции на неактивный процесс.
* при вызове setsid или setpgid системных вызовов.