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