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

5.8. Программы, процессы, нити

Программирование приложений реального времени в операционной системе QNX базируется на использовании таких конструктивных элементов как программы, процессы, нити. Программы выступают в виде исполняемых файлов, находящихся в файловой системе ОС. Операционная система QNX является многозадачной. Это значит, что в общем случае в системе независимо друг от друга могут запускаться и одновременно выполняться несколько программ. Каждый такой запуск рассматривается как запуск на выполнение некоторой задачи. Очевидно, что при запуске очередной задачи ОС должна управлять выделением необходимой для выполнения соответствующей программы доли системных ресурсов, таких как память, процессор, доступ к устройствам ввода/вывода и различным другим системным ресурсам, включая услуги ядра ОС. Выделяемые программе системные ресурсы рассматриваются операционной системой как её среда выполнения. Эта среда выполнения программы вместе с совокупностью данных ядра ОС, описывающих образ программы в памяти и предназначенных для управления её выполнением, называют процессом. Создание нового процесса осуществляется каждый раз при очередной загрузке программы на выполнение. При этом не важно разные запускаются программы или одна и та же.

Каждый процесс обеспечивает загруженной для выполнения программе собственное изолированное и уникальное адресное пространство. У программы нет возможности непосредственно обратиться в адресное пространство другого процесса. Программа может считывать и записывать информацию в собственный раздел данных и в стек, но ей недоступны данные и стеки других процессов. В то же время процесс обеспечивает программе возможность взаимодействовать с программами, исполняющимися в других процессах, используя системные средства межпроцессного взаимодействия, например, посредством передачи или приема сообщений.

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

В итоге, исполнение программы в процессе в общем случае выглядит как запуск нити main()и последующее порождение и параллельное выполнение совокупности нитей, которые могут асинхронно создаваться и завершаться. Исключение составляет нить main(), завершение которой приводит к завершению выполнения программы и удалению процесса. Таким образом, процесс является, по сути, контейнером нитей, который содержит в начальный момент одну нить - main().

Далее выполнение программы в процессе будем интерпретировать как выполнение процесса.