Инициализация ядра
После того как ядро загружено в память и ему передано управление, оно начинает загрузку модулей. В этот момент ядро еще не умеет читать файлы из файловой системы UFS, так как драйвер файловой системы еще не загружен. Поэтому для чтения модулей ядро использует ufsboot. После того как загружено достаточно модулей для монтирования корневой файловой системы и самостоятельного продолжения загрузки, ядро выгружает ufsboot и выполняет остаток загрузки. Ядро монтирует указанные в /etc/vfstab файловые системы и запускает процесс /sbin/init для перехода к режиму работы системы, который в /etc/inittab обозначен как initdefault. Процесс /sbin/init, в свою очередь, запускает те программы и скрипты, которые перечислены в /etc/inittab.
В Solaris 9 ядро настраивается динамически, т.е. изменить параметры ядра можно как при перезагрузке системы (изменив заранее файл конфигурации /etc/system), так и во время работы, на лету. Поэтому ядро называется динамическим. Оно состоит из небольшой статической части и множества модулей, которые загружаются динамически, по мере необходимости. Многие модули загружаются автоматически при старте системы, в то время как другие, например драйверы устройств, загружаются тогда, когда они понадобятся ядру, т.е. в момент первого обращения к ним. Когда модуль уже не нужен, он может быть выгружен из памяти. Фактически, ядро выгружает модуль тогда, когда он не нужен, а память, которую он занимает, наоборот, нужна.
Чтобы узнать, какие модули загружены в настоящий момент, следует выполнить команду
modinfo
Модули ядра хранятся в каталогах /kernel и /usr/kernel, специфичные для аппаратной платформы модули лежат в каталогах /platform/`uname -m`/kernel и /platform/` uname -i`/kernel (если такие есть).
Специфические указания того, какие модули загружать при старте системы, следует разместить в файле /etc/system, который считывается ядром при загрузке. В этом файле можно также указать дополнительные параметры, которые надо передать модулям при загрузке.
В частности, /etc/system используют, чтобы указать:
- путь к каталогу, где следует искать модули, загружаемые при старте системы;
- модули, которые надо загрузить сразу, а не ждать, пока они потребуются;
- тип и имя устройства, с которого производится загрузка (корневое устройство);
- параметры ядра, которые следует установить в значения, отличные от принятых по умолчанию.
Стандартный файл /etc/system выглядит примерно так:
Листинг 9.1. Стандартный файл /etc/system (html, txt)
- Всегда делайте резервную копию любого файла конфигурации перед внесением изменений! Дать команду cp /etc/system /etc/system.bak - дело двух секунд, зато это действие сохранит вам нервы и время - проверено поколениями сисадминов!
- Никогда не вносите в файлы конфигурации изменений, если не уверены, что это надо делать, или сомневаетесь в том, что должно получиться в результате.
Если правилом (2) вы пренебрегли вопреки голосу разума, то неверный файл /etc/system может вызвать ошибку при загрузке и система не загрузится. Если это случилось, то:
- используйте команду загрузчика boot -a для интерактивной загрузки;
- когда загрузчик спросит имя файла system, укажите имя резервной копии (например, /etc/system.bak);
- если правило (1) вы тоже проигнорировали (похоже, в этом случае сегодня не ваш день!) и никакой резервной копии не имеете, то в качестве имени файла system указывайте /dev/null - тогда все значения будут приняты по умолчанию.
Как видно из приведенного примера, большинство строк в /etc/system выглядят так:
set параметр=значение
Например, параметр ядра MAXUSERS устанавливается в значение 50 следующей командой:
set maxusers = 50
Обратите внимание на то, что параметры статической части ядра (фактически, файла unix) устанавливаются без ссылки на модуль, а параметры, применимые к модулям, - с указанием имени модуля:
set модуль:параметр=значение
Длина команды в файле /etc/system не должна превышать 80 символов, строки, начинающиеся со знака звездочки "*" или решетки "#" интерпретируются как комментарии.
Чтобы проверить, какие значения имеют настраиваемые параметры ядра, следует использовать команду sysdef, которая показывает список обнаруженных устройств, системных устройств, загруженных модулей и значения настраиваемых параметров ядра:
Листинг 9.2. Файл sysdef (html, txt)
Если правилом (2) вы пренебрегли вопреки голосу разума, то неверный файл /etc/system может вызвать ошибку при загрузке и система не загрузится. Если это случилось, то:
- используйте команду загрузчика boot -a для интерактивной загрузки;
- когда загрузчик спросит имя файла system, укажите имя резервной копии (например, /etc/system.bak);
- если правило (1) вы тоже проигнорировали (похоже, в этом случае сегодня не ваш день!) и никакой резервной копии не имеете, то в качестве имени файла system указывайте /dev/null - тогда все значения будут приняты по умолчанию.
Как видно из приведенного примера, большинство строк в /etc/system выглядят так:
set параметр=значение
Например, параметр ядра MAXUSERS устанавливается в значение 50 следующей командой:
set maxusers = 50
Обратите внимание на то, что параметры статической части ядра (фактически, файла unix) устанавливаются без ссылки на модуль, а параметры, применимые к модулям, - с указанием имени модуля:
set модуль:параметр=значение
Длина команды в файле /etc/system не должна превышать 80 символов, строки, начинающиеся со знака звездочки "*" или решетки "#" интерпретируются как комментарии.
Чтобы проверить, какие значения имеют настраиваемые параметры ядра, следует использовать команду sysdef, которая показывает список обнаруженных устройств, системных устройств, загруженных модулей и значения настраиваемых параметров ядра:
* * Hostid * 0284521a * * i86pc Configuration * * * Devices * * +boot (driver not attached) memory (driver not attached) aliases (driver not attached) chosen (driver not attached) i86pc-memory (driver not attached) i86pc-mmu (driver not attached) openprom (driver not attached) options, instance #0 packages (driver not attached) delayed-writes (driver not attached) itu-props (driver not attached) isa, instance #0 motherboard (driver not attached) PNP0501 (driver not attached) lp (driver not attached) fdc, instance #0 fd, instance #0 fd, instance #1 (driver not attached) i8042, instance #0 keyboard, instance #0 mouse, instance #0 bios (driver not attached) bios (driver not attached) pci, instance #0 pci8086,7190 (driver not attached) pci8086,7191, instance #0 display, instance #0 pci20c,d041 (driver not attached) pci8086,7110 (driver not attached) pci-ide, instance #0 ide, instance #0 cmdk, instance #0 ide, instance #1 sd, instance #0 pci8086,7112, instance #0 pci8086,7113 (driver not attached) pci1014,138, instance #0 pci1014,138, instance #1 pci1436,440 (driver not attached) pci1014,136 (driver not attached) pci10c,d041 (driver not attached) used-resources (driver not attached) objmgr, instance #0 cpus (driver not attached) cpu, instance #0 (driver not attached) pseudo, instance #0 clone, instance #0 ip, instance #0 ip6, instance #0 tcp, instance #0 tcp6, instance #0 udp, instance #0 udp6, instance #0 icmp, instance #0 icmp6, instance #0 sad, instance #0 conskbd, instance #0 wc, instance #0 iwscn, instance #0 rts, instance #0 tl, instance #0 keysock, instance #0 spdsock, instance #0 sysmsg, instance #0 cn, instance #0 mm, instance #0 kstat, instance #0 log, instance #0 sy, instance #0 vol, instance #0 random, instance #0 ptm, instance #0 pts, instance #0 ksyms, instance #0 devinfo, instance #0 * * Loadable Objects * * Loadable Object Path = /platform/i86pc/kernel * drv/cpc hard link: sys/cpc strmod/vuid2ps2 strmod/vuid3ps2 strmod/vuidm3p strmod/vuidm4p strmod/vuidm5p drv/cadp160 drv/smartii drv/elx drv/fd drv/fdc drv/logi drv/lp drv/msm drv/ata drv/dpt drv/mscsi drv/pci-ide drv/sbpro drv/mlx drv/eisa drv/isa drv/kb8042 drv/pci drv/rootnex mach/uppc misc/bootdev misc/emul_80387 misc/pci_autoconfig mmu/mmu32 mmu/mmu36 unix * * Loadable Object Path = /kernel * drv/arp hard link: strmod/arp mach/pcplusmp mach/corollary mach/compaq drv/bofi drv/nca drv/clone drv/cn drv/conskbd drv/consms drv/devinfo drv/i2o_bs drv/i2o_scsi drv/icmp hard link: strmod/icmp drv/icmp6 hard link: strmod/icmp6 drv/ip hard link: strmod/ip drv/ip6 hard link: strmod/ip6 drv/ippctl drv/ipsecah hard link: strmod/ipsecah drv/ipsecesp hard link: strmod/ipsecesp drv/iwscn drv/keysock hard link: strmod/keysock drv/llc1 drv/lofi drv/log drv/mm drv/openeepr drv/options drv/pci_to_i2o drv/poll drv/pseudo drv/ptc drv/ptsl drv/random drv/rts hard link: strmod/rts drv/sad hard link: strmod/sad drv/sgen drv/spdsock drv/st drv/sy drv/sysmsg drv/tcp hard link: strmod/tcp drv/tcp6 hard link: strmod/tcp6 drv/tl drv/udp hard link: strmod/udp drv/udp6 hard link: strmod/udp6 drv/wc genunix misc/busra misc/consconfig misc/des misc/fssnap_if misc/gld misc/hpcsvc misc/i2o_msg misc/ipc misc/kbtrans misc/krtld misc/md5 misc/pcicfg misc/pcihp misc/rpcsec misc/scsi misc/seg_drv misc/seg_mapdev misc/sha1 misc/strplumb misc/swapgeneric misc/terminal-emulator misc/tlimod misc/ufs_log drv/chs drv/dnet drv/elxl drv/ieef drv/iprb drv/ncrs drv/pcn drv/pcscsi drv/sd drv/spwr drv/pcmem drv/mega drv/pcic drv/pcs drv/pem drv/pcelx drv/xsvc drv/cpqncr drv/pcram drv/md misc/md_hotspares misc/md_mirror misc/md_notify misc/md_raid misc/md_sp misc/md_stripe misc/md_trans misc/kgss/gl_kmech_krb5 drv/pcser drv/hpfc drv/pe drv/asy drv/cmdk drv/objmgr misc/dadk misc/gda misc/snlb misc/strategy misc/sysinit drv/sk98sol drv/pcata drv/skfp misc/klmmod misc/klmops misc/nfs_dlboot misc/kgssapi misc/rpcsec_gss drv/adp drv/audioens misc/amsrc1 misc/audiosup misc/diaudio misc/mixer drv/cadp drv/cpqhpc drv/hid drv/hubd drv/scsa2usb drv/uhci drv/usb_ac drv/usb_as drv/usb_mid drv/usbprn misc/hidparser misc/usba exec/elfexec exec/intpexec fs/cachefs fs/fifofs fs/hsfs fs/lofs fs/mntfs fs/procfs fs/sockfs fs/specfs fs/tmpfs fs/ufs ipp/ipgpc sched/TS sched/TS_DPTBL strmod/atun strmod/authmd5h strmod/authsha1 strmod/bufmod strmod/connld strmod/dedump strmod/encr3des strmod/encrdes strmod/ldterm strmod/pckt strmod/pfmod strmod/pipemod strmod/ptem strmod/redirmod strmod/rpcmod hard link: sys/rpcmod strmod/timod strmod/tirdwr strmod/ttcompat strmod/tun sys/c2audit sys/doorfs sys/inst_sync sys/kaio sys/msgsys sys/pipe sys/pset sys/semsys sys/shmsys fs/nfs hard link: sys/nfs fs/autofs fs/udfs strmod/usb_ah strmod/usbkbm strmod/usbms strmod/hwc dacf/consconfig_dacf drv/i8042 drv/mouse8042 drv/symhisl drv/pci_pci drv/vgatext misc/nfssrv misc/acpi_intp misc/pcmcia ipp/dlcosmk ipp/dscpmk ipp/flowacct ipp/tokenmt ipp/tswtclmt misc/rsmops exec/coffexec * * Loadable Object Path = /usr/kernel * drv/rsm sched/FSS drv/winlock drv/pm drv/tnf strmod/u8koi8 strmod/u8lat1 strmod/u8lat2 drv/vol drv/dump drv/fssnap drv/kstat drv/ksyms drv/lockstat drv/logindmux drv/ptm drv/pts exec/javaexec fs/fdfs fs/namefs fs/pcfs fs/xmemfs sched/FX sched/FX_DPTBL sched/IA sched/RT sched/RT_DPTBL strmod/rlmod strmod/telmod sys/acctctl sys/exacctsys sys/sysacct drv/llc2 drv/sppp drv/sppptun hard link: strmod/sppptun strmod/spppasyn strmod/spppcomp * * System Configuration * swap files swapfile dev swaplo blocks free /dev/dsk/c0d0s1 102,1 8 1048936 1048936 * * Tunable Parameters * 3866624 maximum memory allowed in buffer cache (bufhwm) 2954 maximum number of processes (v.v_proc) 99 maximum global priority in sys class (MAXCLSYSPRI) 2949 maximum processes per user id (v.v_maxup) 30 auto update time limit in seconds (NAUTOUP) 25 page stealing low water mark (GPGSLO) 5 fsflush run rate (FSFLUSHR) 25 minimum resident memory for avoiding deadlock (MINARMEM) 25 minimum swapable memory for avoiding deadlock (MINASMEM) * * Utsname Tunables * 5.9 release (REL) sola node name (NODE) SunOS system name (SYS) Generic_112234-03 version (VER) * * Process Resource Limit Tunables (Current:Maximum) * 0x0000000000000100:0x0000000000010000 file descriptors * * Streams Tunables * 9 maximum number of pushes allowed (NSTRPUSH) 65536 maximum stream message size (STRMSGSZ) 1024 max size of ctl part of message (STRCTLSZ) * * IPC Messages module is not loaded * * * IPC Semaphores module is not loaded * * * IPC Shared Memory module is not loaded * * * Time Sharing Scheduler Tunables * 60 maximum time sharing user priority (TSMAXUPRI) SYS system class name (SYS_NAME)
Листинг 9.2. Файл sysdef