Сценарий Запуска

Этот сценарий выполняется после того, как будет закончен процесс начальной загрузки. Все пользовательские программы находятся здесь. Давайте посмотрим на типичный сценарий:

[+script].script={
# определяются глобальные системные переменные
PATH=/proc/boot:/usr/bin:/bin
LD_LIBRARY_PATH=/proc/boot:/usr/lib:/lib
TERM=qansi

# для удобства определим здесь переменные для сети
IP=»192.168.4.100″
GATEWAY=»192.168.4.1″

# менеджер ресурсов заполняет структуру данных ядра определенными
# системными значениями (диапазоны IRQ, DMA и т.д.)
# если ваша система имеет PCI-интерфейс (как у большинства компьютеров
# Pentium > 100MHz) тогда запускается, PCI сервер
# если у вас другой тип компьютеров не используют его
pci-bios &
# ожидание, пока PCI-BIOS исследует систему
waitfor /dev/pci

# запуск NIC драйвера с полным стеком TCP/IP
io-net -dtulip chipset=21041 -p tcpip
#ожидание, пока не запустится io-net
waitfor /dev/socket

# конфигурирование NIC
ifconfig en0 $IP netmask 255.255.255.0
route add default $GATEWAY

# запуск консольного драйвера с двумя виртуальными консолями
# доступ по нажатию ctrl+alt+1 и ctrl+alt+2
devc-con -n2 &

# запуск оболчки на консолях
reopen /dev/con1
[+session] uesh &
reopen /dev/con2
[+session] uesh &
}

Вы, должно быть, заметили, что этот сценарий сходен со сценарием оболочки. Блок с атрибутом, в начале имени файла «.script», показывает, что он является сценарием выполнения.

Этот сценарий записан с комментариями, так что содержание должно быть ясно. Однако, есть некоторые пункты, которые надо отметить. Вы не должны запускать PCI-сервер «pci-bios», если у вас в системе нет шины PCI, но если у вас есть шина PCI и у вас есть некоторая плата (например, NIC), которую вы хотите использовать, вы должны запустить его. Для использования драйвера NIC, его необходимо определить, используя «nettrap». Если же у вас мало места, вы можете заменить полный стек TCP/IP малым (tiny). Это выгодно не только потому, что вы получаете дополнительное свободное место, поскольку размер «ttcpip.so» составляет 40% от «tcpip.so», но и потому что вам не нужен будет «ifconfig» и «route». В общем 90 кБ против 250 кБ, хотя ценой TCP/IP выдается сообщение типа «SO_KEEPALIVE», но большинство приложений работает без помех. Командная строка в таком случае переписывается (однопользовательская машина):

io-net -dtulip chipset=21041 -p ttcpip \
if=en0:192.168.4.100:255.255.255.0 \
default=192.168.4.1
Вы могли бы обратить внимание, что этот сценарий от души сыпет «waitfor» инструкциями. Большинство команд в Neutrino не блокируемые по своей природе. Это одновременно хорошо и плохо. Хорошо, потому что вы можете запустить параллельный процесс и воспользоваться преимуществом многопоточной обработки, если оба процесса взаимно независимы. Но это предполагает проблему, где запуск процесса зависит от работы предыдущего. Подобно вышеприведенному случаю, моя плата NIC — PCI одна и io-net не может запустить и выполнить ее драйвер, если PCI-сервер не загружен, подобный случай — с «ifconfig» и «route», которые не можгут работать, если «io-net» не завершился, конфигурируя NIC. Чтобы обойти эту ситуацию, мы должны ждать, пока узел того устройства-драйвера не определится, который сообщит, что устройство-драйвер загружено и выполняется.

Третья и последняя часть — та, которая сообщает, какие файлы являются необходимыми при запуске.