====== Модулі ядра ====== nokernel.pl – невеликий файл, що запускає модулі ядра. Кожен модуль повинен мати підпрограму start, яка приймає 2 параметри: * Прапор запущено модуль в монопольному режимі * конфіг Створимо конфіг для модуля kernel:: test. Обов'язковий параметр run вказує, чи буде модуль запускатися автоматично. Файл kernel/test.cfg run => 0 Файл kernel/test.pm package kernel::test; use strict; use Debug; our @ISA = qw{kernel}; sub start { my(undef, $single, $config) = @_; tolog 'Тестовий модуль запущено. Він нічого не робить; } 1; Тут $single буде встановлено у випадку, коли модуль запущено в монопольному режимі: perl nokernel.pl -m=test. У монопольному режимі ядро запускає лише один модуль. Це може знадобитися у разі: * У модулі присутні блокуючі операції, великі таймаути і т.д. Поки модуль виконуватиме тривалу операцію, решта буде в очікуванні. * модуль використовують потоки, в яких задіяні малопотокові пакети, зокрема Db. sub start { my(undef, $single, $config) = @_; nod::tasks->new( task => sub{ main($config) }, period => 5, first_period => $single? 0 : 3, ); } sub main { my($config) = @_; tolog '.'; } Модуль кожні 5 секунд записує в балку (при запуску nokernel -d -m=test) або виводить на екран крапку. nod::tasks->new створює завдання, яке запускатиме кожні 5 секунд підпрограму main. При монопольному запуску перше виконання main буде зроблено відразу ж, інакше через 3 секунди (first_period = 3).