Густав Олссон, Джангуидо Пиани - Цифровые системы автоматизации и управления (1087169), страница 100
Текст из файла (страница 100)
)реаль льности программисты работают непосредственно с операционной системой, ' Р' Гатывают резидентные программы и в рамках одного проекта смешивают язы'"я ог 1'Раммирования разного уровня, В этой главе не обсуждаются преимущества и "достатк 'аткн той или иной техники программирования, а па основе теории операцион'хсис 'е стел! приводятся практические Решения некоторых проблем. Раз " Рпз 'дел 10.1 посвящен основным понятиям, связанным с программами и процесса- Раздел 10.2 вводит некоторые концепции операционных систел! как для однопро) Рных, так и для распределенных конфи"уРацнй. В разделах 10.З и 10А рассмат)'тсо ля а ются проблемы защиты ресурсов и взаимн!Ого исклк>чсния и вводятся средства яя„, аз еле 1 вх Рсшсция (например, семафоры) В Раз"ел" 10 э обсуждается взаимодействие ~ду процессами, а в разделе 10.6 — практи кме метолы программирования для ,ктические.
мяч Реального времени. Завершает ~лаву О ~~~орых языков н операционных обзо неко 416 417 Глава 10. ПРогРаммиРование систем Реального вр Ремень 1 Общее понятие о процессах 10 1' систем длЯ пРогРаммиРованиЯ задач Реального вРемени в Разделе 10.7 М„т "«ервв первых пяти разделов носит формально-теоретический характер, последни е два ориентированы на практические задачи. 10.1. Общее понятие о процессах 10.1.1. Последовательное программирование и программирование задач реального времени Программа представляет собой описание объектов — констант и переменив,„ и операций, совершаемых над ними.
Таким образом, программа — это чистая и„. формация. Ее можно записать на какой-либо носитель, например на бумаву пвп на дискету. Программы можно создавать и анализировать на нескольких уровнях абстракппп (детализации) с помощью соответствующих приемов формального описания перепев. ных и операций, выполняемых на каждом уровне. На самом нижнем уровне использует. ся непосредственное описание — для каждой переменной указывается ее размер и адрвг в памяти.
На более высоких уровнях переменные имеют абстрактные имена, аопераппп сгруппированы в функции или процедуры. Программист, работающий на высоком уровне абстракции, не должен думать о том, по каким реальным адресам памяти хранятся переменные, и о машинных командах, генерируемых компилятором. Последовательное программирование (ведиелгга1ргопгаттглд) является наиболее распространенным способом написания программ.
Понятие "последовательное" поп. разумевает, что операторы программы выполняются в известной последовательностп один за другим. Целью последовательной программы является преобразование вхщ. ных данных, заданных в определенной форме, в выходные данные, имеющие другув форму, в соответствии с некоторым алгоритмом — методом решения (рис. 10.1) выходные дапные Рис. 10.1. Обработка данных последовательной программои ля исходных Таким образом, последовательная программа работает как фильтр для о ными данны. данных. Ее результат и характеристики полностью определяются входнь . т как прав!ув ми и алгоритмом их обработки, при этом временные показатели играют, ' Р второстепенную роль.
На резулыат не влияют ни инструментальные (я (язык прогРам мирования), ни аппаратные (быстродействие ПП) средства: от первы х зависят уг~ лия и время, затраченные на разработку и характеристики исполняемого кода вторых — скорость выполнения программы, но в любом случае выход ныеданные .' дут одинаковыми отличается в Программирование в реальном времени (геа(-гвте ргопгатт(лп) отличает лжен посто послед л довательного программирования — разработчик программы дол т . олпе ми к( но иметь в виду среду, в которой работает программа, будь то контроллер в истемзх Р волновой печи или устройство управления манипулятором робота. В с ал ного времени внешние сигналы, как правило, требуют немедленной Реап" ального вре. евльп процессора. В сущности, одной из наиболее важных особенностей систем ре смени является время реакции на входные сигналы, которое должно удовлетгэ вр „ть заданным ограничениям.
ввР" Специальные требования к программированию в реальном времени, в частности пео эбходимость быстро реагировать на внешние запросы, нельзя адекватно реализовать с помощью обычных приемов последовательного программирования. Насильстве нное последовательное расположение блоков программы, которые должны вывод виться параллельно, приводит к неестественной запутанности результирующего „„и вынуждает связывать между собой функции, которые по сути являются само„втельными.
В главе 2 были показаны проблемы, возникающие, если два функцио„мьпо независимых программных блока оказываются связанными друг с другом. н большинстве случаев применение обычных приемов последовательного проаимирования не позволяет построить систему реального времени. В таких систепвх независимые программные модули или задачи должны быть активными одновременно, т. е. работать параллельно, при этом каждая задача выполняет свои впвпифические функции. Такая техника известна под названием параллельного программирования (сопсиггепГ ргодгатттд).
В названии делается упор на взаимовействие между отдельными программными модулями. Параллельное исполнение пожег осуществляться на одной или нескольких ЭВМ, связанных распределенной сетью. В этой главе будут рассмотрены принципиальные вопросы, относящиеся к обоим случаям. 10.1.2. Программы и процессы Основным объектом в системах реального времени является процесс (ргосевв) плп задача (гавй). Между программами и процессами имеется существенное разливке Программы представлявот собой информацию о том, как обрабатывать и преобРазовывать исходные данные, а процессы суть программы, исполняемые цроцессоПроцесс состоит из кода, т. е.
инструкций программы — области кода, области ввппых, в которой хранятся переменные и константы, свободной динамически распРеделяемой рабочей области памяти — кучи (Ьеар) и стека (згасй) (рис. 10.2). Лва после ледних механизма зависят от конкретной реализации. Область стека примыкает хк че У ве и расширяется за ее счет. Программа, написанная на одном и том же языке высоког кого уровня, а затем откомпилированная и исполняемая на разных ЭВМ, поРэждает 'дает различные процессы, каждый из которых имеет собственные области кокан пд и данных, кучу и стек. Каж ь ждый процесс в любой момент времени находится в точно определенном состояппп,о но ° днозначно описываемом содержимым регистров процессора, расположением обввстей ко кода, данных и стека и счетчиком команд, указываклцим следующую исполняепую инст нструкцию в области кода.
Эта базовая информация об исполняющсмся пР~цессе н, се называется его контекстом (сопгехс). Существование контекста — это общее вопство п о пРоцессов, а то, какие регистры, структуры и указатели реально являются ча'тыр конте нтекста, зависит от используемого пРоцессора и операционной системы. Часты ным типом процессов являются потоки (гбгеагЬ). Они представляют собой 'эсть и Рограммы, которая может независимо исполняться на том же сам или другом и впт Роцессоре. Потоки порождаются процес~ам и выполняк>тся параллельно, т.
е. уют ток — это дочерний процесс (сй1(г(ргасевв) В отличие от процессов, потоки испольт общую область данных. т. е переменив'е породившего их процесса. Однако ьк ~вп 419 2 управление системными ресурсами ~0 418 старвиие адреса ~ — указатель версиииы стека ('стек расивиряеисся в «тараку младших) — указатель даииых младвиие адреса соЪед(п х:-1; х;= 2; х:-3; соепд; юг1се (х); Глава 10. Программирование систем реального вр иеви каждый поток имеет собственный контекст, включающий отдельные область кода и стек.
Потоки играют важную роль в операционных системах (ЛЧ1Х и Ъ'1пс(о~ )(.„ Рис. 10.2. Пример организации внутренней памяти процесса Последовательность преобразования программы в процесс состоит из сохранении исходного текста на компьютерном носителе (магнитная лента или диск), компиляции (сотрвЕаггои), связывания (ЕгпЕсЕпп), загрузки (Еоа«Е(пп) и исполнения (ехепс11ок) Эти шаги детально описываются в учебниках по программированию и операциоп ным системам и здесь рассматриваться не будут. 10.1.3. Параллельное программирование, мультипрограммирование и многозадачность Программирование в реальном времени требует одновременного исполнения пс скольких процессов илн задач на одной ЭВМ.