Состав ПО коммутационных станций
Язык программирования - это формализованный язык, который представляет собой совокупность алфавита, правил написания конструкций (синтаксис) и правил толкования конструкций (семантика).
Алфавит - фиксированный для данного языка набор основных символов, допускаемых для составления текста программы на этом языке.
Синтаксис - система правил, определяющих допустимые конструкции языка программирования из букв алфавита.
Семантика - система правил однозначного толкования отдельных языковых конструкций, позволяющих воспроизвести процесс обработки данных.
Языки программирования, если в качестве признака классификации взять синтаксис образования его конструкций, можно условно разделить на классы:
· машинные языки – языки программирования, воспринимаемые аппаратной частью компьютера (машинные коды);
· машинно-ориентированные языки – языки программирования, которые отражают структуру конкретного типа компьютера (ассемблеры);
· алгоритмические языки – не зависящие от архитектуры компьютера языки программирования для отражения структуры алгоритма (Паскаль, Фортран, Бейсик и др.);
· процедурно-ориентированные языки – языки программирования, где имеется возможность описания программы как совокупности процедур (подпрограмм);
· проблемно-ориентированные языки – языки программирования, предназначенные для решения задач определенного класса (Лисп, РПГ, Симула и др.);
· интегрированные системы программирования.
Программирование ЭВМ можно осуществлять на языке машинных команд (машинных кодов), на языке, использующем символическое обозначение машинных команд, языке ассемблера и языке высокого уровня. Понятие уровня языка определяется аппаратно–программными средствами, с помощью которых инструкции, записанные на некотором языке, переводятся в язык, понятный для ЭВМ.
Современные ЭВМ имеют несколько уровней, каждому из которых соответствует определенный язык (язык данного уровня).
Самый нижний уровень — микропрограммный, который обеспечивает выполнение инструкций системы команд ЭВМ. Микропрограммный уровень определяется реализацией АЛУ, составом и назначением регистров в процессоре и т. д., т. е. ориентирован на конкретную ЭВМ (машинно-ориентирован).
Следующим уровнем является машинный уровень, которому соответствует язык машинных команд.
Взаимодействие между рассмотренными уровнями производится следующим образом:
Каждая машинная команда, поступающая из памяти в процессор, анализируется и вызывает исполнение определенной микропрограммы, реализующей заданную командой операцию.
Ассемблерный уровень является символической формой представления языка машинных команд. Язык ассемблера более удобен для программирования, но требует использования специальной программы для перевода на язык машинных, команд.
Перечисленные низкие языковые уровни относятся к разряду машинно-ориентированных.
Следующий уровень представлен языками высокого уровня (ЯВУ), которые часто называют проблемно-ориентированными, поскольку каждый из них разработан для решения определенного круга задач: научных (Алгол, Фортран, Бейсик), экономических (Кобол), управления в реальном масштабе времени Ада, Модула.
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ МАШИННЫХ КОМАНД
Язык машинных команд воспринимается ЭВМ непосредственно. Чтобы заставить ЭВМ решить конкретную задачу, необходимо составить алгоритм ее решения, доведя его детализацию до уровня отдельных операций, предусмотренных в системе команд. Каждую команду необходимо записать в соответствующем для данной команды формате, т. е. в виде одного или нескольких машинных слов, содержащих 0 или 1 в каждом разряде. Поля, отведенные под указание конкретных адресов ОП и исходных значений операндов, должен заполнить непосредственно программист.
Написанная таким образом программа в кодах машинных команд вводится в ОП ЭВМ, например с использованием дисплея. После этого можно произвести ее запуск, записав в счетчик команд адрес ячейки памяти, содержащей первую команду программы, и произведя инициализацию ее выполнения. Ввод программы должен быть произведен в ту область памяти, которая планировалась при написании программы.
Программирование в машинных кодах имеет ряд трудностей.
Одна из них состоит в определении адресов при планировании размещения программы в ОП. Поскольку при программировании используются истинные адреса ячеек ОП, то необходимо, чтобы распределение памяти было уже произведено. В то же время в процессе программирования у программиста нет еще достаточной информации о полном количестве команд в будущей программе, о том, в каких конкретно ячейках будут размещены эти команды и сколько ячеек понадобится для хранения промежуточных результатов. Поэтому к началу составления программы делается лишь ориентировочное распределение памяти, которое уточняется по ходу составления программы. По этой причине целый ряд команд невозможно сразу записать в окончательном виде. Некоторые поля адресов приходится временно оставлять пустыми, заполняя их по мере уточнения мест в памяти, на которые в этих написанных ранее командах имеются ссылки (например, команды передачи управления). Отсюда возникает необходимость постоянно обращаться к уже написанной части программы.
В программы, написанные в машинных кодах, трудно вносить какие-либо изменения и исправления, особенно в том случае, когда они связаны с изменением распределения памяти. Написанная программа плохо читается и понимается, вследствие чего усложняются процесс поиска и исправления ошибок, документирование готовой программы. Немаловажным является также и то, что машинные коды трудно запоминать.
Как следствие вышесказанного — производительность труда программиста в случае использования машинных кодов довольно низкая. В настоящее время такая форма программирования используется редко, например, в тех случаях, когда требуется. Повысить быстродействие работы программы при минимальном объеме ОП.
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ АССЕМБЛЕРА
Программирование с использованием языка ассемблера свободно от описанных выше недостатков. В языке ассемблера используют символическое обозначение машинных команд, в котором при написании каждой команды информация в ее полях задается не в виде машинного кода операции и истинных адресов операндов, а в виде их условных символических обозначений. Эти обозначения специально выбираются таким образом, чтобы точно определить содержание каждой команды (так их легче запомнить) и обеспечить наглядность и простоту ее понимания.
Программирование на языке ассемблера обеспечивает также независимость программы от конкретного распределения памяти. В качестве символического обозначения команд принято использовать сокращение английских или русских слов, определяющих выполняемую операцию.
Программа, составленная с помощью символических обозначений, непонятна для ЭВМ, которая воспринимает только язык машинных команд. Поскольку, каждое символическое обозначение соответствует определеннойI машинной команде, то символическую программу можно перевести на язык машинных команд, например с помощью таблицы соответствия. Такой перевод может производить сама ЭВМ с помощью специальной программы, которая также называется ассемблером.
Программа, написанная на исходном символическом языке, называется исходной, программа, переведенная на язык машинных команд с помощью программы ассемблера, называется объектной. В общем случае программы, преобразующие программу, написанную на одном языке, в программу на другом языке, называются трансляторами (в данном случае транслятором является программа ассемблер), а сам процесс перевода называется трансляцией.
В программе, написанной на языке ассемблера, используется два типа команд:
· символические команды для ЭВМ.
· обращенные к ассемблеру (псевдокоманды), служащие для управления процессом
трансляции. Псевдокоманды могут определять такие директивы для транслятора, как начало программы на языке ассемблера, зарезервировать указанное число ячеек памяти без установки (или с установкой) начального значения, начало новой программы и т. д.
Формат оператора на языке ассемблера состоит из четырех полей: поля метки, поля операции, поля операндов и поля комментария.
Для программирования на языке ассемблера ЭВМ должна быть укомплектована дисплеем и печатающим устройством для воспроизведения листинга — печатной копии программы, подготавливаемой транслятором, включающей операторы исходного языка и оттранслированную программу.
Кроме программы транслятора используется еще ряд программ.
Редактирующая программа оперирует исходной программой как с обычным текстом, позволяет добавлять, исключать или заменять части исходной программы.
Компоновочная программа используется для объединения нескольких объектных программ (модулей) в одну общую программу, которая после этого получает название загрузочного модуля.
Обычно программа состоит из нескольких частей — модулей. Модули могут транслироваться по отдельности, в результате чего получается несколько объектных модулей, которые должны войти в состав общей программы.
Задачей компоновочной программы является объединение (связывание) всех модулей и привязка всей программы к абсолютным адресам ОП. Компоновочную программу называют также редактором связей.
Другой классификацией языков программирования является их деление на языки, ориентированные на реализацию основ структурного программирования, и объектно-ориентированные языки, поддерживающие понятие объектов и их свойств и методов обработки.
Центральный процессор современного компьютера — это устройство, исполняющее команды. Полный набор команд конкретного процессора называют машинным языком или системой команд.
Процессоры, которые могут исполнять программы на одном и том же машинном языке, называются бинарно-совместимыми. Отношение бинарной совместимости не всегда симметрично: например, более новый процессор может иметь дополнительные команды — тогда он будет бинарно-совместим с более старым процессором того же семейства, но не наоборот. Нередко бывает и так, что более новый процессор имеет совсем другую систему команд, но умеет исполнять программы на машинном языке старого процессора в так называемом режиме совместимости — например, все процессоры семейства х86 могут исполнять программы для Intel 8086 и 80286. Некоторые ОС для х8б даже предоставляют возможность собрать единую программу из модулей, использующих разные системы команд.
Язык ассемблера — это символическое представление машинного языка. Все процессы в машине на самом низком, аппаратном уровне приводятся в действие только командами (инструкциями) машинного языка. Отсюда понятно, что, несмотря на общее название, язык ассемблера для каждого типа компьютера свой. Это касается и внешнего вида программ, написанных на ассемблере, и идей, отражением которых этот язык является. В чем же разница между машинным языком и языком ассемблера? Ведь когда не было ассемблера все программы писались на машинном языке. Но в конце концов писать программу на машинном языке очень трудно и тогда появился язык ассемблера. Само название "машинный язык" говорит само за себя - язык понятный для машины (компьютера). Как Вы уже, наверное, знаете компьютер все команды переводит в числа, да и понимает он только числа так вот машинный язык это набор чисел представляющих те или иные команды. Человеку же очень трудно запомнить какое число что обозначает, ну например число 40h означает что нужно увеличить регистр АX на 1, а 48h - уменьшить АХ на 1. Если набор команд процессора еще не очень большой (хотя бы 100 команд) еще можно запомнить что, какое число обозначает. А если команд 1000 или больше - это крайне тяжело. Тогда решили каждой команде дать свое имя и написать программу (транслятор) которая бы вместо словесных названий команд подставляла соответствующие числа. Естественно названия командам давались по смыслу работы команды. Например, inc ax - в переводе означает увеличить АХ, от английского incresize, а dec AX - уменьшить ах. Транслятор же подставляет вместо этих слов их коды на машинном языке - 40h и 48h. Итак, ассемблером можно назвать такое представление команд машинного языка, где каждой команде соответствует уникальное имя, по смыслу подходящее логике команды.
В настоящее время насчитывается несколько сотен языков высокого уровня, а если считать и их диалекты, то это число возрастет до нескольких тысяч. Языки программирования высокого уровня существенно отличаются от машинно-ориентированных (низкого уровня) языков. Во-первых, машинная программа в конечном счете записывается с помощью лишь двух символов 0 и 1. Во-вторых, каждая ЭВМ имеет ограниченный набор машинных операций, ориентированных на структуру процессора. Как правило, этот набор состоит из сравнительно небольшого числа простейших операций, типа: переслать число в ячейку; считать число их ячейки; увеличить содержимое ячейки на +1 и т.п. Команда на машинном языке содержит очень ограниченный объем информации, поэтому она обычно определяет простейший обмен содержимого ячеек памяти, элементарные арифметические и логические операции. Команда содержит код и адреса ячеек, с содержимым которых выполняется закодированное действие.
Языки программирования высокого уровня имеют следующие достоинства:
· алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста;
· набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса;
· конструкции команд (операторов) отражают содержательные виды обработки данных и задаются в удобном для человека виде;
· используется аппарат переменных и действий с ними;
· поддерживается широкий набор типов данных.
Таким образом, языки программирования высокого уровня являются машинно-независимыми и требуют использования соответствующих программ-переводчиков (трансляторов) для представления программы на языке машины, на которой она будет исполняться.
Примеры языков высокого уровня:
· Fortran: это первый компилируемый язык созданный Джимом Бэкусом в 50-е годы. Основным критерием при разработке компиляторов Фортрана являлась эффективность исполняемого хода. Поэтому хотя в Фортране был впервые реализован ряд важнейших понятий программирования, удобство создания программ было принесено в жертву возможности получения эффективного машинного кода;
· Pascal: язык Паскаль, созданный в конце 70-х годов основоположником множества идей современного программирования Никлаусом Виртом, во многом напоминает Алгол, но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его при создании крупных проектов;
· C: данный язык был создан в лаборатории Bell и первоначально не рассматривался как массовый. Он планировался для замены ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы, и в то же время не зависеть от конкретного вида процессора;
· С++ - это объектно-ориентированное расширения языка Си, созданное Бьярном Страуструпом в 1980 году. Множество новых мощных возможностей, позволивших резко увеличить производительность программ, наложилось на унаследованную от языка Си определенную низкоуровневость, в результате чего создание сложных и надежных программ потребовало от разработчиков высокого уровня профессиональной подготовки;
· Java: этот язык был создан компанией Sun в начале 60-х годов на основе Си++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей. Но главная особенность этого языка - компиляция не в машинный код, а в платформо-независимый байт-код. Этот байт-код может выполнятся с помощью интерпретатора - виртуальной машины JVM (Java Virtual Machine), версии которой созданы сегодня для любых платформ.
Транслятор — это программа, которая переводит входную программу на исходном (входном) языке в эквивалентную ей выходную программу на результирующем (выходном) языке.
Компилятор — это транслятор, который осуществляет перевод исходной программы в эквивалентную ей объектную программу на языке машинных команд или на языке ассемблера. Таким образом, компилятор отличается от транслятора лишь тем, что его результирующая программа всегда должна быть написана на языке машинных кодов или на языке ассемблера. Результирующая программа транслятора, в общем случае, может быть написана на любом языке — возможен, например, транслятор программ с языка Pascal на язык С. Соответственно, всякий компилятор является транслятором, но не наоборот — не всякий транслятор будет компилятором. Например, упомянутый выше транслятор с языка Pascal на С компилятором являться не будет.
Интерпретатор — это программа, которая воспринимает входную программу на исходном языке и выполняет ее. В отличие от трансляторов интерпретаторы не порождают результирующую программу (и вообще какого-либо результирующего кода) — и в этом принципиальная разница между ними. Интерпретатор, так же как и транслятор, анализирует текст исходной программы. Однако он не порождает результирующей программы, а сразу же выполняет исходную в соответствии с ее смыслом, заданным семантикой входного языка. Таким образом, результатом работы интерпретатора будет результат, заданный смыслом исходной программы, в том случае, если эта программа правильная, или сообщение об ошибке, если исходная программа неверна.
К числу основных достоинств компилируемых языков по сравнению с интерпретируемыми относятся:
· в компилируемых языках процесс построения (создания) исполняемого модуля выполняется один раз, а не при каждом запуске, что экономит время;
· в компилируемых языках обнаружение синтаксических ошибок происходит до запуска программы на выполнение, а не в его процессе.
Несмотря на очевидные недостатки интерпретируемых языков, они применяются в разных специфических задачах, а также в тех случаях, где простота программы важнее ее производительности.
При разработке программного обеспечения систем коммутации с программным управлением (СКПУ) МККТТ рекомендует использовать следующие языковые средства: язык, предназначенный для описания алгоритмов работы систем коммутации с программным управлением, - язык спецификаций (язык SDL); алгоритмический язык программирования высокого уровня реального времени для написания и отладки программ (язык CHILL); язык, обеспечивающий взаимодействие человека с управляющей ЭВМ (язык MML).
ПРЕДСТАВЛЕНИЕ О РАБОТЕ ТРАНСЛЯТОРОВ
В настоящее время для реализации трансляторов используются три принципа: прямой трансляции, интерпретации и трансляции на некоторый промежуточный язык. Каждый из них имеет свои достоинства и недостатки.
Принцип прямой трансляции реализуется программой-транслятором, которая производит перевод текста исходной программы непосредственно в машинный код. При этом текст программы переводится полностью. Такие трансляторы часто называют компиляторами. Непосредственно для исполнения в ЭВМ загружается уже предварительно оттранслированная программа, поэтому в ОП ЭВМ она занимает относительно мало места и выполнение ее происходит с высоким быстродействием. Однако в случае обнаружения ошибок после их исправления необходимо повторить процесс трансляции для всей программы.
Принцип интерпретации реализуется специальными программами-интерпретаторами. Интерпретатор помещается в память ЭВМ вместе с текстом исходной, программы. В процессе выполнения программы интерпретатор просматривает последовательно оператор за оператором исходный текст, анализирует каждый оператор и выполняет машинные команды, составляющие содержание каждого оператора исходного текста. Интерпретатор в определенном смысле действует как «аппаратный процессор», в котором реализована система команд, согласованная с инструкциями операторов исходного текста.
В качестве достоинства можно отметить то, что при использовании интерпретатора в записанную программу легче вносить исправления и модификации. Основными недостатками являются необходимость использования памяти ЭВМ для хранения программы интерпретатора и снижение быстродействия выполнения программы приблизительно на порядок по сравнению с выполнением программы, переведенной посредством компиляции.
Третий принцип реализуется путем трансляции на промежуточный язык, которым, как правило, является язык ассемблера. В качестве "примеров использования рассмотренных принципов могут служить трансляторы с таких языков, как Фортран (прямая трансляция), Бейсик (интерпретация), Паскаль (трансляция на промежуточный язык).
Остановимся более подробно на работе трансляторов (компиляторов), использование которых характерно для языков реального времени. В работе транслятора можно выделить четыре основных этапа: лексический анализ, синтаксический анализ, генерация объектной программы и этап оформления и документирования программы.
Лексический анализ является предварительным этапом. Его назначение состоит в том, чтобы представить текст исходной программы в компактном виде, удобном для дальнейшей обработки. В частности, в языках высокого уровня для разделения фраз используются символы пробелов, комментарии и т. д. Причем на число используемых разделительных символов не накладывается никаких ограничений. В процессе лексического анализа разделительные символы (включая комментарий) исключаются из текста, предназначенного для дальнейшей обработки. Лексический анализатор выполняет также кодировку ключевых слов языка и других символов.
Синтаксический анализ производится на основе формального определения синтаксиса языка, на котором написан текст исходной программы. В процессе синтаксического анализа производится разбор исходного текста, в результате которого выделяются все компоненты, из которых состоит программа. На этом этапе определяется, является ли исходный текст программы с точки зрения синтаксиса программой в данном языке программирования.
Важная функция синтаксического анализа — выявление ошибок синтаксического характера и выдача сообщений пользователю, в которых указывается место в исходном тексте, где допущена ошибка, и ее характер.
На этапе генерации объектной программы производится непосредственная трансляция, обработанного текста исходной программы на язык машинных команд, т. е. вырабатывается соответствующая последовательность машинных команд.
Этап оформления и документирования связан с подготовкой распечатки программы-листинга. По указанию пользователя на печать может выдаваться различного рода дополнительная информация, вырабатываемая транслятором.
Язык спецификаций и описаний SDL впервые был определен рекомендациями МККТТ серии Z.100 в 1976 году (Оранжевая книга). Как и любой алгоритмический язык высокого уровня, он имеет свой алфавит, синтаксис и семантику. SDL предназначен для облегчения взаимодействия между специалистами при формализованном рассмотрении структурных и поведенческих свойств коммуникационных систем.
Основной областью применения SDL является описание различных аспектов поведения систем реального времени. Возможными применениями являются:
· обслуживание вызова в коммутационных системах;
· поддержка работоспособности и исправление сбоев в общих телекоммуникационных системах;
· управление системой (например, управление перегрузками, процедуры модификации и расширения возможностей);
· вопросы сопровождения и функционирования, управление сетями;
· протоколы передачи данных.
В общем случае, SDL может быть использован для описания поведения любого объекта, допускающего описание с помощью дискретной модели; иными словами, объект поддерживает связь со своей окружающей средой с помощью дискретных сообщений.
SDL может быть использован для неформальной (и/или формально неполной) спецификации системы на высоком уровне, для полуформальной спецификации и для детальной спецификации. В зависимости от той среды, которая будет пользоваться осуществленной спецификацией, многие аспекты описания некоторой системы могут быть оставлены на уровне соглашения между разработчиком спецификации и тем, кто будет ею пользоваться.
Язык программирования высокого уровня МККТТ CHILL разработан по рекомендации МККТТ как средство для создания программного обеспечения АТС с программным управлением. При разработке использовался опыт, приобретенный при разработке и использовании таких языков программирования высокого уровня, как Паскаль, Алгол, PL/1. Полное формальное описание языка CHILL приведено в Рекомендации МККТТ Z.200.
Программа, написанная на языке CHILL, должна содержать три обязательные компоненты:
· описание объектов данных;
· описание действий, которые должны выполняться над объектами данных;
· описание структуры программы.
Описание объектов данных, являющихся информационными единицами программы, производится с помощью операторов описания и операторы определения. Описание действий производится с помощью операторов действий, задающих как конкретные операции, выполняемые над объектами данных, так и порядок выполнения этих операций. Структура программы задается оформлением описаний, определений и действий в виде специальных программных единиц, которые определены в CHILL.
Следует отметить, что наряду с другими в CHILL определена программная структура PROCESS, которая используется как средство описания параллельных действий во времени. Включение в состав языка программной структуры PROCESS и определяет CHILL как язык реального времени.
Каждому объекту данных в CHILL должен быть предписан определенный тип, задающий совокупность свойств, присущих некоторому множеству возможных значений объекта, его внутреннюю структуру, метод доступа к значению. Тип определяет также набор допустимых операций, которые могут выполняться с объектом данных.
Язык общения (диалога) человека с ЭВМ MML впервые был определен рекомендациями МККТТ серии Z.300 в 1988 году (Синяя книга). Он может использоваться, чтобы облегчить функции технической эксплуатации и обслуживания встроенных систем программного управления различных типов на электронных АТС. В зависимости от национальных требований, MML может также использоваться, чтобы облегчить установку и приемочные испытание таких систем.
MML содержит особенности, которые достаточны для гарантии того, что все уместные функции для технического обслуживания, установки и приемочных испытаний встроенных систем программного управления могут быть выполнены. Основные особенности языка MML следующие:
· MML обеспечивает последовательный интерфейс, который является легким для изучения и удобным новичками также как экспертам, делающий возможным ввод команд и интерпретацию откликов удобными для всех пользователей;
· MML гибок, позволяя оптимизировать разработку системы применительно к решаемым задачам. Это обеспечивается наличием разнообразных форм ввода/вывода команд, включая прямой ввод, меню и формы;
· MML приспосабливаем к различным видам персонала и к различным национальным языкам и организационным требованиям;
MML имеет открытую структуру, т.е. дополнение любой новой функции или требования не оказывает никакого влияния на существующие
Программное обеспечение ЭВМ – это организованная совокупность взаимосвязанных и взаимодействующих программ и соответствующих им данных, предназначенных для обеспечения целенаправленной работы ЭВМ.
Как и любое программное обеспечение большого объема, программное обеспечение СКПУ содержит все три его составляющие: инструментальное, прикладное и системное программное обеспечение.
Инструментальное программное обеспечение предназначено для автоматизации проектирования программ на различных уровнях – от уровня алгоритмов до уровня машинных команд. Автоматизации процесса проектирования программ основывается на использовании специальных систем автоматизации проектирования (САПР), соответствующих различным уровням разработки программного обеспечения. Объем и сложность программного обеспечения СКПУ диктуют необходимость использования следующих САПР:
1. САПР на основе языка спецификаций (МККТТ рекомендует использовать язык SDL, основанный на представлении систем коммутации в языке конечных автоматов). САПР на основе языка SDL обеспечивает автоматическое преобразование алгоритма функционирования СКПУ, описанного в терминах SDL, в программу на одном из языков программирования. Такая САПР в качестве составных элементов содержит:
· программу верификации, обеспечивающую автоматический поиск логических ошибок в первичном описании алгоритмов СКПУ;
· программу структуризации, обеспечивающую автоматическое преобразование первичного описания алгоритмов СКПУ к структурному виду, соответствующему требованиям структурного программирования.
2. САПР на языке программирования высокого уровня реального времени. Наиболее характерными примерами таких языков являются языки Ада, Модула и CHILL (разработан под эгидой МККТТ). Применение этого языка позволяет повысить производительность труда программиста, т.к. в нем используется целый ряд конструкций, специально предназначенных для разработки программ поддержки функционирования систем реального времени.
3. САПР на машинно – зависимом языке программирования высокого уровня реального времени. Такой язык дает все преимущества обычного языка программирования высокого уровня и вместе с тем позволяет учитывать архитектурные особенности конкретной ЭВМ, входящей в состав управляющей системы.
4. САПР на языке ассемблера. Языки низкого уровня типа ассемблера используются для разработки программ с нормированным временем выполнения. В состав САПР на языке ассемблера входят программы:
· транслятор, обеспечивающий автоматическое преобразование программ с языка ассемблера в язык машинных команд;
· редактор связей (компоновщик), служащий для объединения различных частей одной программы в единый программный модуль.
Прикладное программное обеспечение СКПУ делится на основное и вспомогательное. Основное прикладное программное обеспечение содержит программы и данные, предназначенные для обеспечения функционирования ЭВМ в процессе управления СКПУ, т.е. обеспечивают все этапы технологического процесса установления соединений.
Основное прикладное программное обеспечение СКПУ состоит из коммутационных, административных и программ техобслуживания. Коммутационные программы предназначены для управления процессом установления соединения на станции (определение состояния абонентской линии, прием номера вызываемого абонента, обработка всех видов сигнализации и т.д.). Административные программы служат для удовлетворения запросов абонентов и администрации сети связи (управление абонентскими и станционными данными, контроль телетрафика и сбор статистической информации, учет стоимости разговора и т.д.). Программы техобслуживания обеспечивают поддержание в работоспособном состоянии аппаратно – программных средств СКПУ (контроль оборудования с целью выявления неисправностей, диагностика отказавшего устройства, включение в работу вспомогательных устройств и т.д.).
Вспомогательное прикладное программное обеспечение содержит системы автоматизации отладки, испытательных программ и генерации основного прикладного программного обеспечения. В задачу системы автоматизации отладки входит прежде всего верификация, под которой понимают обнаружение и устранение ошибок, допущенных при разработке основного прикладного программного обеспечения. Система автоматизации отладки дает разработчику удобные и эффективные средства управления процессом выполнения отлаживаемых программ, включающие принудительную остановку их выполнения с выведением промежуточных результатов работы, учет временных соотношений и т.д. Система генерации основного прикладного программного обеспечения необходима для подготовки программного обеспечения для каждой конкретной станции. Эта система обеспечивает учет конкретных особенностей отдельных экземпляров АТС (емкость, число и коды направлений, категория абонентов и т.д.). Система испытательных программ предназначена для проверки правильности функционирования оборудования и программного обеспечения СКПУ после его установки на объекте без подключения не станцию реальной нагрузки. Эти же программы применяются при расширении емкости станции, обеспечивая проверку работоспособности вновь установленного оборудования.
Системное программное обеспечение можно разделить на исполнительную и инструментальную операционные системы. Несмотря на кажущуюся общность назначения исполнительной и инструментальной операционных систем (поддержка функционирования соответствующих программ), между ними существует принципиальная разница, заключающаяся в степени участия человека в управлении ходом работы ЭВМ (степень интерактивности). В инструментальной операционной системе управление главным образом осуществляется посредством директив, получаемых от оператора, которые вызывают выполнение определенной последовательности действий. В исполнительной операционной системе выполнение действия вызывается в результате работы специализированной управляющей программы операционной системы при минимальном участии человека.
Применительно к СКПУ исполнительная операционная система должна обеспечивать параллельное выполнение большого числа программных модулей с различными приоритетами и периодами запуска. Таким образом, средства интерактивного общения в случае инструментальной операционной системы имеют определяющее значение для ее функционирования, а в случае исполнительной операционной системы – лишь вспомогательное, например при возникновении аварийных ситуаций в СКПУ и проведении плановых контрольно – технологических проверок. Интерактивные средства исполнительной операционной системы МККТТ рекомендует проектировать на основе языка общения (диалога) человека с ЭВМ MML (Man – Machine Language).
Язык спецификаций и описаний SDL впервые был определен рекомендациями МККТТ серии Z.100 в 1976 году (Оранжевая книга). Язык предназначен для описания структуры и функционирования систем реального времени, в частности сетей связи. SDL построен на базе модели конечного автомата по объектно-ориентированной схеме.
Для успешного анализа и синтеза систем SDL должен удовлетворять следующим требованиям:
· содержать хорошо определенное множество концепций;
· давать ясные, точные и краткие спецификации и описания;
· позволять составлять спецификации и описания, однотипные по отношению друг к другу;
· приводить к созданию средств анализа и синтеза систем, базирующихся на компьютерах.
В основе языка лежат следующие общие концепции SDL:
1. Объекты спецификаций и описаний прямо отделены от их определений, т.е. используются только определения объектов с целью уменьшения числа необходимых параметров. Определение задает тип объекта. Для данного типа объекта создается некоторое число требований. Взаимосвязь концепций “определение”, “тип” и “требование” представлена на рисунке 1:
Рисунок 1 - Взаимосвязь концепций «определение», «тип» и «требование»
2. Структура и поведение системы рассматриваются с позиции стороннего наблюдателя. Эта концепция единственно возможная, т.к. находясь внутри системы невозможно отобразить ее поведение в целом. Наблюдение за системой со стороны позволяет вводить также различные уровни рассмотрения (от общего до детального и наоборот).
3. Динамика поведения системы описывается с помощью термина “процесс” – последовательности предусмотренных событий, определяемой объектом или явлением и выполняющейся в заданных условиях. Моделью процесса на SDL является машина с конечными состояниями, обладающая следующими свойствами:
· число состояний в модели конечно;
· любое состояние достижимо из любого другого состояния за конечное число шагов;
· отсутствуют “мертвые” состояния, попав в которые процесс не может быть возобновлен.
4. Время в SDL задается неявно как последовательность смены переходов и состояний при выполнении конкретного процесса. При этом считается, что переход выполняется мгновенно.
Однако в SDL может быть введено и астрономическое (или дискретное) время. В SDL определены две основные формы конкретной реализации языка: графический SDL, в котором система описывается в виде диаграмм, состоящих из графических символов (SDL/GR – Graphic Representation) и текстовый SDL, совпадающий с формой описания обычных языков программирования (SDL/PR – Phrase Representation).
Структурные свойства системы электросвязи, для отображения которых используется SDL, отображаются в следующих основных документах:
· диаграмме системы;
· диаграмме блоков.
Так как SDL дает возможность изменить уровень абстракции рассмотрения системы (использование концепции структурирования и уточнения [1]), то имеются следующие дополнительные документы, раскрывающие структурные свойства системы:
· диаграмма дерева блоков;
· диаграмма подструктуры канала.
Динамические свойства системы электросвязи отображаются одним основным документом – диаграммой процесса. Однако для точного, полного и ясного отображения динамических свойств системы одного документа недостаточно, и поэтому используются следующие дополнительные документы:
· диаграмма обзора состояний;
· матрица состояние / сигнал;
· временные схемы.
Самый общий объект, описываемый на SDL, называется системой. Все остальные объекты находятся на более низких уровнях иерархии определений. В SDL система не имеет прямого определения из – за известной сложности и расплывчатости этого понятия. Тип и требование системы задаются функционально через цепочку определений: система – блок – процесс. При этом точно задается определение процесса – это отображение выполнения функции объекта во времени. Блок является объектом SDL, содержащим по крайне мере один процесс. И определение системы – это объект SDL, содержащий по крайне мере один блок.
Таким образом, система – это то, что определяется спецификацией или описанием на SDL. Все, что не вошло в описание системы, называется окружением (внешней средой) системы. Система состоит из одного или нескольких блоков, соединенных между собой и с окружающей средой каналами, по которым передаются сигналы. Из окружения система получает внешние сигналы (являющиеся объектами языка SDL) и в окружение возвращает ответы. Запуск системы возможен только по сигналу извне. Каждый блок и канал в системе имеют уникальное имя. Каналы бывают одно- или двусторонними. При каждом канале должны быть указаны имена всех сигналов, которые этот канал может передавать. При сигнале могут быть указаны имена сортов (предварительно определенных типов данных), таким образом, сигнал может нести с собой значения указанных сортов. Несколько сигналов могут быть объединены в один список, такому списку присваивается уникальное имя. Один сигнал может входить в разные списки.
Средствами SDL обеспечивается многоуровневое описание системы использование концепции структурирования и уточнения). По мере "спуска" от уровня к уровню либо детализируются описания уже имеющихся в системе объектов, либо вводятся новые объекты. Блок может быть разбит на более мелкие единицы – подблоки, которые, в свою очередь, сами являются блоками. Подблоки соединяются "новыми" каналами между собой и с рамкой блока. Будем называть "старыми" каналы, входящие или выходящие из блока. В разбиении блока для "старых" каналов должны быть указаны имена "новых" каналов, которые подсоединены к старым. Это подсоединение происходит таким образом, что каждый сигнал, поступивший по "старому" каналу, должен передаваться только по одному "новому" каналу, "новый" канал не может передавать сигнал, который не передавался по "старому" каналу. Аналогичными средствами осуществляется разбиение канала на подканалы и новые блоки.
На самом нижнем уровне иерархии определений блоки содержат процессы, являющиеся функциональными компонентами системы и определяющие ее поведение. Внутри блока маршруты связывают процессы между собой и с рамкой блока. При графическом изображении маршруты, которые связывают процессы с рамкой блока, должны либо начинаться от той точки, в которой в блок входит канал, либо оканчиваться в той точке, в которой из блока выходит канал. К одному входному/выходному каналу могут быть присоединены начальные/конечные точки нескольких маршрутов. Распределение сигналов по маршрутам, присоединенным к некоторому каналу, происходит таким образом, что по каждому маршруту должен передаваться хотя бы один сигнал, поступающий по каналу, а каждый сигнал, поступающий в канал, должен передаваться хотя бы по одному присоединенному маршруту. Кроме того, маршрут не может передавать сигнал, который не передавался по каналу.
Описание процесса состоит из трех частей: заголовка, декларативной части и тела процесса. Заголовок процесса содержит имя, число экземпляров и список формальных параметров с указанием их типов. Формальные параметры - это переменные, используемые в теле процесса. Число экземпляров - пара целых чисел, первое из которых указывает количество создаваемых экземпляров процессов в момент инициации системы, второе задает максимальное число экземпляров процессов, которые могут существовать одновременно в блоке. Так как по одному описанию процесса может быть создано несколько экземпляров, то каждый экземпляр должен получить личный идентификатор. Для этой цели каждый процесс обладает переменной self, которой при создании экземпляра процесса присваивается личный идентификатор этого экземпляра.
Каждый экземпляр процесса обладает еще тремя переменными: parent, offspring и sender. Переменной parent порожденного процесса присваивается значение переменной self родительского процесса. Переменной offspring родительского процесса присваивается значение переменной self его последнего отпрыска. Переменной sender присваивается личный идентификатор процесса-отправителя.
Декларативная часть процесса содержит описания констант, типов, переменных, экспортируемых переменных, переменных обозревания, входных и выходных сигналов, списков сигналов, таймеров, процедур и макрокоманд.
Тело процесса описывает действия, которые совершает процесс под влиянием входных сигналов. Процесс либо находится в одном из своих состояний, либо совершает переход. При этом каждое состояние должно иметь свое уникальное по отношению к этому процессу имя. Процесс имеет одну стартовую вершину, за которой следует переход. Этот переход совершается не под влиянием входного сигнала, а в результате возникновения процесса. Дальнейшие переходы из состояния в состояние возможны только под воздействием входных сигналов, исключение составляют переходы, входящие в конструкцию "непрерывный сигнал".
Все сигналы, пришедшие в порт процесса, образуют в нем очередь. Процесс, находясь в одном из своих состояний, обращается к очереди сигналов. Если очередь пуста, то процесс ждет. Если не пуста, то для каждого состояния процесса однозначно указано, как должен реагировать процесс на любой сигнал, который стоит первым в очереди. Возможны три ситуации:
1) явно указано, какой переход должен совершить процесс. Тогда процесс удаляет из очереди сигнал и начинает указанный переход;
2) явно указано, что восприятие сигнала должно быть отложено до того, как процесс войдет в следующее состояние. Тогда процесс оставляет сигнал на своем месте в очереди и переходит к обработке следующего сигнала. Это действие называется сохранением сигнала – save;
3) нет никакого указания на то, как должен реагировать процесс на сигнал. В этом случае сигнал удаляется из очереди и процесс переходит к обработке следующего сигнала.
Последовательность действий, выполняемых процессом во время перехода, может разветвляться. Для этого осуществляется проверка истинности некоторого выражения в конструкции decision , которая состоит из вопроса и не менее двух ответов. После каждого ответа указывается последовательность действий, которую должен выполнить процесс в данном случае. Если после нескольких ответов должна быть выполнена одна и та же последовательность действий, то эти ответы объединяют вместе. Также возможен только один ответ else, охватывающий все значения выражения (стоящего в вопросе), не учтенные во всех остальных ответах.
Порождение одного процесса другим осуществляется с помощью операции запроса на создание другого процесса. Процесс может порождать другие процессы только в своем блоке. Иначе процесс должен передать соответствующий сигнал процессу-производителю в другом блоке.
Один экземпляр процесса может передавать различным экземплярам других процессов значение некоторой переменной с помощью экспортно-импортной операции. Для этого при описании переменной он должен указать, что ее значение в дальнейшем будет экспортироваться. Если другой процесс хочет получить экспортированное значение переменной, то он должен в своей декларативной части указать, что намеревается импортировать это значение.
Назначение языка SDL - описание систем реального времени. Комплекс, реализующий систему, должен обладать средствами управления временем, например часами, которые показывают абсолютное время в согласованных единицах времени. В языке предусмотрена стандартная функция now, значением которой является значение текущего момента абсолютного времени, и имеется возможность описания таймеров и установки в них любого времени, указанного в принятых единицах. Реализуется эта возможность посредством оператора set. Когда абсолютное время в системе станет равным установленному в таймере, в порт процесса будет установлен сигнал от таймера, имя которого совпадает с именем самого таймера. Чтобы процесс мог воспринять сигнал от таймера, этот сигнал должен быть указан в теле процесса в качестве входного. С момента установки таймера и до момента восприятия сигнала от таймера он считается активным. Перевод таймера в неактивное состояние ("сброс таймера") осуществляется оператором reset.
Процессы могут содержать описания и вызовы процедур. Один процесс может вызвать процедуру, описанную в другом процессе, но в этом же блоке. При описании процедур явно указывается посредством ключевых слов in и in/out способ передачи параметров.
В настоящее время при разработке телекоммуникационных систем все шире используется объектно-ориентированное программы, для проектирования которых применяется унифицированный язык моделирования (UML — Unified Modeling Language). В этом языке для описания поведения также используется автоматная модель — диаграммы состояний Statecharts, предложенные Д. Харелом.
Как язык SDL представляется более согласованным, чем UML и имеет более четкую семантическую основу. С другой стороны, UML более выразительный и широко используемый. Поэтому в последние годы были выполнены исследования, направленные на объединение языков SDL и UML. Рекомендация ITU Z.109, называемая «SDL, объединенный с UML» (SDL Combined with UML) отражает основной объем работы, проделанной в рамках объединения двух языков. В данной рекомендации определено подмножество UML, которое семантически осмысленно для SDL. Программисты, работающие с UML, могут использовать это подмножество, общую часть любого профайла UML, для создания модели, которую они могут интерпретировать как SDL. Объединение UML и языка Specification and Description Language (SDL) позволит увеличить потенциал UML как языка графического программирования.
Дата добавления: 2016-03-20; просмотров: 1258;