Операционная система реального времени QNX. курсовая работа. Основные принципы, которые позволяют создавать операционные системы реального времени
Скачать 3.97 Mb.
|
Введение В настоящее время все большее количество промышленных предприятий оснащают свои производства компьютерной техникой. Естественно, если некоторая вычислительная машина выполняет функции контроля участка производства, то она должна реагировать на все события в реальном масштабе времени, т.е. время реакции системы на события должно быть "привязано" к реальным промежуткам времени - секунды, минуты, часы и т.д. Такие системы называют системами реального времени. Системы реального времени могут использоваться не только на промышленных производствах, но и в различных других областях деятельности человека. Например, в охранных системах, в системах медицинской электроники, в различных системах контроля протекания процессов (допустим, контроль протекания научных экспериментов) и т.д. Системы, применяемые во всех перечисленных областях должны иметь минимальный размер, так как они обычно выполняются в виде отдельного устройства. Зачастую устройства, содержащие подобные системы, имеют набор весьма специфического периферийного оборудования, такого как устройства ввода и отображения информации и т.д. Вследствие этого, в дополнение к минимальным размерам, система должна корректно работать с разного рода специфическим оборудованием. Таких требований к системам реального времени довольно много, и все перечислить просто нет возможности, поэтому мы остановимся только на одном, наиболее важном. Основные принципы, которые позволяют создавать операционные системы реального времени: Многозадачность – очевидно, что варианты с псевдомногозадачностью (как в системах Windows 3x и Novell Net Ware) неприемлемы, поскольку допускают возможность блокировки или даже полного развала системы одним неправильно работающим процессом. Для предотвращения блокировок вычислений операционная система реального времени должна использовать квантирование времени (то есть использовать вытесняющую, а не кооперативную многозадачность). Как известно, основная проблема, возникающая при создании многозадачных систем - это проблема планирования (диспетчеризации) выполнения задач в системе. Т.е. в любую многозадачную систему должен быть встроен механизм, обеспечивающий устойчивое взаимодействие между задачами, переключение системы между задачами, создание новых задач в системе и уничтожение отработавших задач, без последствий для работы остальной системы. Каждая система использует свой метод диспетчеризации, но наиболее популярные методы - это методы, основанные на приоритетах задач. Суть метода состоит в следующем: каждая задача при запуске получает некоторый приоритет, и в зависимости от используемого в системе алгоритма и приоритета, задача выбирается на исполнение. Организация надежных вычислений – может быть эффективно решена за счет использования специальных аппаратных возможностей процессора. Поддержка сетевых коммуникаций. Наличие развитых механизмов взаимодействия между процессами, поскольку реальные технологические системы обычно управляются целым комплектом компьютеров и/или контроллеров. Желательно чтобы операционная система поддерживала многопоточность (не только мультипрограммный, но и мультизадачный режим). Система должна быть способна работать на ограниченных аппаратных ресурсах, поскольку одна из основ ее применения – встроенные системы. Принято различать системы "мягкого" и "жесткого" реального времени. Система "Жесткого" реального времени - система, где неспособность обеспечить реакцию на какие-либо события в заданное время является отказом и ведёт к невозможности выполнения поставленной задачи. В большинстве русскоязычной литературы такие системы называют системами с детерминированным временем. При практическом применении время реакции должно быть минимальным. Системами "мягкого" реального времени называются системы, не попадающие под определение "жесткие", т.к. в литературе четкого определения для них пока нет. Системы "мягкого" реального времени могут не успевать решать задачу, но в зависимости от функции, выполняемой системой, задержка выполнения может быть различной. Все вышесказанное о встроенных системах контроля и управления в реальном масштабе времени можно с полной уверенностью отнести и к операционным системам, рассчитанным на работу с персональными компьютерами. Немаловажный момент, относящийся к операционным системам для персональных компьютеров, - это то, что в одной вычислительной системе могут одновременно существовать задачи как "жесткого", так и "мягкого" реального времени, и только одна из задач, обладающая наивысшим приоритетом, может быть по-настоящему детерминированной. Но, как правило, при обсуждении операционных систем реального времени имеются в виду встроенные управляющие вычислительные комплексы со временем реакции на событие порядка десятков и сотен микросекунд. И так как подобные системы - это системы "жесткого" реального времени, то для их успешного функционирования необходимо введение некоторого директивного срока задачи, до которого задача должна обязательно выполниться, иначе неизбежен отказ системы. Этот директивный срок используется диспетчером как для назначения приоритета задачи при ее запуске, так и при выборе задачи на выполнение. На практике зачастую применяют системы "жесткого" реального времени, и как следствие этого, их называют просто системами реального времени. В данной курсовой работе рассматривается операционная система реального времени QNX. 1. Общие сведения об операционной системе QNX Операционная система QNX является мощной операционной системой, разработанной для процессора с архитектурой ia32. Встроенные свойства QNX обеспечивают поддержку многозадачного режима на одном компьютере и взаимодействие параллельно выполняемых задач на разных компьютерах, работающих в среде локальной сети. Таким образом, эта система хорошо подходит для построения распределенных систем. Основным языком программирования в системе является C. Основная операционная система соответствует стандарту POSIX. Это позволяет с небольшими доработками переносить ранее разработанное программное обеспечение в QNX для организации работы в среде распределенной обработки. Операционная система QNX будучи сетевой и мультизадачной, в то же время является многопользовательской. Кроме того, она масштабируема. С точки зрения пользовательского интерфейса и интерфейса прикладного программирования она очень похожа на Unix, поскольку выполняет требования стандарта POSIX. Однако QNX – это не версия Unix. Она была разработана «с нуля» канадской фирмой QNX Software Systems Limited в 1989 году по заказу министерества обороны США, причем соверщенно на иных архитектурных принципах, нежели использовались при создании Unix. За свою 15-летнюю историю она имеет сотни тысяч инсталляций во многих странах мира. Среди пользователей QNX значатся такие компании, как Du Pont, Eastman Kodak, General Mills, General Motors, Motorola, Texaco. Представительства и дистрибьюторы фирмы существуют более чем в 60 странах мира, в том числе в России. QNX была первой коммерческой системой, построенной на принципах микроядра и обмена сообщениями. Система реализована в виде совкупности независимых (но взаимодействующих путем обмена сообщениями) процессов различного уровня (менеджеры и драйверы), каждый из которых реализует определенный вид услуг. 1.1 Версии QNX QNX 2.x - это ОС, выпущенная фирмой QSSL в середине 80-х. В настоящее время практически не применяется. QNX 4.2x - наиболее популярная до последнего времени ОС, она же наиболее распространена в России. С ее помощью построено очень много встраиваемых систем, систем SCADA, она очень успешно применяется в решениях задач автоматизации и управления, там где необходима высокая надежность. Эта система была разработана специально для "mission critical appliances" – то есть для применения в критических ситуациях, там где на другие операционные системы нельзя рассчитывать. Neutrino - это новое поколение систем реального времени, поcтpоенных на идеях и аpхитектypе QNX. Realtime Platform (RtP) - cвободно pаcпоcтpаняемый ваpиант QNX Neutrino, котоpый можно cвободно иcпользовать в некоммеpчеcких целях. То есть ее можно беcплатно иcпользовать для теcтиpования, опpобиpования идей, pазpаботки freeware и для пеpcонального пpименения. Neutrino изначально задyмывалаcь как операционная система для глyбоко вcтpаиваимых cиcтем, вcе делалоcь c тем pаcчетом, чтобы она могла гpyзитьcя откyда yгодно (хоть из постоянного запоминающего устройства), должна pаботать на большом pазнообpазии компьютеpных аpхитектyp. Поэтомy изменена cиcтема загpyзки. Тепеpь вмеcто отдельного ядpа c оcновными пpоцеccами и cкpипта sysinit вcе заделано в один загpyжаемый модyль. Пpичем cиcтема полyчилаcь наcтолько гибкой, что даже можно обойтиcь без менеджеpа пpоцеccов, еcли они не нyжны, оcтавив только одно микpоядpо. В RtP pеализована загpyзка чеpез diskboot, добавлена cиcтема pепозитаpиев. Следует отметить революционную концепцию наноядра, размером всего в 32 Кб. 1.2 Достоинства QNX Предсказуемость – применимость системы к задачам жесткого реального времени. QNX является операционной системой, которая дает гарантию того, что процесс с наивысшим приоритетом начнет выполняться практически немедленно, а критически важное событие никогда не будет потеряно. Масштабируемость и эффективность – достигаются оптимальным использованием ресурсов и означают применимость QNX для встроенных систем. Разработчики легко могут настроить операционную систему таким образом, чтобы она отвечала требованиям конкретных приложений. QNX позволяет вам создать систему, использующую только необходимые для решения вашей задачи ресурсы. Конфигурация системы может изменяться в широком диапазоне - от ядра с несколькими небольшими модулями до полноценной сетевой системы, обслуживающей сотни пользователей. Расширяемость и надежность – обеспечиваются одновременно, поскольку написанный файл-сервер не нужно компилировать в ядро, рискуя вызвать нестабильность системы. Менеджеры ресурсов (служба логического уровня) работают в третьем кольце защиты и возможно добавление своих менеджеров, не опасаясь за систему. Драйверы работают в первом кольце защиты и могут вызвать проблемы, но не фатального характера. Быстрый сетевой протокол FLEET – прозрачен для обмена сообщениям, автоматически обеспечивает отказоустойчивость, балансирование нагрузки и маршрутизацию между альтернативными путями доступа. Эта технология выражается в следующих принципах. В качестве основного средства взаимодействия между процессами система использует передачу сообщений. Благодаря этому в 32-битовой среде возможно взаимодействие процессов с 32 и 16-битовым кодом. Причем сообщения передаются между любыми процессами, независимо от того, находятся ли процессы на одном компьютере или на разных узлах сети. Пользователь, работая на одном из узлов сети, может иметь доступ к любым ресурсам остальных узлов, включая порты, файловую систему и задачи. Пользователю нет никакой необходимости вникать в сетевой протокол, который, кстати, не является тайной, вплоть до его структуры. Он содержит пакеты, которые применяются также и для передачи сообщений. Сетевой администратор распознает эти пакеты и переправляет их микроядру, которое, в свою очередь, переправляет их в шину локальных сообщений. QNX способна распознавать не только пакеты сообщений QNX-процессов. Вы можете легко обращаться к сетевому администратору для передачи таких пакетных протоколов, как TCP/IP, SMB и других. Возможно обращение к различным сетевым администраторам через один кабель. Операционная система QNX объединяет всю сеть персональных компьютеров в единый набор ресурсов с абсолютной прозрачностью доступа к ним. Узлы могут добавляться и исключаться из сети, не влияя на целостность системы. Сетевая обработка данных в QNX является гибкой настолько, что вы можете объединить в одну сеть любой разнородный набор Intel совместимых компьютеров, соединенных через Arcnet, Ethernet, Token Ring или через последовательный порт, к которому также может быть подключен модем. Причем возможно участие компьютера одновременно в 3 сетях, и если одна из них окажется перегруженной или выйдет из строя, то QNX автоматически будет использовать другие доступные сети без потери информации. Компактная графическая система Photon, построенная на тех же принципах модульности, что и сама операционная система, позволяет получить полнофункциональный интерфейс GUI, работающий с POSIX-совместимой операционной системой всего в 4 Мегабайтах памяти начиная с i80386 процессора. Исходники системы открыты лишь в необходимом для разработчика количестве. Так например "сердце" системы - ядро и основные менеджеры закрыты, дабы сохранить "целостность" системы. Открыты драйвера устройств и некоторые графические приложения. Она была создана для yпpавления технологическими пpоцессами (напpимеp, конфетной фабpикой), втоpое пpизвание QNX - встpоенные системы (напpимеp, стиpальная машина). Эти обязанности поpyчили QNX потомy что она является надежной, маленькой и является операционной системой реального времени. Ресурсов баз данных в QNX тоже более чем достаточно. В качестве представителя сетевых баз выступает db_Vista, а реляционные базы представлены продуктами Watcom SQL и Faircom C-tree. Для любителей dBase существует полностью совместимая со стандартом dBase III/IV база данных OnCmd,которая по причине совместимости с упомянутым пакетом работает недостаточно быстро для QNX, хотя значительно быстрее, чем в DOS. Последнее достижение фирмы Empress – одноименная база данных, которая предоставляет возможности, близкие к Oracle. Все вышесказанное о встроенных системах контроля и управления в реальном масштабе времени можно с полной уверенностью отнести и к операционным системам, рассчитанным на работу с персональными компьютерами. 2. Архитектура операционной системы QNX В системе реализована концепция связи между задачами на основе сообщений, посылаемых от одной задачи другой, причем задачи могут решаться как на одном компьютере, так и на разных, связанных между собой локальной сетью. Микроядро QNX имеет объем в несколько десятков килобайт (в разных версиях 10Кб, 32Кб и 46Кб). В этом объеме совершаются: связь между процессами (IPC). Ядро обеспечивает три формы IPC (сообщения, proxy (прокси) и сигналы); сетевое взаимодействие нижнего уровня. Ядро передает все сообщения, предназначенные процессам на другом узле; планирование процессов. Планировщик ядра определяет, какой процесс будет выполняться следующим; первичную обработку прерываний. Все прерывания и сбои аппаратного обеспечения сначала обрабатываются в ядре, а затем передаются соответствующему драйверу или системному администратору. Рисунок 1. Микроядро. Ядро QNX поддреживает три типа связи между процессами: сообщениями, proxy и сигналами. Основной формой IPC в системе QNX является обмен сообщениями. Сообщения обеспечивают синхронную связь между взаимодействующими процессами, при которой процесс, посылающий сообщение, требует подтверждения о его приеме и, возможно, ответа на сообщение. Связь посредством proxy представляет собой особый вид передачи сообщений. Этот вид связи специально предназначен для оповещения о событиях, при которых процесс-отправитель не нуждается во взаимодействии с процессом-получателем. Связь сигналами - это традиционная форма IPC. Сигналы используются для обеспечения асинхронной связи между процессами. 2.1 Связь между процессами посредством сообщений Механизм IPC обеспечивает пересылку сообщений между процессами и является одной из важнейших частей операционной системы, так как все взаимодействия между процессами, в том числе и системными, происходят через сообщения. В системе QNX под сообщением понимается пакет байтов, который синхронно передается от одного процесса к другому. Для самой системы содержимое сообщения не имеет никакого значения. Данные в сообщении имеют смысл только для отправителя и получателя. Для прямой связи друг с другом взаимодействующие процессы используют следующие функции языка C: Таблица 1. Функции языка C для связи процессов.
Эти функции могут использоваться локально или по всей сети. Для прямой связи процессов друг с другом необязательно использование функций Send(), Receive() и Reply(). Система библиотечных функций QNX надстроена над системой обмена сообщениями, поэтому процессы могут использовать передачу сообщений косвенно при использовании стандартных сервисных средств, например программных каналов. Рисунок 2. Процесс А посылает сообщение процессу В. Самый простой пример взаимодействия двух процессов с использованием функций Send(), Receive() и Reply() состоит в следующем: Процесс А посылает сообщение процессу В, выдав ядру запрос Send(). С этого момента процесс А становится SEND-блокированным до тех пор, пока процесс В не выдаст Receive(), подтверждая получение сообщения. Процесс В выдает Receive() процессу А, ожидающему сообщения. Процесс А изменяет свое состояние на REPLY-блокированное. поскольку от процесса В ожидается сообщение, он не блокируется. Если бы процесс В выдал Receive() до отправления ему сообщения, он оставался бы RECEIVE-блокированным до момента приема сообщения. В этом случает процесс А (отправитель) перешел бы сразу в REPLY-блокированное состояние после отправления сообщения процессу В. Процесс В выполняет необходимую обработку, определяемую полученным от процесса А сообщением, и выдает Reply(). Процесс А получает ответное сообщение и разблокировывается. Процесс В тоже разблокировывается. Какой из процессов начнет выполняться первым, зависит от их относительных приоритетов. Передача сообщений служит не только для обмена данными, но и для синхронизации выполнения нескольких взаимодействующих процессов. Рассматривая пример, приведенный выше: после того, как процесс А выдаст запрос Send(), он не может выполняться до тех пор, пока не получит ответное сообщение. Это служит гарантией того, что обработка данных, выполняемая процессом В для процесса А завершится до того, как процесс А сможет продолжить свою работу. В свою очередь процесс В после выдачи запроса Receive() может продолжать свою работу до поступления другого сообщения. Блокировка – состояние, когда выполнение процесса запрещено до момента завершения некоторой части протокола обмена сообщениями. Таблица 2. Состояния блокировок процессов.
|