Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект Лекций ПСРВ.doc
Скачиваний:
81
Добавлен:
12.02.2016
Размер:
2.73 Mб
Скачать

7. Микроядро

Микроядро QNX-Neutrino инкапсулирует в себе системные свойства, необходимые для реализации встраиваемых систем реального времени, и включает в себя: сервис обмена сообщениями, синхронизацию и управление потоками и процессами, обработку внешних прерываний.

Микроядро поддерживает системные вызовы, которые декларируют интерфейс управления:

  • программными потоками (Thread);

  • механизмами передачи сообще­ний (Message);

  • механизмами передачи сигналов (Signal);

  • каналами обмена данными (Channel);

  • системными часами (Clock);

  • таймерами (Timer);

  • обработчиками прерываний (Interrupt);

  • средствами синхронизации пото­ков (Synch);

  • средствами диспетчеризации по­токов (Sched).

Объекты ядра выполняют следующие функции:

  • Потоки (Thread) инкапсулируют исполняемый программный код.

  • Каналы (Channel) - это объект ядра, который используется потоком-сервером при реализации механизма передачи сообщений. Поток, который желает получить сообщение, создает канал (используя системный вызов ChannelCreate()), а затем получает сообщение из этого канала (используя вызов MsgReceive()).

  • Системное соединение (Connection) - это объект ядра, который ис­пользуется потоком-клиентом при реализации механизма передачи сооб­щений. Поток, который желает послать сообщение к потоку, создавшему канал, должен создать соединение с каналом (используя вызов ConnectAttach()), а затем переслать сообщение (используя вызов MsgSend()).

  • Диспетчер сообщений (Dispatch) обеспечивает синхронизацию пото­ков при обмене сообщениями.

  • Импульс (Pulse) - неблокируемое сообщение фиксированного раз­мера.

  • Таймер (Timer) – объект ядра, который периодически или однократ­но формирует события в заданные моменты времени.

  • Векторные сообщения (Vector) – объект ядра, который используется при передаче длинных сообщений, имеющих предопределенную структуру. В векторном сообщении выделяется заголовок и составные компоненты.

7.1. Запуск процессов

Для запуска процесса в файловой системе должен присутствовать файл с необходимым исполняемым программным модулем. Процесс можно запустить "вручную", с помощью командного интерпретатора shell, или из программы, используя специальные функции. При создании нового процесса происходит обращение к администратору процессов. В общем случае администратор процессов создает среду выполнения для нового процесса. После создания среды выполнения ядро выполняет запуск нити в этом процессе. Эта нить осуществляет некоторые подготовительные действия и вызовет функцию main(). Для некоторых функций порядок создания процесса имеет отличительные особенности.

7.2. Запуск процесса из shell

Для запуска процесса из командного интерпретатора достаточно в качестве команды указать имя файла исполняемого программного модуля. При этом процесс может запускаться с последующим ожиданием его завершения или без ожидания (в фоновом режиме). Например, если запускается процесс на основе программного модуля my_prog, находящегося в текущем каталоге, то команда:

$my_prog

запустит процесс и shell будет ждать его завершения, после чего только выдаст на экран приглашение для ввода следующей команды. Для запуска процесса в фоновом режиме команда должна включать опцию &:

$my_prog &

$

и приглашение к вводу следующей команды появляется немедленно.

Порядок запуска процессов ПРВ можно полностью возложить на shell. Для этого создаются сценарии запуска (скрипты или командные файлы). Это обычные текстовые файлы, в которых в качестве строк задаются команды shell. Командный интерпретатор рассматривает введение в качестве команды имени любого текстового файла как попытку выполнить скрипт.