Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 1 (Вводная)
Понятие БЦВМ
Определение. Классификация БЦВМ. Основные характеристики БЦВМ. Составные части БЦВМ (Процессор, Память, Шины микропроцессорной системы, устройства ввода/ вывода)
Бортовая цифровая вычислительная машина (БЦВМ) — электронная вычислительная машина, устанавливаемая на борту летательного аппарата, внутренний язык, структура, конструкция и другие основные показатели которой оптимизированы с учётом конкретных условий её применения. По назначению БЦВМ могут быть специализированными для решения одной задачи (например, вычислитель обработки сигналов от радиолокационных станций) и универсальными (обеспечивают решение широкого круга задач по автоматическому управлению летательным аппаратом, обработку информации функциональных подсистем и т. п.). По конструктивному исполнению БЦВМ могут быть либо автономными (в виде отдельного прибора), либо встраиваемыми (в виде одного или несколько модулей — плат, размещаемых в аппаратуре функциональных подсистем).
Универсальная БЦВМ авиационного применения, как правило, состоит из процессора, выполняющего все основные операции; оперативного запоминающего устройства (ОЗУ), предназначенного для хранения входных, выходных и промежуточных данных; постоянного запоминающего устройства (ПЗУ), служащего для хранения программ и констант; средств информационного обмена, обеспечивающих приём исходных данных от источников информации и выдачу результирующих величин на приёмники информации через внешний интерфейс БЦВМ. Информационная и управляющая связь между отдельными устройствами БЦВМ обеспечивается внутренним интерфейсом.
В состав некоторых БЦВМ может входить полупостоянное запоминающее устройство (ППЗУ), в которое записывается предполётное задание (координаты маяков, пунктов маршрутов, характеристики грузов и т. п.). Основные характеристики БЦВМ; быстродействие, измеряемое количеством выполняемых машиной операций в единицу времени; объёмы ОЗУ, ПЗУ и ППЗУ, измеряемые в словах заданной разрядности; пропускные способности средств информационного обмена, внутренних и внешних интерфейсов, измеряемые количеством передаваемой полезной информации в единицу времени. БЦВМ, как правило, используются в составе сложных бортовых вычислительных систем.
Процессор
Процессор (рис. 1) обычно представляет собой отдельную микросхему или же часть микросхемы (в случае микроконтроллера).
Микросхема процессора обязательно имеет выводы трех шин: шины адреса, шины данных и шины управления. Иногда некоторые сигналы и шины мультиплексируются, чтобы уменьшить количество выводов микросхемы процессора.
Важнейшие характеристики процессора — это количество разрядов его шины данных, количество разрядов его шины адреса и количество управляющих сигналов в шине управления. Разрядность шины данных определяет скорость работы системы. Разрядность шины адреса определяет допустимую сложность системы. Количество линий управления определяет разнообразие режимов обмена и эффективность обмена процессора с другими устройствами системы.
Кроме выводов для сигналов трех основных шин процессор всегда имеет вывод (или два вывода) для подключения внешнего тактового сигнала или кварцевого резонатора (CLK), так как процессор всегда представляет собой тактируемое устройство. Чем больше тактовая частота процессора, тем он быстрее работает, то есть тем быстрее выполняет команды. Впрочем, быстродействие процессора определяется не только тактовой частотой, но и особенностями его структуры. Современные процессоры выполняют большинство команд за один такт и имеют средства для параллельного выполнения нескольких команд. Тактовая частота процессора не связана прямо и жестко со скоростью обмена по магистрали, так как скорость обмена по магистрали ограничена задержками распространения сигналов и искажениями сигналов на магистрали. То есть тактовая частота процессора определяет только его внутреннее быстродействие, а не внешнее. Иногда тактовая частота процессора имеет нижний и верхний пределы. При превышении верхнего предела частоты возможно перегревание процессора, а также сбои, причем, что самое неприятное, возникающие не всегда и нерегулярно. Так что с изменением этой частоты надо быть очень осторожным.
Рис. 1. Схема включения процессора.
Еще один важный сигнал, который имеется в каждом процессоре, — это сигнал начального сброса RESET. При включении питания, при аварийной ситуации или зависании процессора подача этого сигнала приводит к инициализации процессора, заставляет его приступить к выполнению программы начального запуска. Аварийная ситуация может быть вызвана помехами по цепям питания и «земли», сбоями в работе памяти, внешними ионизирующими излучениями и еще множеством причин. В результате процессор может потерять контроль над выполняемой программой и остановиться в каком-то адресе. Для выхода из этого состояния как раз и используется сигнал начального сброса. Этот же вход начального сброса может использоваться для оповещения процессора о том, что напряжение питания стало ниже установленного предела. В таком случае процессор переходит к выполнению программы сохранения важных данных. По сути, этот вход представляет собой особую разновидность радиального прерывания.
Иногда у микросхемы процессора имеется еще один-два входа радиальных прерываний для обработки особых ситуаций (например, для прерывания от внешнего таймера).
Шина питания современного процессора обычно имеет одно напряжение питания (+5В или +3,3В) и общий провод («землю»). Первые процессоры нередко требовали нескольких напряжений питания. В некоторых процессорах предусмотрен режим пониженного энергопотребления. Вообще, современные микросхемы процессоров, особенно с высокими тактовыми частотами, потребляют довольно большую мощность. В результате для поддержания нормальной рабочей температуры корпуса на них нередко приходится устанавливать радиаторы, вентиляторы или даже специальные микрохолодильники.
Для подключения процессора к магистрали используются буферные микросхемы, обеспечивающие, если необходимо, демультиплексирование сигналов и электрическое буферирование сигналов магистрали. Иногда протоколы обмена по системной магистрали и по шинам процессора не совпадают между собой, тогда буферные микросхемы еще и согласуют эти протоколы друг с другом. Иногда в микропроцессорной системе используется несколько магистралей (системных и локальных), тогда для каждой из магистралей применяется свой буферный узел. Такая структура характерна, например, для персональных компьютеров.
После включения питания процессор переходит в первый адрес программы начального пуска и выполняет эту программу. Данная программа предварительно записана в постоянную (энергонезависимую) память. После завершения программы начального пуска процессор начинает выполнять основную программу, находящуюся в постоянной или оперативной памяти, для чего выбирает по очереди все команды. От этой программы процессор могут отвлекать внешние прерывания или запросы на ПДП. Команды из памяти процессор выбирает с помощью циклов чтения по магистрали. При необходимости процессор записывает данные в память или в устройства ввода/вывода с помощью циклов записи или же читает данные из памяти или из устройств ввода/вывода с помощью циклов чтения.
Таким образом, основные функции любого процессора следующие:
• выборка (чтение) выполняемых команд;
• ввод (чтение) данных из памяти или устройства ввода/вывода;
• вывод (запись) данных в память или в устройства ввода/вывода;
• обработка данных (операндов), в том числе арифметические операции над ними;
• адресация памяти, то есть задание адреса памяти, с которым будет производиться обмен;
• обработка прерываний и режима прямого доступа.
Упрощенно структуру микропроцессора можно представить в следующем виде (рис. 2).
Рис. 2. Внутренняя структура микропроцессора.
Быстродействие процессора
Быстродействие процессора — это одна из важнейших его характеристик, определяющая эффективность работы всей микропроцессорной системы в целом. Быстродействие процессора зависит от множества факторов, что затрудняет сравнение быстродействия даже разных процессоров внутри одного семейства, не говоря уже о процессорах разных фирм и разного назначения.
Выделим важнейшие факторы, влияющие на быстродействие процессора.
Прежде всего, быстродействие зависит от тактовой частоты процессора. Все операции внутри процессора выполняются синхронно, тактируются единым тактовым сигналом. Понятно, что чем больше тактовая частота, тем быстрее работает процессор, причем, например, двукратное увеличение тактовой частоты какого-то процессора снижает вдвое время выполнения команд этим процессором. Другой аналогичный показатель быстродействия процессора — время выполнения коротких (быстрых) операций. Для примера в таблице 1 представлены показатели быстродействия нескольких 8-разрядных и 16-разрядных процессоров. В настоящее время этот показатель практически не используется. Время выполнения команд — важный, но далеко не единственный фактор, определяющий быстродействие. Большое значение имеет также структура системы команд процессора. Например, некоторым процессорам для выполнения какой-то операции понадобится одна команда, а другим процессорам — несколько команд. Какие-то процессоры имеют систему команд, позволяющую быстро решать задачи одного типа, а какие-то — задачи другого типа. Важны и методы адресации, разрешенные в данном процессоре, и наличие сегментирования памяти, и способы взаимодействия процессора с устройствами ввода/вывода и т.д.
Существенно влияет на быстродействие системы в целом и то, как процессор «общается» с памятью команд и памятью данных, применяется ли совмещение выборки команд из памяти с выполнением ранее выбранных команд.
Табл. 1. Параметры некоторых процессоров.
Процессор
8085
6800
68000
8086
Фирма
Intel
Motorola
Motorola
Intel
Разрядность
8
8
16
16
Количество команд
80
72
61
133
Тактовая частота, МГц
3
1
8
5
Время выполнения коротких операций, мкс
1,3
2
0,5
0,4
Быстродействие системы в целом определяется также и разрядностью процессора. Например, 8-разрядный процессор будет медленнее пересылать и обрабатывать большие массивы данных, чем 16-разрядный процессор. Точно так же 16-разрядный процессор будет значительно медленнее работать с большими числами (большими, чем 65536), чем 32-разрядный процессор.
При высокой сложности решаемых задач быстродействие системы зависит и от общего объема системной памяти. Ведь если системной памяти мало, системе приходится сохранять данные во внешней памяти (например, на магнитном диске), а это очень сильно (на несколько порядков) замедляет работу. Так что разрядность шины адреса процессора тоже важна.
Поэтому количественные показатели производительности процессоров очень условны, они лишь косвенно характеризуют быстродействие системы на базе этого процессора. Тем не менее, некоторые производители предлагают количественные показатели для своих процессоров, которые характеризуют время выполнения специально составленных тестовых программ, содержащих самые различные команды в тех или иных соотношениях.
Память
Память микропроцессорной системы выполняет функцию временного или постоянного хранения данных и команд. Объем памяти определяет допустимую сложность выполняемых системой алгоритмов, а также в некоторой степени и скорость работы системы в целом. Модули памяти выполняются на микросхемах памяти (оперативной или постоянной). Все чаще в составе микропроцессорных систем используется флэш-память (англ. — flash memory), которая представляет собой энергонезависимую память с возможностью многократной перезаписи содержимого.
Информация в памяти хранится в ячейках, количество разрядов которых равно количеству разрядов шины данных процессора. Обычно оно кратно восьми (например, 8, 16, 32, 64). Допустимое количество ячеек памяти определяется количеством разрядов шины адреса как 2N, где N — количество разрядов шины адреса. Чаще всего объем памяти измеряется в байтах независимо от разрядности ячейки памяти. Используются также следующие более крупные единицы объема памяти: килобайт — 210 или 1024 байта (обозначается Кбайт), мегабайт — 220 или 1 048 576 байт (обозначается Мбайт), гигабайт — 230 байт (обозначается Гбайт), терабайт — 240 (обозначается Тбайт). Совокупность ячеек памяти называется обычно пространством памяти системы.
Для подключения модуля памяти к системной магистрали используются блоки сопряжения, которые включают в себя дешифратор (селектор) адреса, схему обработки управляющих сигналов магистрали и буферы данных (рис. 3).
Рис. 3. Структура модуля памяти
Оперативная память общается с системной магистралью в циклах чтения и записи, постоянная память — только в циклах чтения. Обычно в составе системы имеется несколько модулей памяти, каждый из которых работает в своей области пространства памяти. Селектор адреса как раз и определяет, какая область адресов пространства памяти отведена данному модулю памяти. Схема управления вырабатывает в нужные моменты сигналы разрешения работы памяти (CS) и сигналы разрешения записи в память (WR). Буферы данных передают данные от памяти к магистрали или от магистрали к памяти.
В пространстве памяти микропроцессорной системы обычно выделяются несколько особых областей, которые выполняют специальные функции (стек, таблица векторов прерывания, память устройств подключенных к системной шине и т. д.).
Оперативная память занимает значительную часть адресного пространства компьютера. Ее установленный объем и быстродействие оказывают огромное влияние на быстродействие персонального компьютера в целом (порой даже большее, чем скорость процессора). Надежность ее работы во многом определяет надежность всего компьютера. Поэтому всеми разработчиками ей уделяется большое внимание.
Все персональные компьютеры используют оперативную память динамического типа (DRAM — Dynamic Random Access Memory), основным преимуществом которой перед статической оперативной памятью (SRAM — Static RAM) является низкая цена. Это связано с тем, что если элемент статической памяти (триггер) требует 4—6 транзисторов, то элемент динамической памяти — это интегральный конденсатор, для обслуживания которого требуется 1—2 транзистора. Отсюда же следуют два основных недостатка динамической памяти: она требует регенерации (то есть постоянного возобновления заряда на разряжающемся конденсаторе) и имеет в несколько раз меньшее быстродействие по сравнению со статической памятью. К тому же во время регенерации динамическая память недоступна для обмена, что также снижает быстродействие компьютера. Отметим, что сейчас обычно применяют встроенную регенерацию, не требующую внешнего обслуживания, но опять-таки занимающую время.
Переход на полностью статическую память слишком сильно повысил бы стоимость компьютера в целом (к тому же необходимый объем оперативной памяти компьютера все увеличивается), поэтому статическую память применяют только в самых «узких» местах, там, где без высокой скорости не обойтись, например, для кэш-памяти. Что касается динамической памяти, то ее развитие идет по пути снижения времени доступа благодаря структурным и технологическим усовершенствованиям. Например, второе поколение динамической памяти EDO RAM (Extended Data Output RAM) имело быстродействие примерно на 20—25% выше, чем у обычной памяти. Это достигается за счет того, что следующее обращение к памяти возможно еще до завершения предыдущего обращения. Третье поколение динамической памяти — SDRAM (Synchronous DRAM) — еще на столько же быстрее (рабочая частота в настоящее время достигает 133 МГц). Еще более быстродействующая память — DDR SDRAM (частота до 400 МГц) и память RDRAM (частота до 1 ГГц и даже выше).
Для упрощения установки оперативной памяти в компьютер ее выполняют в виде небольших модулей — печатных плат с ножевым (печатным) разъемом, на которые установлены микросхемы памяти (SIMM — Single In-Line Memory Module). Эти модули устанавливаются в специальные SIMM-разъемы на материнской плате, что позволяет пользователю легко менять объем памяти компьютера, учитывая при этом необходимый уровень быстродействия, сложность решаемых задач и свои финансовые возможности. Широко применяются 72-контактные SIMM-модули разного объема. Отметим, что не рекомендуется одновременно использовать несколько модулей с разным быстродействием: в некоторых компьютерах это приводит к сбоям. В современных компьютерах на базе процессоров Pentium применяются также модули DIMM (Dual In-Line Memory Module — модуль памяти с двусторонними печатными выводами), имеющие 64 бита данных.
Модули памяти иногда поддерживают проверку содержимого памяти на четность. Для этого к 8 битам данных каждого адреса памяти добавляется девятый бит четности. Он записывается при каждой записи информации в соответствующий байт памяти и проверяется при чтении информации из соответствующего байта памяти. Если обнаруживается несоответствие бита четности байту информации, то вырабатывается сигнал, вызывающий немаскируемое прерывание NMI.
Все адресное пространство памяти компьютера разделяется на несколько областей, что связано, в первую очередь, с необходимостью обеспечения совместимости с первыми компьютерами семейства. В компьютере IBM PC XT на процессоре i8088 процессор мог адресовать 1 Мбайт памяти (20 адресных разрядов). Но все программные и аппаратные средства строились исходя из предположения, что доступное адресное пространство — только младшие 640 Кбайт (тогда это казалось вполне достаточным). Данная область памяти получила название стандартной памяти (Conventional memory).
Первые 1024 байта (адреса 0…3FF) хранят таблицу векторов прерывания (Interrupt Vectors) объемом 256 двойных слов, формируемую на этапе начальной загрузки. Однако если процессор работает в защищенном режиме, таблица векторов может располагаться в любом другом месте памяти. Адреса 400…4FF отводятся под область переменных BIOS (BIOS Data Area). Подробнее о BIOS будет рассказано в следующем разделе. Адреса 500…9FFFF включают в себя область операционной системы DOS (DOS Area) и память пользователя (User RAM). Оставшиеся от 1 Мбайта памяти 384 Кбайта (адреса A0000…FFFFF), зарезервированные под другие системные нужды, называются UMA (Upper Memory Area) — область верхней памяти или UMB (Upper Memory Blocks) — блоки верхней памяти или High DOS Memory. Пространство видеопамяти (адреса A0000…BFFFF) содержит области для хранения текстовой и графической информации видеоадаптера. Пространство памяти с адресами E0000…FFFFF отведено под системную постоянную память компьютера ROM BIOS. В этой же области выделено окно размером в 64 Кбайта (page frame) с адресами D0000…DFFFF, через которое программы могли получать доступ к дополнительной (отображаемой) памяти (Expanded memory) объемом до 32 Мбайт, оставаясь в пределах того же 1 Мбайта адресуемой памяти. Это достигается путем поочередного отображения четырех страниц по 16 Кбайт из дополнительной памяти в выделенное окно. При этом положение страниц в дополнительной памяти можно изменять программным путем. Понятно, что работать с дополнительной памятью менее удобно, чем с основной, так как в каждый момент компьютер «видит» только окно в 64 Кбайт. Поэтому сейчас она применяется довольно редко.
В настоящее время область памяти с адресами С0000…DFFFF чаще используется для оперативной и постоянной памяти, входящей в состав различных адаптеров и плат расширения компьютера. В результате логическая организация адресного пространства в пределах 1 Мбайт получилась довольно сложной (рис. 4). И такую же организацию должны поддерживать все персональные компьютеры семейства IBM PC для обеспечения совместимости с предшествующими моделями.
Рис. 4. Распределение адресного пространства памяти
При дальнейшем расширении адресуемого пространства памяти в последующих моделях компьютеров вся память объемом свыше 1 Мбайт получила название расширенной памяти (Extended memory). Для доступа к ней микропроцессор должен переходить из реального режима в защищенный и обратно. Общий объем памяти персонального компьютера (верхняя граница расширенной памяти) может доходить до 16 Мбайт (24 разряда адреса) или до 4 Гбайт (32 разряда адреса).
Особого упоминания заслуживает так называемая теневая память (Shadow RAM), представляющая собой часть оперативной памяти, в которую при запуске компьютера переписывается содержание постоянной памяти, и заменяющая эту постоянную память на время работы компьютера. Необходимость данной процедуры вызвана тем, что даже сравнительно медленная динамическая оперативная память оказывается все-таки быстрее, чем постоянная память. Постоянная память часто заметно сдерживает быстродействие компьютера. Поэтому было предложено выделять часть оперативной памяти для исполнения обязанностей как системной постоянной памяти ROM BIOS, так и постоянной памяти, входящей в состав дополнительных адаптеров, которые подключаются к компьютеру. Переписывание информации обычно предусмотрено в программе начального пуска.
В связи с особенностями работы динамической памяти для сокращения времени доступа к ней применяются специальные режимы работы оперативной памяти: режим расслоения (интерливинг) и страничный режим.
Использование режима интерливинга предполагает не совсем обычное разбиение памяти на банки (части). Если при обычном разбиении ( последовательной адресации) адреса следующего банка начинаются после окончания адресов предыдущего, то при интерливинге адреса банков чередуются. То есть, например, после первого адреса первого банка следует первый адрес второго банка, затем второй адрес первого банка и второй адрес второго банка и т.д. Получается, что в одном банке четные слова, а в другом — нечетные. Таких чередующихся банков может быть не только два, а четыре, восемь, шестнадцать. Объемы банков при этом должны быть одинаковыми. В результате такого подхода появляется возможность начинать обращение к следующему слову еще до окончания процесса доступа к предыдущему.
Страничный режим предполагает постраничную работу микросхем памяти, когда выбор страницы производится один раз на всю страницу, а выбор ячейки внутри страницы может происходить гораздо быстрее. Для поддержки обоих режимов применяются специальные технологические решения.
Здесь же отметим, что при замене памяти компьютера или при установке дополнительных банков памяти надо строго следовать рекомендациям изготовителей системных плат, так как порядок заполнения банков может быть далеко не очевиден.
Системная постоянная память (ПЗУ) занимает сравнительно небольшой объем (обычно 64 Кбайта). Однако ее значение для компьютера очень велико. Само ее название ROM BIOS (ROM Basic Input/Output System) — базовая система ввода/вывода — говорит о том, что в ней находится функционально полный набор программ нижнего уровня для управления устройствами ввода/вывода. Поэтому даже до загрузки в оперативную память исполняемых программ с диска компьютер имеет возможность обслуживать клавиатуру, дисплей, подавать звуковые сигналы, общаться с дисками и т.д. Важно отметить, что большинство современных видеоадаптеров, а также контроллеров накопителей имеют собственную систему BIOS, которая дополняет или даже заменяет системную BIOS во время основной работы. Вызов программ BIOS осуществляется через программные или аппаратные прерывания, для чего BIOS формирует соответствующую таблицу векторов прерываний. Но этим функции постоянной памяти не ограничиваются.
В принципе, под память ROM BIOS отведено 128 Кбайт адресного пространства памяти. В первых компьютерах (IBM PC XT) она занимала всего 8 Кбайт, сейчас обычно занимает 64 Кбайт. Если же нужно использовать системную постоянную память большего объема, то она поочередно отображается на окно системной памяти размером 64 Кбайт (адреса F0000…FFFFF). Это связано со стремлением сэкономить пространство верхней памяти для других целей.
После включения питания, или после программного перезапуска начинает выполняться программа начального запуска, также хранящаяся в постоянной памяти (начальный адрес FFFF0) . Эта программа включает в себя:
• программу самотестирования (POST — Power On Self Test);
• программу начальной загрузки;
• программу задания текущих параметров.
Кроме программы начального запуска ROM BIOS также обслуживает аппаратные прерывания от системных устройств (таймера, клавиатуры, дисков), а также отрабатывает базовые программные обращения к системным устройствам.
Отметим, что в последнее время ROM BIOS выполняется не на микросхемах собственно постоянной памяти, а на микросхемах, допускающих многократную перезапись информации пользователем EPROM (Erasable Programmable ROM) с электрической перезаписью — типа флэш (flash). Разработчик может легко модернизировать BIOS с помощью программы перезаписи флэш-памяти. При использовании же микросхем ПЗУ с ультрафиолетовым стиранием для этого требовались специальный программатор и стирающее устройство (ультрафиолетовая лампа).
Программа самотестирования POST позволяет производить простейшую диагностику основных узлов БЦВМ.
Начиная с процессора 80286 (IBM PC) постоянная память ROM BIOS обязательно дополняется небольшой энергонезависимой оперативной памятью CMOS RAM, которая выполнена на микросхемах с пониженным энергопотреблением с технологией КМОП (CMOS) и при выключении питания подпитывается от батарейки или аккумулятора (эта память, как правило, входит в состав других микросхем). В CMOS-памяти хранится о конфигурации, приоритете загрузки с разных накопителей, количестве памяти, типах накопителей, режимах энергопотребления, т.д. CMOS RAM отличается от постоянной памяти тем, что записанная в нее информация легко меняется программным путем.
Шины микропроцессорной системы и циклы обмена
Самое главное, что должен знать разработчик микропроцессорных систем — это принципы организации обмена информацией по шинам таких систем. Без этого невозможно разработать аппаратную часть системы, а без аппаратной части не будет работать никакое программное обеспечение.
За более чем 30 лет, прошедших с момента появления первых микропроцессоров, были выработаны определенные правила обмена, которым следуют и разработчики новых микропроцессорных систем. Правила эти не слишком сложны, но твердо знать и неукоснительно соблюдать их для успешной работы необходимо. Как показала практика, принципы организации обмена по шинам гораздо важнее, чем особенности конкретных микропроцессоров. Стандартные системные магистрали живут гораздо дольше, чем тот или иной процессор. Разработчики новых процессоров ориентируются на уже существующие стандарты магистрали. Более того, некоторые системы на основе совершенно разных процессоров используют одну и ту же системную магистраль. То есть магистраль оказывается самым главным системообразующим фактором в микропроцессорных системах.
Обмен информацией в микропроцессорных системах происходит в циклах обмена информацией. Под циклом обмена информацией понимается временной интервал, в течение которого происходит выполнение одной элементарной операции обмена по шине. Например, пересылка кода данных из процессора в память или же пересылка кода данных из устройства ввода/вывода в процессор. В пределах одного цикла также может передаваться и несколько кодов данных, даже целый массив данных, но это встречается реже.
Циклы обмена информацией делятся на два основных типа:
• Цикл записи (вывода), в котором процессор записывает (выводит) информацию;
• Цикл чтения (ввода), в котором процессор читает (вводит) информацию.
В некоторых микропроцессорных системах существует также цикл «чтение-модификация-запись» или же «ввод-пауза-вывод». В этих циклах процессор сначала читает информацию из памяти или устройства ввода/вывода, затем как-то преобразует ее и снова записывает по тому же адресу. Например, процессор может прочитать код из ячейки памяти, увеличить его на единицу и снова записать в эту же ячейку памяти. Наличие или отсутствие данного типа цикла связано с особенностями используемого процессора.
Особое место занимают циклы прямого доступа к памяти (если режим ПДП в системе предусмотрен) и циклы запроса и предоставления прерывания (если прерывания в системе есть). Когда в дальнейшем речь пойдет о таких циклах, это будет специально оговорено.
Во время каждого цикла устройства, участвующие в обмене информацией, передают друг другу информационные и управляющие сигналы в строго установленном порядке или, как еще говорят, в соответствии с принятым протоколом обмена информацией.
Длительность цикла обмена может быть постоянной или переменной, но она всегда включает в себя несколько периодов сигнала тактовой частоты системы. То есть даже в идеальном случае частота чтения информации процессором и частота записи информации оказываются в несколько раз меньше тактовой частоты системы.
Чтение кодов команд из памяти системы также производится с помощью циклов чтения. Поэтому в случае одношинной архитектуры на системной магистрали чередуются циклы чтения команд и циклы пересылки (чтения и записи) данных, но протоколы обмена остаются неизменными независимо от того, что передается — данные или команды. В случае двухшинной архитектуры циклы чтения команд и записи или чтения данных разделяются по разным шинам и могут выполняться одновременно.
Шины микропроцессорной системы
Прежде чем переходить к особенностям циклов обмена, остановимся подробнее на составе и назначении различных шин микропроцессорной системы.
Как уже упоминалось, в системную магистраль (системную шину) микропроцессорной системы входит три основные информационные шины: адреса, данных и управления.
Шина данных — это основная шина, ради которой и создается вся система. Количество ее разрядов (линий связи) определяет скорость и эффективность информационного обмена, а также максимально возможное количество команд.
Шина данных всегда двунаправленная, так как предполагает передачу информации в обоих направлениях. Наиболее часто встречающийся тип выходного каскада для линий этой шины — выход с тремя состояниями.
Обычно шина данных имеет 8, 16, 32 или 64 разряда. Понятно, что за один цикл обмена по 64-разрядной шине может передаваться 8 байт информации, а по 8-разрядной — только один байт. Разрядность шины данных определяет и разрядность всей магистрали. Например, когда говорят о 32-разрядной системной магистрали, подразумевается, что она имеет 32-разрядную шину данных.
Шина адреса — вторая по важности шина, которая определяет максимально возможную сложность микропроцессорной системы, то есть допустимый объем памяти и, следовательно, максимально возможный размер программы и максимально возможный объем запоминаемых данных. Количество адресов, обеспечиваемых шиной адреса, определяется как 2N, где N — количество разрядов. Например, 16-разрядная шина адреса обеспечивает 65 536 адресов. Разрядность шины адреса обычно кратна 4 и может достигать 32 и даже 64. Шина адреса может быть однонаправленной (когда магистралью всегда управляет только процессор) или двунаправленной (когда процессор может временно передавать управление магистралью другому устройству, например контроллеру ПДП). Наиболее часто используются типы выходных каскадов с тремя состояниями или обычные ТТЛ (с двумя состояниями).
Как в шине данных, так и в шине адреса может использоваться положительная логика или отрицательная логика. При положительной логике высокий уровень напряжения соответствует логической единице на соответствующей линии связи, низкий — логическому нулю. При отрицательной логике — наоборот. В большинстве случаев уровни сигналов на шинах — ТТЛ.
Для снижения общего количества линий связи магистрали часто применяется мультиплексирование шин адреса и данных. То есть одни и те же линии связи используются в разные моменты времени для передачи как адреса, так и данных (в начале цикла — адрес, в конце цикла — данные). Для фиксации этих моментов (стробирования) служат специальные сигналы на шине управления. Понятно, что мультиплексированная шина адреса/данных обеспечивает меньшую скорость обмена, требует более длительного цикла обмена (рис. 5). По типу шины адреса и шины данных все магистрали также делятся на мультиплексированные и немультиплексированные.
Рис. 5. Мультиплексирование шин адреса и данных
В некоторых мультиплексированных магистралях после одного кода адреса передается несколько кодов данных (массив данных). Это позволяет существенно повысить быстродействие магистрали. Иногда в магистралях применяется частичное мультиплексирование, то есть часть разрядов данных передается по немультиплексированным линиям, а другая часть — по мультиплексированным с адресом линиям.
Шина управления — это вспомогательная шина, управляющие сигналы на которой определяют тип текущего цикла и фиксируют моменты времени, соответствующие разным частям или стадиям цикла. Кроме того, управляющие сигналы обеспечивают согласование работы процессора (или другого хозяина магистрали, задатчика, master) с работой памяти или устройства ввода/вывода (устройства-исполнителя, slave). Управляющие сигналы также обслуживают запрос и предоставление прерываний, запрос и предоставление прямого доступа.
Сигналы шины управления могут передаваться как в положительной логике (реже), так и в отрицательной логике (чаще). Линии шины управления могут быть как однонаправленными, так и двунаправленными. Типы выходных каскадов могут быть самыми разными: с двумя состояниями (для однонаправленных линий), с тремя состояниями (для двунаправленных линий), с открытым коллектором (для двунаправленных и мультиплексированных линий).
Самые главные управляющие сигналы — это стробы обмена, то есть сигналы, формируемые процессором и определяющие моменты времени, в которые производится пересылка данных по шине данных, обмен данными. Чаще всего в магистрали используются два различных строба обмена:
• Строб записи (вывода), который определяет момент времени, когда устройство-исполнитель может принимать данные, выставленные процессором на шину данных;
• Строб чтения (ввода), который определяет момент времени, когда устройство-исполнитель должно выдать на шину данных код данных, который буде прочитан процессором.
При этом большое значение имеет то, как процессор заканчивает обмен в пределах цикла, в какой момент он снимает свой строб обмена. Возможны два пути решения (рис. 6):
• При синхронном обмене процессор заканчивает обмен данными самостоятельно, через раз и навсегда установленный временной интервал выдержки (tвыд), то есть без учета интересов устройства-исполнителя;
• При асинхронном обмене процессор заканчивает обмен только тогда, когда устройство-исполнитель подтверждает выполнение операции специальным сигналом (так называемый режим handshake — рукопожатие).
Рис. 6. Синхронный обмен и асинхронный обмен
Достоинства синхронного обмена — более простой протокол обмена, меньшее количество управляющих сигналов. Недостатки — отсутствие гарантии, что исполнитель выполнил требуемую операцию, а также высокие требования к быстродействию исполнителя.
Достоинства асинхронного обмена — более надежная пересылка данных, возможность работы с самыми разными по быстродействию исполнителями. Недостаток — необходимость формирования сигнала подтверждения всеми исполнителями, то есть дополнительные аппаратурные затраты.
Какой тип обмена быстрее, синхронный или асинхронный? Ответ на этот вопрос неоднозначен. С одной стороны, при асинхронном обмене требуется какое-то время на выработку, передачу дополнительного сигнала и на его обработку процессором. С другой стороны, при синхронном обмене приходится искусственно увеличивать длительность строба обмена для соответствия требованиям большего числа исполнителей, чтобы они успевали обмениваться информацией в темпе процессора. Поэтому иногда в магистрали предусматривают возможность как синхронного, так и асинхронного обмена, причем синхронный обмен является основным и довольно быстрым, а асинхронный применяется только для медленных исполнителей.
По используемому типу обмена магистрали микропроцессорных систем также делятся на синхронные и асинхронные.
Устройства ввода/вывода
Устройства ввода/вывода обмениваются информацией с магистралью по тем же принципам, что и память. Наиболее существенное отличие с точки зрения организации обмена состоит в том, что модуль памяти имеет в адресном пространстве системы много адресов (до нескольких десятков миллионов), а устройство ввода/вывода обычно имеет немного адресов (обычно до десяти), а иногда и всего один адрес.
Но модули памяти системы обмениваются информацией только с магистралью, с процессором, а устройства ввода/вывода взаимодействуют еще и с внешними устройствами, цифровыми или аналоговыми. Поэтому разнообразие устройств ввода/вывода неизмеримо больше, чем модулей памяти. Часто используются еще и другие названия для устройств ввода/вывода: устройства сопряжения, контроллеры, карты расширения, интерфейсные модули и т.д.
Объединяют все устройства ввода/вывода общие принципы обмена с магистралью и, соответственно, общие принципы организации узлов, которые осуществляют сопряжение с магистралью. Упрощенная структура устройства ввода/вывода (точнее, его интерфейсной части) приведена на рис. 7. Как и в случае модуля памяти, она обязательно содержит схему селектора адреса, схему управления для обработки стробов обмена и буферы данных.
Самые простейшие устройства ввода/вывода выдают на внешнее устройство код данных в параллельном формате и принимают из внешнего устройства код данных в параллельном формате. Такие устройства ввода/вывода часто называют параллельными портами ввода/вывода. Они наиболее универсальны, то есть удовлетворяют потребности сопряжения с большим числом внешних устройств, поэтому их часто вводят в состав микропроцессорной системы в качестве стандартных устройств. Параллельные порты обычно имеются в составе микроконтроллеров. Именно через параллельные порты микроконтроллер связывается с внешним миром.
Входной порт (порт ввода) в простейшем случае представляет собой параллельный регистр, в который процессор может записывать информацию. Выходной порт (порт вывода) обычно представляет собой просто однонаправленный буфер, через который процессор может читать информацию от внешнего устройства. Именно такие порты показаны для примера на рис. 7. Порт может быть и двунаправленным (входным/выходным). В этом случае процессор пишет информацию во внешнее устройство и читает информацию из внешнего устройства по одному и тому же адресу в адресном пространстве системы. Входные и выходные линии для связи с внешним устройством при этом могут быть объединены поразрядно, образуя двунаправленные линии.
Рис. 7. Структура простейшего устройства ввода/вывода
При обращении со стороны магистрали селектор адреса распознает адрес, приписанный данному устройству ввода/вывода. Схема управления выдает внутренние стробы обмена в ответ на магистральные стробы обмена. Входной буфер данных обеспечивает электрическое согласование шины данных с этим устройством (буфер может и отсутствовать). Данные из шины данных записываются в регистр по сигналу С и выдаются на внешнее устройство. Выходной буфер данных передает входные данные с внешнего устройства на шину данных магистрали в цикле чтения из порта.
Более сложные устройства ввода/вывода (устройства сопряжения) имеют в своем составе внутреннюю буферную оперативную память и даже могут иметь микроконтроллер, на который возложено выполнение функций обмена с внешним устройством.
Каждому устройству ввода/вывода отводится свой адрес в адресном пространстве микропроцессорной системы. Дублирование адресов должно быть исключено, за этим должны следить разработчик и пользователь микропроцессорной системы.
Устройства ввода/вывода помимо программного обмена могут также поддерживать режим обмена по прерываниям. В этом случае они преобразуют поступающий от внешнего устройства сигнал запроса на прерывание в сигнал запроса прерывания, необходимый для данной магистрали (или в последовательность сигналов при векторном прерывании). Если нужно использовать режим ПДП, устройство ввода/вывода должно выдать сигнал запроса ПДП на магистраль и обеспечить работу в циклах ПДП, принятых для данной магистрали.
В составе микропроцессорных систем, как правило, выделяются три специальные группы устройств ввода/вывода:
• устройства интерфейса пользователя (ввода информации пользователем и вывода информации для пользователя);
• устройства ввода/вывода для длительного хранения информации;
• таймерные устройства.
К устройствам ввода для интерфейса пользователя относятся контроллеры клавиатуры, тумблеров, отдельных кнопок, мыши, трекбола, джойстика и т.д. К устройствам вывода для интерфейса пользователя относятся контроллеры светодиодных индикаторов, табло, жидкокристаллических, плазменных и электронно-лучевых экранов и т.д. В простейших случаях управляющих контроллеров или микроконтроллеров эти средства могут отсутствовать. В сложных микропроцессорных системах они есть обязательно. Роль внешнего устройства в данном случае играет человек.
Устройства ввода/вывода для длительного хранения информации обеспечивают сопряжение микропроцессорной системы с дисководами (компакт-дисков или магнитных дисков), а также с накопителями на магнитной ленте. Применение таких устройств существенно увеличивает возможности микропроцессорной системы в отношении хранения выполняемых программ и накопления массивов данных. В простейших контроллерах эти устройства отсутствуют.
Таймерные устройства отличаются от других устройств ввода/вывода тем, что они могут не иметь внешних выводов для подключения к внешним устройствам. Эти устройства предназначены для того, чтобы микропроцессорная система могла выдерживать заданные временные интервалы, следить за реальным временем, считать импульсы и т.д. В основе любого таймера лежит кварцевый тактовый генератор и многоразрядные двоичные счетчики, которые могут перезапускать друг друга. Процессор может записывать в таймер коэффициенты деления тактовой частоты, количество отсчитываемых импульсов, задавать режим работы счетчиков таймера, а читает процессор выходные коды счетчиков. В принципе выполнить практически все функции таймера можно и программным путем, поэтому иногда таймеры в системе отсутствуют. Но включение в систему таймера позволяет решать более сложные задачи и строить более эффективные алгоритмы.
Еще один важный класс устройств ввода/вывода — это устройства для подключения к информационным сетям (локальным и глобальным). Эти устройства распространены не так широко, как устройства трех перечисленных ранее групп, но их значение с каждым годом становится все больше. Сейчас средства связи с информационными сетями вводятся иногда даже в простые контроллеры.
Иногда устройства ввода/вывода обеспечивают сопряжение с внешними устройствами с помощью аналоговых сигналов. Это бывает очень удобно, поэтому в состав некоторых микроконтроллеров даже вводят внутренние ЦАП и АЦП.
Лекция 2
История развития бортовых цифровых вычислительных машин в России
Основные этапы развития
Цифровые вычислительные средства в составе бортового оборудования (БО) самолетов появились на рубеже 60-х годов и за относительно короткий срок практически полностью заменили используемые ранее аналоговые вычислители, поскольку обеспечивали более высокую точность решения задач, характеризовались большей универсальностью применения и обладали широкими логическими возможностями.
Эти качества бортовой цифровой вычислительной машины (БЦВМ) позволяют использовать ее практически во всех подсистемах БО самолета, обеспечивают устойчивость БЦВМ к усложнению алгоритмов и позволяют применять более сложные, а значит, и более совершенные законы управления самолетом и его подсистемами. Они позволили осуществить информационное взаимодействие между отдельными (ранее непосредственно не взаимодействовавшими) подсистемами БО и образовать единый комплекс бортового оборудования (КБО), что в конечном счете повысило эффективность выполнения полетного задания и безопасность полета.
Использование БЦВМ потребовало определенной унификации радиоэлектронного оборудования самолета, в результате которой сократились сроки и снизились затраты на разработку и последующую модернизацию КБО и затраты на его эксплуатацию.
Для эффективного применения средств цифровой вычислительной техники в составе БО самолетов необходимо было решить следующие задачи:
1. разработать БЦВМ, максимально удовлетворяющие по всем параметрам требованиям конкретного применения;
2. создать системы обмена информацией (СОИ), обеспечивающие как сопряжение БЦВМ с бортовой аппаратурой (датчиками, приборами, агрегатами, приводами и исполнительными органами), так и взаимодействие машин между собой в составе бортовой вычислительной системы;
3. разработать программное обеспечение (ПО), включающее средства создания и отладки программ и средства, обеспечивающие вычислительный процесс и функционирование БЦВМ.
Необходимость решения двух первых задач была очевидна изначально, а вот создание ПО казалось делом второстепенным. Поэтому на ранних стадиях развития цифровой авионики основное внимание уделялось разработке БЦВМ и средств ее сопряжения с бортовой аппаратурой. Проблема создания ПО обострялась по мере усложнения структуры машины, расширения круга решаемых задач, появления и развития бортовых вычислительных систем, и в настоящее время затраты на разработку ПО превышают затраты на создание аппаратных средств.
Разработка средств цифровой вычислительной техники для БО самолетов началась в СССР во второй половине 50-х годов. В это время подавляющее большинство НИИ и приборостроительных КБ Минавиапрома (ОКБ “Электроавтоматика” - ЛНПОЭА, МИЭА, ГосНИИАС, НИИП) и Минрадиопрома (НИИ “Аргон” - НИЦЭВТ, ВНИИРА, НПО “Вега”, МНИИ “Агат” ) и ряд других предприятий начали разработку макетов различного рода цифровых вычислительных устройств (ЦВУ), БО самолетов, а затем и ракет.
К началу 60-х годов были созданы бортовые ЦВУ, специализированного и универсального типов, большинство из которых практически не были востребованы. Исключение составляла БЦВМ “Пламя-ВТ” (НПО “Вега”), которую можно рассматривать как прототип машин серии “Орбита”.
К середине 60-х годов определились три предприятия - ЛНПОЭА (ОКБ “Электроавтоматика”, С.-Петербург), НИЦЭВТ (НИИ “Аргон”, Москва) и ХК “Ленинец” (С.-Петербург), на три последующих десятилетия ставшие основными разработчиками БЦВМ авиационного применения.
Позднее разработку БЦВМ проводили и другие предприятия, такие, как МИЭА (Москва), МНИИ “Агат” (Жуковский), ОКБ “Авиаавтоматика” (Курск), 3-й МПЗ МНПК “Авионика” (Москва) и др.
Уже в начале 70-х годов БЦВМ используются практически во всех подсистемах КБО. Эти подсистемы создавались на предприятиях различных министерств. Например, радиоэлектронные комплексы разрабатывались Минрадиопромом и оснащались БЦВМ, созданными в НИИ “Аргон”, навигационно-пилотажные комплексы и системы индикации разрабатывались Минавиапромом и оснащались БЦВМ, созданными в ЛНПОЭА. На борту самолетов использовались БЦВМ с различной архитектурой, что серьезно затрудняло отработку аппаратуры и программного обеспечения КБО, увеличивало сроки создания комплексов, повышало затраты на их разработку и эксплуатацию.
На основе анализа, проведенного в конце 70-х - начале 80-х годов, была разработана программа создания семейств унифицированных СБЭВМ для использования на подвижных объектах всех классов. Эта программа была утверждена в 1984 г. решением Государственной Комиссии. В соответствии с ней в ЛНПОЭА были начаты работы по созданию унифицированных СБЭВМ - СБ3541 и СБ3542 с архитектурой типа “Электроника-32”, а в НИИ “Аргон” - СБ5140 с архитектурой “ПОИСК”. К сожалению, эта программа не была выполнена. Были разработаны лишь отдельные машины (и то со значительным отставанием по срокам) - СБ3541 на базе МПК1839, СБ5140 и СБ5580 на основе БМК 1537ХМ2. Опыт работ по созданию СБЭВМ был учтен, а сама идея межвидовой унификации получила логическое завершение в разработках ЭВМ семейства “Багет” (головной разработчик НИИСИ РАН), в состав которого входят также и машины авиационного применения “Багет-53”, “Багет-52”, “Багет-63” и “Багет-62”
Одновременно с машинами общего назначения велись работы по созданию специализированных процессоров для обработки сигналов. В ХК “Ленинец” был создан первый промышленный программируемый процессор сигналов Ц200 и разрабатывается новый процессор Ц300. НИИСИ РАН (КБ “Корунд-М”) представил свой образец сигнального процессора “Багет-55-02” (Ц400), который выполняет операции “бабочка” (Бабочка (БПФ) – элементарный шаг в алгоритме быстрого преобразования Фурье Кули-Тюки (Cooley–Tukey FFT). Время работы шага Бабочка определяет длительность вычисления преобразования Фурье) со скоростью 40 млн. оп./с. В настоящее время разрабатывается более совершенный процессор Ц600.
На протяжении трех десятилетий БЦВМ качественно изменялись. Их быстродействие увеличилось более чем на три порядка и достигло десятков миллионов операций в секунду, а емкость запоминающих устройств достигает 8 - 16 Мб. Одновременно уменьшились вес и энергопотребление. Это обусловлено совершенствованием элементной базы, архитектуры и структурной организации машин.
Если в начале для построения БЦВМ использовались дискретные компоненты, то по мере развития элементной базы они заменялись интегральными схемами (ИС), затем схемами со средней и большой интеграцией (СИС и БИС) и, наконец, микропроцессорными комплектами БИС (МПК БИС).
Замена дискретных компонентов большими интегральными схемами позволила повысить быстродействие машины более чем на два порядка при одновременном снижении на порядок и более энергопотребления и веса. Совершенствование микропроцессоров в 80-х и начале 90-х годов позволило поднять еще как минимум на порядок быстродействие БЦВМ, также улучшились внутренние и внешние интерфейсы вычислительных машин.
В начале 90-х годов в число разработчиков БЦВМ вошло Раменское приборостроительное КБ (РПКБ), НИИСИ РАН, ОАО “Русская авионика” (Жуковский). Основным разработчиком БЦВМ для ракет, используемых в качестве авиационного вооружения, стал НИИ приборостроения (Москва), который за этот период разработал серию бортовых вычислительных устройств (БЦВУ-201, БЦВУ-301, БЦВУ-305-10, БЦВУ-305-12, БЦВУ-350, БЦВУ-400) и серию встраиваемых БЦВМ (“Заря-30”, “Заря-32”, “Заря-32M”, “Заря-35”, “Заря-37M”, “Заря-38” и “Заря-32МК”), а также автономные БЦВМ “Заря-40” и “Заря-41”.
С появлением серийно выпускаемых микропроцессоров (МП) разработка различных БЦВМ пошла широким фронтом. В это время были созданы: БЦВМ серии “Интеграция”, Ц-175, Ц-176 (ХК “Ленинец”, БЦВМ “Молния”) и “Молния-Д” (МНПК “Авионика”), БЦВМ “Алиса” (МНИИ “Агат”), БЦВМ МПО (ОКБ “Авиаавтоматика”), БЦВМ “Сигма” (НПЦ “Синис”) и ряд других. Однако большинство этих разработок не получило практического применения.
В 90-х годах создаются БЦВМ на основе i80386 и i80486, в числе которых можно отметить семейство БЦВМ-386/486 (АО РПКБ), БЦВМ МВК (ОАО “Русская авионика”) и БЦВМ МБ-5 (АО НТЦ “Модуль”).
Характеристики БЦВМ различных поколений
В первых БЦВМ использовались неунифицированные шины, обеспечивающие взаимодействие между блоками машины, и преобразователи “код - аналог” и “аналог - код” для связи с абонентами. По мере развития структуры БЦВМ в качестве внутреннего интерфейса сначала использовался интерфейс “общая шина”, ГОСТ 26765.51 - 86, а затем и системная шина VME, которая уже является открытым интерфейсом. Аналоговый внешний интерфейс дополняется радиальными каналами для передачи последовательных кодов с пропускной способностью 48 кбит/с (ГОСТ 18977 - 79), затем в состав внешнего интерфейса вводятся мультиплексные каналы с пропускной способностью 1 Мбит/с (ГОСТ 26765.52 - 87). В дальнейшем, по мере совершенствования структуры, в составе внешнего интерфейса можно использовать каналы по ГОСТ 50832 - 95 (20 Мбит/с), сетевые интерфейсы типа AS4074 (HSDB), а в перспективе и интерфейс типа SCI
(в варианте для систем реального времени - 1394) с пропускной способностью 1 Гбит/с и 1 Гб/с.
Проанализировав этапы развития элементной базы, архитектуры, структуры БЦВМ, ее ПО, можно сформулировать основные признаки, характеризующие поколения бортовых цифровых вычислительных машин. Хотя любая БЦВМ может быть лишь условно отнесена к какому-либо конкретному поколению, так как некоторые ее параметры могут соответствовать или предыдущему, или последующему поколениям (таблица 1).
• Для БЦВМ первого поколения были характерны относительно низкий информационно-вычислительный потенциал и довольно примитивная (с современной точки зрения) структура, реализуемая с применением дискретных компонентов. Структуру этих БЦВМ составляли арифметическое устройство (АУ), оперативное и постоянное запоминающие устройства (ОЗУ и ПЗУ), устройство управления (УУ) и вторичный источник питания (ВИП). Память машин была одноуровневой. Закрытая архитектура этих машин строилась на основе функциональных блоков, которые разрабатывались специально для каждого конкретного случая. Любая модернизация требовала дополнительной разработки соответствующих функциональных блоков с нужными характеристиками. Программирование производилось в машинных кодах, а для отработки программ использовались интерпретирующие системы и пульты контроля и индикации.
К типовым представителям БЦВМ первого поколения относятся созданные в ЛНПОЭА ЦВМ-263 (рисунок 1) и ЦВМ-264, которые выпускались серийно с 1964 г. Машины имеют быстродействие 62 тыс. оп./с (для операций регистр - регистр) и 31 тыс. оп./с (для операций регистр - память), ОЗУ емкостью 256 16-разрядных слов и ПЗУ емкостью 8Кx16 бит. Наработка на отказ - 200 ч, масса - 330 кг, потребляемая мощность - 2000 Вт.
Рисунок 1. Внешний вид ЦВМ-263
• В структуре БЦВМ второго поколения начинают использоваться элементы конвейеризации, обеспечивающие совмещение в выполнении операций, процессоры, содержащие более совершенные сумматоры и специальные устройства для выполнения операций умножения, деления и вычисления элементарных функций. Структура машин реализуется на интегральных схемах, но остается детерминированной и трудно модернизируемой, т. е., по существу, закрытой. Для написания программ “начинают использоваться языки уровня ассемблера, а для их отработки - специальные отладочные комплексы, объединяющие БЦВМ с инструментальной вычислительной машиной.
Ко второму поколению условно можно отнести БЦВМ семейств “Орбита-10” и “Орбита-20”, созданные в ЛНПОЭА, а также БЦВМ “Аргон-15” разработки НИИ “Аргон” (НИЦЭВТ).
Серийный выпуск БЦВМ семейства “Орбита-10” начат в 1970 г. В составе семейства - более десяти модификаций, имеющих одинаковое быстродействие и различающихся составом УВВ и емкостью памяти. БЦВМ семейства “Орбита-10” - 16-разрядные, их быстродействие в формате R-S и R-R равно 62,5 и 125 тыс. оп./с. В базовой модели используется ОЗУ емкостью 1024 слова, ПЗУ емкостью 16К слов и ЭЗУ емкостью 256 слов. Наработка на отказ, масса и энергопотребление зависят от конфигурации машины и находятся в пределах 250 - 500 ч, 90 - 60 кг и 1500 - 500 Вт соответственно.
Программирование БЦВМ семейства осуществлялось на уровне машинных кодов, делались попытки создания языка программирования уровня ассемблера. Для отладки ПО ГосНИИАС предложил комплекс отработки программ (КОП) в составе бортовой машины, инструментальной ЭВМ и аппаратуры, обеспечивающей их сопряжения.
Серийное производство БЦВМ семейства “Орбита-20” (ЛНПОЭА) – рисунок 3, объединяющего более 50 различных модификаций, начато в 1974 г. До сих пор БЦВМ этого семейства остаются самыми массовыми вычислительными машинами авиационного применения. Все машины семейства имеют одинаковое быстродействие, равное 200 тыс. оп./с (операции сложения) и 100 тыс. оп./с (операции умножения). Базовая модель включает ОЗУ емкостью 512 слов и ПЗУ емкостью 16К слов (рисунок 2).
Рисунок 2. Характеристики машин семейства “Орбита 20”
Рисунок 3. Внешний вид базового комплекса ЦВМ “Орбита-20”
Бортовая цифровая вычислительная машина “Аргон-15” разработана в начале 70-х годов. Она поставлялась пользователям как вычислительное устройство, состоящее из центрального процессора (ЦП) с быстродействием 200 тыс. оп./с (операции сложения), ОЗУ емкостью 2К слов, ПЗУ емкостью 32К слов (четыре блока по 8К слов) и энергонезависимого ЗУ (ДЗУС). Средства сопряжения машины с бортовой аппаратурой (УВВ) создавал разработчик соответствующей подсистемы.
К середине 80-х годов было разработано четыре модификации машины:
“Аргон-15”, “Аргон-15А”, “Аргон-15К” и “Аргон-15-М”. БЦВМ “Аргон-15” (ОЗУ - 1К, ПЗУ - 24К слов) имеет массу 35 кг и наработку на отказ 500 ч.
Быстродействие машины “Аргон-15К” - 500 тысяч, а “Аргон-15-М” - 800 тысяч коротких операций в секунду. БЦВМ “Аргон-15-М” при общей емкости памяти 86К слов (ОЗУ - 5К, ПЗУ - 80К и ДЗУС - 1К слов) имеет наработку на отказ 5000 ч и весит 16,6 кг.
Взаимодействие с абонентами БЦВМ первого и второго поколений производилось через устройство сопряжения (УС), которое содержало необходимый набор преобразователей “аналог - цифра” и “цифра - аналог”, так как бортовая аппаратура имела в основном аналоговый интерфейс. Это устройство конструктивно выполнялось или в виде автономного блока, взаимодействующего с машиной по цифровому каналу, или интегрировалось с БЦВМ, образуя устройство ввода-вывода. Уже для БЦВМ первого поколения была сделана попытка унификации введением нормали 847АТ, которая регламентировала параметры аналоговых каналов. Для обмена последовательными кодами и разовыми командами в бортовых машинах второго поколения вводятся каналы типа ARINC-429 (ГОСТ 18977 - 79).
• В БЦВМ третьего поколения использованы: иерархическая память, включающая сверхоперативную память, регистры общего назначения (РОН), многоуровневая система прерывания, каналы прямого доступа к памяти (ПДП), а также механизмы защиты информации от несанкционированного доступа. В структуре бортовых машин третьего поколения начинают применяться средства поддержки мультипроцессирования. Структура этих БЦВМ имеет в основном магистрально-модульную организацию и допускает изменение характеристик машины в достаточно широких пределах путем использования необходимого количества соответствующих (унифицированных) модулей, т. е. приобретает некоторую открытость. Для построения унифицированных модулей применяются схемы со средним и высоким уровнями интеграции, в том числе и микропроцессорные комплекты больших интегральных схем (МПК БИС). В составе внешнего интерфейса для обмена информацией, наряду с преобразователями “аналог - цифра” и “цифра - аналог”, используются разовые команды и последовательные коды (ГОСТ 18977-79) и мультиплексные каналы, выполненные в соответствии с ГОСТ 26765.52 - 87
(MIL-STD-1553B). Для создания ПО объекта начинают применяться рабочие места программиста (РМП), разрабатываемые одновременно с машиной.
К третьему поколению БЦВМ можно условно отнести машины семейств ЦВМ 80-30ХХХ (ЛНПОЭА), ЦВМ 80-40ХХХ (ЛНПОЭА), “Заря-30” (НИИП), “Заря-40” (НИИП), БЦВМ Ц-100, Ц101, Ц102 и Ц104 (НИИ “Аргон”), БЦВМ А-30, А-40 и А-50 (НИИ “Аргон”) и СБМВ-1, СБМВ-2 (МНПК “Авионика”).
Серийное производство бортовых ЭВМ семейства ЦВМ 80-30ХХХ начато в
1986 г. Быстродействие машин составляет 600 и 300 тыс. оп./с (сложение регистр - регистр и регистр - память) и 100 тыс. оп./с (умножение).
Серийное производство машин семейства ЦВМ 80-40ХХХ начато в 1987 г. Машины имеют одинаковое быстродействие, равное 800 и 500 тыс. оп./с (регистр - регистр и регистр - память соответственно). Емкость памяти изменяется в пределах: для ОЗУ - от 10К до 24К слов; для ПЗУ - от 48К до 224К слов; для ЭЗУ - от 16К до 224К слов. Интерфейсные модули построены в соответствии с ГОСТ 18977 - 79 и ГОСТ 26765.52 - 87. Разработаны две однопроцессорные и четыре двухпроцессорные конфигурации БЦВМ, различающиеся емкостью памяти и составом интерфейса. Для отладки ПО предлагается рабочее место программиста РМП-85.
В составе семейства также представлены четыре модификации: 80-302ХХ, 80-303ХХ, 80-307ХХ (рисунок 4) и 80-308ХХ.
Рисунок 4. Внешний вид ЦВМ80-307XX
Они имеют одинаковое быстродействие, но различаются емкостью памяти, составом УВВ и физическими характеристиками. Минимальную емкость памяти (ОЗУ - 4К, ПЗУ - 12К и ЭЗУ - 1К слов) имеет 80-303ХХ, максимальную (ОЗУ - 24К, ПЗУ - 72К и ЭЗУ - 1К слов) - 80-307ХХ. Особенностью 80-307ХХ является трехпроцессорная структура, особенностью 80-308ХХ - наличие мультиплексного (ГОСТ 26765.52 - 87) канала обмена. Для отладки ПО предлагается рабочее место программиста РМП-80.
Разработка БЦВМ на основе архитектуры “ПОИСК” (проблемно-ориентируемая с изменяемой системой команд) НИИ “Аргон” Ц100 была передана в серийное производство в 1983 г. В начале 80-х годов созданы машины Ц101 и Ц102, а в 1986 г. завершена машина Ц104.
Потенциальное эффективное быстродействие Ц100 составляет 180 тыс. оп./с, Ц101, Ц102 и Ц104 - порядка 400 тыс. оп./с. Емкость ОЗУ в Ц101 и Ц102 составляет 16Кх18 бит, ПЗУ - 64Кх16 бит (128Кх16 бит), ЭЗУ 256х16 бит. БЦВМ Ц104 имеет ОЗУ емкостью 8Кх18 бит, ПЗУ - 64Кх16 бит и ЭЗУ - 256х16 бит. Масса машин Ц101 и Ц102 - 23 кг, энергопотребление - 300 Вт, а Ц104 - 21 кг и 200 Вт соответственно. Вместе с машиной пользователю предлагается система автоматизации программирования, отладки и документирования (САПОД), которая содержит: конфигуратор для настройки транслятора на состав операторов изделия, транслятор с языка символического кодирования операторов и загрузчик. Подсистема автоматизации отладки позволяет проводить автономную и статическую комплексную отладку в среде ОС ЕС в интерактивном режиме и включает в себя диспетчер отладки, транслятор с языка отладки и интерпретатор машинных команд изделия.
Разработка БЦВМ с архитектурой ЕС ЭВМ была начата в НИИ “Аргон” в середине 70-х годов. Эта архитектура использовалась в БЦВМ А-30, А-40 и А-50.
Быстродействие БЦВМ А-30 порядка 625 тыс. оп./с (регистр - регистр), емкость ОЗУ - 32 Кб, ПЗУ - 256 Кб, ДЗУС - 1 Кб. Масса машины составляет 150 кг, энергопотребление - 800 Вт.
БЦВМ А-50 полностью совместима с ЕС ЭВМ, ее быстродействие - 2 млн. оп./с (регистр - регистр). Емкость ОЗУ увеличена до 16 Мб, используются накопители на магнитной ленте и на магнитных цилиндрах, приспособленные для жестких условий эксплуатации. Для создания ПО используются рабочие места, выполненные на базе ЕС ЭВМ.
Разработка БЦВМ СБМВ-1 и СБМВ-2 (МНПК “Авионика”) начата в середине
80-х годов. К 1993 г. было выпущено несколько сот этих машин. В режиме фиксированной запятой ее быстродействие составляет 1000 тыс. оп./с и 50 тыс. оп./с (операции сложения и умножения). Операции с плавающей запятой со скоростью 80 тыс. оп./с. Энергопотребление не превышает 10 Вт.
• Четвертое поколение БЦВМ характеризуется открытой архитектурой. Машины этого поколения могут иметь интегрированную структуру, в состав которой наряду с процессорами общего назначения могут входить и специализированные процессоры. В качестве внешнего интерфейса БЦВМ в настоящее время используются каналы двух типов - по ГОСТ 18977 - 79 (для обмена разовыми командами) и по ГОСТ 26765.52 - 87 (для основного обмена информацией). По мере совершенствования структуры БЦВМ в рамках этого поколения в состав внешнего интерфейса могут быть включены каналы по ГОСТ Р 50832 - 95 и сетевой интерфейс типа AS4074. Использование открытых унифицированных интерфейсов позволяет провести глубокую унификацию, охватывающую все компоненты машины - аппаратные модули, конструктивное исполнение и программное обеспечение.
К четвертому поколению можно условно отнести БЦВМ 90-50ХХХ, семейство БЦВМ-386/486 и БЦВМ “Багет-53”.
Разработка семейства БЦВМ-386/486 начата в АО РПКБ в 90-х годах. В серийное производство эти БЦВМ должны быть запущены в 2000 году.
Предсерийная партия (более 70 опытных образцов), выпущенная к концу 1998 г., уже используется для отработки бортовых комплексов самолетов и вертолетов.
Процессор БЦВМ-386 построен на базе МПК i386DX (тактовая частота 20 МГц) и обеспечивает в режиме плавающей запятой на коротких операциях быстродействие от 0,77 до 2,86 млн. оп./с.
В составе процессорного модуля предусмотрено ОЗУ емкостью 512 Кб, ПЗУ емкостью 512 Кб, флэш-память емкостью 1 Мб и ОЗУ полетных заданий емкостью 64 Кб. Модули внешнего интерфейса обеспечивают обмен в соответствии с ГОСТ 26765.52 - 87 и ГОСТ 18977 - 79. Наработка на отказ БЦВМ-386-1 в указанной конфигурации - 10 000 часов, масса - 9 кг, энергопотребление - 100 Вт.
Для отработки ПО предлагается рабочее место программиста РМП БЦВМ-386.
Базовая модель БЦВМ-486 (БЦВМ-486-1) содержит в структуре модуль ЦП, который построен на основе i80486 DX2, работающий на тактовой частоте 50 МГц и обеспечивающий в режиме фиксированной запятой при выполнении операций сложения регистр - регистр, регистр - память и умножения (32х32) быстродействие 50, 15 и 2 млн. оп./с соответственно. В составе модуля используются ОЗУ и ЭЗУ емкостью по 2 Мб. Наработка на отказ этой машины 10 000 ч, масса 13 кг, энергопотребление - 120 Вт. Для отработки программного обеспечения предлагается рабочее место программиста РМП БЦВМ-486.
• Основные черты пятого поколения БЦВМ еще окончательно не определены. Однако обязательным качеством этих машин следует считать наличие в структуре унифицированных внутренних и внешних (последовательных) интерфейсов, модулей интеллектуальных процессоров, способных к адаптации и обучению, а также “дружелюбного”, интеллектуального интерфейса и развитых операционных систем и инструментальных средств поддержки разработки программ на всех этапах их жизненного цикла.
Работы по созданию БЦВМ пятого поколения все еще находятся на стадии НИР. Сроки перехода к опытно-конструкторским разработкам и создание опытных образцов целиком зависят от финансирования.
Таблица 1-БЦВМ различных поколений
Наименование организации
Год выпуска БЦВМ (разработки)
Местоположение
организации
Название БЦВМ
Поколение
ЛНПОЭА (ОКБ “Электроавтоматика”)
1964
Санкт-Петербург
ЦВМ-263
ЦВМ-264
1-е поколение
Орбита-1
(в микромодулях собственного проектирования)
Орбита-10 (на тонкопленочных гибридных микросборках)
Орбита-10
Орбита-20
2-е поколение
1970
1974
1986
1987
1987
80-30ХХХ
80-40ХХХ
80-302ХХ
80-303ХХ
80-307ХХ
Отличаются емкостью памяти
3-е поколение
1988
90-50XXX
90-60XXX
4-е поколение
АО «Концерн радиостроения «Вега» (НИИ17 Минрадиопрома)
1964
Москва
Пламя-ВТ
Пламя-263
Пламя-264
1-е поколение
Продолжение таблицы 1
НИИ Аргон
1986
1970
1980
Москва
Аргон-11С
Аргон-15
Аргон-15А
Аргон-15К
Аргон-15-М
2-е
Поколение
Аргон-16
Ц-100
Ц-101
Ц-102
Ц-104
Аргон-30
Аргон-40
Аргон-50
3-е
Поколение
АО «Раменское приборостроительное конструкторское бюро»
1990
Раменское
386/486
Багет-53
Багет-52
Багет-63
Багет-62
4-е поколение
Научно-исследовательский институт приборостроения
им. В. В. Тихомирова
(АО «НИИП»)
Москва
Заря-30
Заря-32
Заря-32М
Заря-35
Заря-37М
Заря-38
Заря-32МК
встраиваемые
3-е поколение
Заря-40
Заря-41
автономные
АО «Государственный Рязанский приборный завод»
Рязань
СОЛО-54()
СОЛО-35.02
СОЛО-35.01
СОЛО-21 (разрабатывается)
4-е поколение
МНПК Авионика
Москва
Молния
Молния-Д
1-е поколение
СБМВ-1
СБМВ-2
3-е поколение
АО "НИИМП-К"
("НАУЧНО-ИССЛЕДОВАТЕЛЬСКИЙ ИНСТИТУТ МИКРОПРИБОРОВ-К")
Москва
Салют-1
Салют-2
Салют-3
3-е поколение
ОАО «НИЦЭВТ»
Москва
Бисер-2
Бисер-3
Бисер-4
Бисер-6
3-е поколение
ХК «Ленинец»
Санкт-Петербург
Серии “Интеграция” Ц-175
Ц-176
1-е поколение
МНИИ «Агат»
Жуковский
Алиса
1-е поколение
НПЦ «Сигма»
Москва
БЦВМ “Сигма”
1-е поколение
Литература
1. Авиационная техника на международных авиасалонах в 1997 году. Обзор под ред. Е. А. Федосова. ГосНИИАС, 1998.
2. Гаврилин Б. НИИ приборостроения - лидер в разработке малогабаритных инерциальных систем управления ракетами. Военный парад, 1998, № 3 (27), с. 64 - 65.
3. Мир авионики (С.-Петербург), 1998, №№1 - 4.
4. Руководство по применению и программированию (для перечисленных БЦВМ).
5. Flight International. 9 - 15. oct. 1996. р. 22 - 23; Interawia. Jan/1998. р. 40 - 41 (см. также НЗНТ № 3 - 4, август 1998 г. НИЦ ГосНИИАС).
6. НИИ “Аргон”. Вехи полувекового пути. Москва, 1998.
7. Программируемый процессор сигналов Ц300. Рекламный проспект. НИИ ВС “Спектр” ХК “Ленинец”.
8. “БАГЕТ” - семейство ЭВМ для специализированных применений. КБ КОРУНД-М. Рекламные материалы.
9. Пройдаков Э. СКБ-245 во всех его реинкарнациях. PC Week/RE, № 50/98.
Лекция 3
1) Физические каналы связи ДПА с БЦВМ, разновидности и характеристики физических каналов связи
2) Организация цифрового обмена информацией на борту ЛА, системы счисления, арифметические и логические операции с данными
3) Интерфейсы информационного обмена авиационных и ракетно-космических БЦВМ
1) Физические каналы связи ДПА с БЦВМ, разновидности и характеристики физических каналов связи
В качестве физической среды распространения сигналов в каналах связи используется:
- витая пара проводников,
- кабель коаксиальный (узкополосный, широкополосный),
- волоконно-оптический (световодный) кабель,
- открытый радиоволновый ВЧ и СВЧ - канал.
В таблице представлены качественные характеристики сред физических каналов.
Качественные характеристики сред физических каналов
Типы каналов
Параметры каналов
Ширина полосы частот, МГц
Длина линии, км
Число подключенных абонентов,
шт.
Помехозащищенность
Стоимость
Витая пара проводов
3..5
0,1
50
Средняя
Низкая
Коаксиальный кабель:
узкополосный
10..20
0,3
100
Высокая
Средняя
широкополосный
200…300
1,0
1000
Высокая
Средняя и высокая
Волоконно-оптический кабель
300
2..10
30
Очень высокая
Высокая
Тип используемой среды очень важен, поскольку он определяет максимальную скорость передачи информации. Так, например, двухпроводная открытая линия
(рисунок 3) является простейшим типом среды передачи для соединения двух элементов аппаратуры, имеет скорость передачи меньше 19,2 Кбит/с при длине канала L≤50м, а емкостная связь между двумя проводами обуславливает ее низкую помехозащищенность, как от внешних помех, так и внутренних, вызванных взаимными наводками.
Витая пара проводников (рисунок 4), в отличие от двухпроводной линии, значительно лучше защищена от ложных сигналов (помех), поскольку всякое внешнее воздействие влияет на оба провода и поэтому искажения (или изменения разности сигналов) снижается.
Рисунок 4. Витая пара проводников
Витая пара проводников, используемая совместно со схемами приема и передачи, применяется для скоростей до 1Мбит/с при длине канала L<100 м, а с защитным экраном может иметь скорость 3....5 Мбит/с. Основной фактор, сдерживающий увеличение скорости передачи информации по витой паре проводов, это “скин-эффект”, когда при увеличении скорости битов (частоты передачи) ток перераспределяется так, что большая его часть протекает по наружной поверхности, что приводит к повышению электрического сопротивления проводов и затуханию полезного сигнала.
Коаксиальный кабель (рисунок 5), где один проводник - центральная жила, проходит концентрически соосно внутри сплошного (или плетеного внешнего кругового проводника) предназначен для скоростей более 1Мбит/с. Пространство между проводниками заполняется диэлектриком - изолирующим материалом. Благодаря такой структуре внутренний проводник эффективно защищен от внешних помех. Скорость передачи в коаксиальном кабеле 10...20 Мбит/с при длине канала L до 1км. Волоконно-оптический кабель (рисунок 6) отличается от среды передачи описанных выше типов, тем что в нем носителем информации является пульсирующий световой луч, распространяемый по стекловолокну. Световые лучи имеют значительно большую полосу частот, чем электрические волны, и скорость передачи информации может достигать сотен Мбит/с, а теоретический предел скорости передачи световодных каналов - десятки триллионов бит/с. Волоконно-оптический кабель состоит из отдельного стекловолокна, содержащего жилу световода и оболочку с разными показателями преломления n1 и n2. Кроме того, этот кабель имеет еще защитную внешнюю оболочку, которая экранирует световод от внешних (фоновых) засветок.
Основная характеристика световода – апертура (А), которая определяется согласно выражению
где Qmax_- максимально допустимый угол ввода излучения в световод,
n0, n1, n2 -показатели преломления внешней среды - воздуха, жилы, оболочки световода.
Апертура световода является основным параметром, характеризующим эффективность вводимой оптической мощности сигнала. Простейшим волоконно-оптическим кабелем является кабель, имеющий одну световодную жилу, однако он может быть и многожильным или с пучком волокон (жгутом).
Свойства кабелей определяются типом волокон. Для дальности, скорости и достоверности передачи информации используются следующие параметры волоконно-оптического кабеля:
◦ потери мощности на единицу длины (дБ/км);
◦ дисперсия на единицу длины (нс/км).
◦ диаметр волокна
Типовые характеристики волокон световодной ткани
Тип волокна
Диаметр световодной жилы, мкм
Наружный диаметр, мкм
Потери, дБ/км
Дисперсия, нс/км
Одномодовое
5-10
125-150
0,2-3
0,01-0,1
Многомодовое
50-66
125-150
0,3-3
1-20
С большой сердцевиной
200-600
до 1000
5-20
30-100
Световой сигнал на входе волоконно-оптического кабеля генерируется источником оптического излучения, светодиодом или полупроводниковым лазером. На выходе сигнал принимается фотоприемниками излучения – фотодиодом или фототранзистором.
Открытые радиоволновые каналы в качестве физической среды передачи используют электромагнитные волны в диапазоне 330....1010 Гц. Длина такого канала определяется мощностью передающего устройства, чувствительностью приемника, уровнем воздействия электромагнитных помех и может достигать десятков и сотен км.
2) Организация цифрового обмена информацией на борту ЛА, системы счисления, арифметические и логические операции с данными
На рисунке 7, представлена организация цифрового обмена на борту ЛА
Рисунок 7. Организация цифрового обмена на борту ЛА
Мы будем работать с цифровыми сигналами, которые будут кодироваться и
передаваться в различных системах счисления.
Число – это абстракция, используемая для количественной характеристики и нумерации объектов. Цифры – система знаков, используемая для записи чисел. Разряд – позиция цифры в числе. Система счисления — символический метод записи чисел при помощи цифр. Основанием системы счисления называется количество различных цифр, используемых в каждом из разрядов числа для его изображения в данной системе счисления. Двоичная система счисления - система счисления с основанием 2. Восьмеричная система счисления - система счисления с основанием 8. Шестнадцатеричная система счисления - система счисления с основанием 16 (в качестве дополнительных цифр используются буквы латинского алфавита A, B, C, D, E, F). Для перевода из одной системы в другую используется последовательное деление с записью остатка. К примеру, для бинарной системы счисления: 23/2=11(1)/2=5(1)/2=2(1)/2=1(0) = 10111. Для быстрого перевода из шестнадцатеричной системы счисления число делится на тетрады. Для быстрого перевода из восьмеричной в двоичную используются триады.
Для измерения количества информации используется бит (минимальная частица информации в СИ). Битом называют один двоичный разряд в двоичной системе счисления. Байтом называют группу из 8 бит. Битовая операция – некоторое действие над цепочками битов. Побитовое отрицание – это унарная операция, действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Побитовое И – это бинарная операция, действие которой эквивалентно применению логического И к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов. Побитовое ИЛИ – это бинарная операция, действие которой эквивалентно применению логического ИЛИ к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов. Битовый сдвиг – значения битов копируются в соседние по направлению сдвига. Маскирование – выбор отдельных битов или полей из нескольких битов из двоичной строки или числа. Битовая маска – набор битов, которые используются для маскирования.
Цифровой сигнал – сигнал данных, у которого каждый из представляющих параметров описывается функцией дискретного времени и конечным множеством возможных значений. Устройства, предназначенные для передачи, приема и обработки цифровой
информации (т.е. информации, представленной кодовыми словами), называются цифровыми устройствами.
В современных цифровых устройствах (ЦУ) мы имеем дело лишь с двумя видами сигналов: логический 0 и логическая 1. Эти сигналы могут быть представлены двумя способами:
1. Потенциальный, когда сигналу логического 0 соответствует один уровень постоянного напряжения, а сигналу логической 1 – другой. Причем все ЦУ делятся на две группы:
- с положительной логикой сигналов, когда сигналу логического 0 соответствует низкий уровень напряжения, а сигнал логической 1 – более высокий уровень. Например для широко распространенных в настоящее время микросхем серии 555 сигналу логического 0 соответствует напряжение не более 0,4 В, а сигналу логической 1- напряжение не менее 2,4 В. ЦУ с положительной логикой получили наибольшее распространение. Любая информация в ЦУ может быть представлена совокупностью определенного количества сигналов логического 0 и логической 1в двух формах:
а) последовательной, когда в одной цепи идет последовательное чередование сигналов через временные интервалы t.
б) параллельной, когда в разных нескольких цепях одновременно действуют соответствующие сигналы: каждый в своей цепи.
Такая комбинация цифровых сигналов, несущая какую либо информацию называется кодовым словом.
- отрицательной логикой сигналов, когда сигналу логического 0 соответствует высокий уровень напряжения, а сигналу логической 1 – более низкий уровень.
2. Импульсный, когда сигналу логической 1 соответствует наличие импульса, а сигналу логического 0 – отсутствие импульса. В ЦУ в качестве импульсных сигналов, как правило, используют прямоугольные импульсы, которые вырабатываются импульсными генераторами.
Арифметические команды
Арифметические команды рассматривают коды операндов как числовые двоичные или двоично-десятичные коды. Эти команды могут быть разделены на пять основных групп:
• команды операций с фиксированной запятой (сложение, вычитание, умножение, деление);
• команды операций с плавающей запятой (сложение, вычитание, умножение, деление);
• команды очистки;
• команды инкремента и декремента;
• команда сравнения.
Команды операций с фиксированной запятой работают с кодами в регистрах процессора или в памяти как с обычными двоичными кодами. Команда сложения (ADD) вычисляет сумму двух кодов. Команда вычитания (SUB) вычисляет разность двух кодов. Команда умножения (MUL) вычисляет произведение двух кодов (разрядность результата вдвое больше разрядности сомножителей). Команда деления (DIV) вычисляет частное от деления одного кода на другой. Причем все эти команды могут работать как с числами со знаком, так и с числами без знака. Команды операций с плавающей запятой (точкой) используют формат представления чисел с порядком и мантиссой (обычно эти числа занимают две последовательные ячейки памяти). В современных мощных процессорах набор команд с плавающей запятой не ограничивается только четырьмя арифметическими действиями, а содержит и множество других более сложных команд, например, вычисление тригонометрических функций, логарифмических функций, а также сложных функций, необходимых при обработке звука и изображения. Команды очистки (CLR) предназначены для записи нулевого кода в регистр или ячейку памяти. Эти команды могут быть заменены командами пересылки нулевого кода, но специальные команды очистки обычно выполняются быстрее, чем команды пересылки. Команды очистки иногда относят к группе логических команд, но суть их от этого не меняется. Команды инкремента (увеличения на единицу, INC) и декремента (уменьшения на единицу, DEC) также бывают очень удобны. Их можно в принципе заменить командами суммирования с единицей или вычитания единицы, но инкремент и декремент выполняются быстрее, чем суммирование и вычитание. Эти команды требуют одного входного операнда, который одновременно является и выходным операндом. Наконец, команда сравнения (обозначается CMP) предназначена для сравнения двух входных операндов. По сути, она вычисляет разность этих двух операндов, но выходного операнда не формирует, а всего лишь изменяет биты в регистре состояния процессора (PSW) по результату этого вычитания. Следующая за командой сравнения команда (обычно это команда перехода) будет анализировать биты в регистре состояния процессора и выполнять действия в зависимости от их значений. В некоторых процессорах предусмотрены команды цепочечного сравнения двух последовательностей операндов, находящихся в памяти (например, в процессоре 8086 и совместимых с ним).
Логические команды
Логические команды выполняют над операндами логические (побитовые) операции, то есть они рассматривают коды операндов не как единое число, а как набор отдельных битов. Этим они отличаются от арифметических команд. Логические команды выполняют следующие основные операции:
• логическое И, логическое ИЛИ, сложение по модулю 2 (Исключающее ИЛИ);
• логические, арифметические и циклические сдвиги;
• проверка битов и операндов;
• установка и очистка битов (флагов) регистра состояния процессора (PSW).
Команды логических операций позволяют побитно вычислять основные логические функции от двух входных операндов. Кроме того, операция И (AND) используется для принудительной очистки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие очистки, установлены в нуль). Операция ИЛИ (OR) применяется для принудительной установки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие установки в единицу, равны единице). Операция «Исключающее ИЛИ» (XOR) используется для инверсии заданных битов (в качестве одного из операндов при этом применяется код маски, в котором биты, подлежащие инверсии, установлены в единицу). Команды требуют двух входных операндов и формируют один выходной операнд.
Команды сдвигов позволяют побитно сдвигать код операнда вправо (в сторону младших разрядов) или влево (в сторону старших разрядов). Тип сдвига (логический, арифметический или циклический) определяет, каково будет новое значение старшего бита (при сдвиге вправо) или младшего бита (при сдвиге влево), а также определяет, будет ли где-то сохранено прежнее значение старшего бита (при сдвиге влево) или младшего бита (при сдвиге вправо). Например, при логическом сдвиге вправо в старшем разряде кода операнда устанавливается нуль, а младший разряд записывается в качестве флага переноса в регистр состояния процессора. А при арифметическом сдвиге вправо значение старшего разряда сохраняется прежним (нулем или единицей), младший разряд также записывается в качестве флага переноса. Циклические сдвиги позволяют сдвигать биты кода операнда по кругу (по часовой стрелке при сдвиге вправо или против часовой стрелки при сдвиге влево). При этом в кольцо сдвига может входить или не входить флаг переноса. В бит флага переноса (если он используется) записывается значение старшего бита при циклическом сдвиге влево и младшего бита при циклическом сдвиге вправо. Соответственно, значение бита флага переноса будет переписываться в младший разряд при циклическом сдвиге влево и в старший разряд при циклическом сдвиге вправо.
Для примера на рис. 8 показаны действия, выполняемые командами сдвигов вправо.
Команды проверки битов и операндов предназначены для установки или очистки битов регистра состояния процессора в зависимости от значения выбранных битов или всего операнда в целом. Выходного операнда команды не формируют. Команда проверки операнда (TST) проверяет весь код операнда в целом на равенство нулю и на знак (на значение старшего бита), она требует только одного входного операнда. Команда проверки бита (BIT) проверяет только отдельные биты, для выбора которых в качестве второго операнда используется код маски. В коде маски проверяемым битам основного операнда должны соответствовать единичные разряды.
Рисунок 8. Команды сдвигов вправо
Наконец, команды установки и очистки битов регистра состояния процессора (то есть флагов) позволяют установить или очистить любой флаг, что бывает очень удобно. Каждому флагу обычно соответствуют две команды, одна из которых устанавливает его в единицу, а другая сбрасывает в нуль. Например, флагу переноса С (от Carry) будут соответствовать команды CLC (очистка) и SEC или STC (установка).
3) Интерфейсы информационного обмена авиационных и ракетно-космических БЦВМ – рассматриваются на семинарах и готовятся студентами самостоятельно в виде реферат-докладов.
Лекция 4
Особенности решения задач на ЭВМ (БЦВМ), алгоритмическое и программное обеспечение вычислительного процесса
На ЭВМ (БЦВМ) могут решаться задачи различного характера: научно-инженерные; разработки программного обеспечения; обучения; управления производственными процессами и т. д.
В процессе подготовки и решения на ЭВМ научно-инженерных задач можно выделить следующие этапы:
1. постановка задачи (формулирование задачи). На данном этапе формулируется цель решения задачи и подробно описывается ее содержание. Анализируются характер и сущность всех величин, используемых в задаче, и определяются условия, при которых она решается. Корректность постановки задачи является важным моментом, так как от нее в значительной степени зависят другие этапы;
2. описание задачи (математическое описание). Настоящий этап характеризуется математической формализацией задачи, при которой существующие соотношения между величинами, определяющими результат, выражаются посредством математических формул. Так формируется математическая модель явления с определенной точностью, допущениями и ограничениями. При этом в зависимости от специфики решаемой задачи могут быть использованы различные разделы математики и других дисциплин. Математическая модель должна удовлетворять по крайней мере двум требованиям: реалистичности и реализуемости. Под реалистичностью понимается правильное отражение моделью наиболее существенных черт исследуемого явления. Реализуемость достигается разумной абстракцией, отвлечением от второстепенных деталей, чтобы свести задачу к проблеме с известным решением. Условием реализуемости является возможность практического выполнения необходимых вычислений за отведенное время при доступных затратах требуемых ресурсов. Реализуемость достигается разумной абстракцией, отвлечением от второстепенных деталей, чтобы свести задачу к проблеме с известным решением. Условием реализуемости является возможность практического выполнения необходимых вычислений за отведенное время при доступных затратах требуемых ресурсов;
3. выбор и обоснование метода решения (анализ основных подходов, методов и способов решения, выбор оптимального или квазиоптимального подхода, метода, способа). Модель решения задачи с учетом ее особенностей должна быть доведена до решения при помощи конкретных методов решения. Само по себе математическое описание задачи в большинстве случаев трудно перевести на язык машины. Выбор и использование метода решения задачи позволяет привести решение задачи к конкретным машинным операциям. При обосновании выбора метода необходимо учитывать различные факторы и условия, в том числе точность вычислений, время решения задачи на ЭВМ, требуемый объем памяти и другие;
4. алгоритмизация вычислительного процесса (разработка блок-схемы алгоритма). На данном этапе составляется алгоритм решения задачи согласно действиям, задаваемым выбранным методом решения. Процесс обработки данных разбивается на отдельные относительно самостоятельные блоки, и устанавливается последовательность выполнения блоков. Разрабатывается блок-схема алгоритма;
5. разработка программного обеспечения (составление программы на языке программирования). При составлении программы алгоритм решения задачи переводится на конкретный язык программирования. Для программирования обычно используются языки высокого уровня, поэтому составленная программа требует перевода ее на машинный язык ЭВМ. После такого перевода выполняется уже соответствующая машинная программа;
6. отладка программы (верификация и контрольное моделирование). Отладка заключается в поиске и устранении синтаксических и логических ошибок в программе.
В ходе синтаксического контроля программы транслятором выявляются конструкции и сочетания символов, недопустимые с точки зрения правил их построения или написания, принятых в данном языке. Сообщения об ошибках ЭВМ выдает программисту, при этом вид и форма выдачи подобных сообщений зависят от вида языка и версии используемого транслятора.
После устранения синтаксических ошибок проверяется логика работы программы в процессе ее выполнения с конкретными исходными данными. Для этого используются специальные методы, например, в программе выбираются контрольные точки, для которых вручную рассчитываются промежуточные результаты. Эти результаты сверяются со значениями, получаемыми ЭВМ в данных точках при выполнении отлаживаемой программы. Кроме того, для поиска ошибок могут быть использованы отладчики, выполняющие специальные действия на этапе отладки, например, удаление, замена или вставка отдельных операторов или целых фрагментов программы, вывод или изменение значений заданных переменных;
7. решение задачи на ЭВМ (непосредственное решение задачи) и анализ результатов. После отладки программы ее можно использовать для решения прикладной задачи. При этом обычно выполняется многократное решение задачи на ЭВМ для различных наборов исходных данных. Получаемые результаты интерпретируются и анализируются специалистом или пользователем, поставившим задачу. Разработанная программа длительного использования устанавливается на ЭВМ, как правило, в виде готовой к выполнению машинной программы. К программе прилагается документация, включая инструкцию для пользователя. Чаще всего при установке программы на диск для ее последующего использования помимо файлов с исполняемым кодом устанавливаются различные вспомогательные программы (утилиты, справочники, настройщики и т. д.), а также необходимые для работы программ разного рода файлы с текстовой, графической, звуковой и другой информацией.
При решении некоторых задач, отдельные этапы могут отсутствовать, например, в задачах разработки системного, функционального и специализированного программного обеспечения отсутствует математическое описание. Перечисленные этапы связаны друг с другом. Например, анализ результатов может показать необходимость внесения изменений в программу, алгоритм или даже в постановку задачи. Для уменьшения числа подобных изменений необходимо на каждом этапе по возможности учитывать требования, предъявляемые последующими этапами.
В некоторых случаях связь между различными этапами, например, между постановкой задачи и выбором метода решения, между составлением алгоритма и программированием, может быть настолько тесной, что разделение их становится затруднительным. Исходя из специфики курса дисциплины «БЦВМ и У» целесообразно подробнее рассмотреть 4 и 5 этапы соответственно.
Алгоритмизация вычислительного процесса
Слово «алгоритм» происходит от algorithmi – латинской формы написания имени математика IX века аль-Хорезми, который сформулировал правила выполнения арифметических действий. Первоначально под алгоритмами и понимали только правила выполнения четырех арифметических действий над многозначными числами. Алгоритм – это определенным образом организованная последовательность действий, за конечное число шагов приводящая к решению поставленной задачи.
Алгоритм должен быть составлен таким образом, чтобы исполнитель, в расчете на которого он создается, мог однозначно и точно следовать командам алгоритма и эффективно получать определенный результат. Это накладывает на записи алгоритмов целый ряд обязательных требований, суть которых вытекает из приведенного выше неформального толкования понятия алгоритма. Сформируем эти требования в виде перечня свойств, которым должны удовлетворять алгоритмы, адресуемые заданному исполнителю:
1. Одно из первоначальных требований, которое предъявляется к алгоритму, состоит в том, что описываемый процесс должен быть разбит на последовательность отдельных шагов. Возникающая в результате такого разбиения запись представляет собой упорядоченную совокупность четко отделенных друг от друга предписаний (директив, команд, операторов), образующих прерывную (или, как говорят, дискретную) структуру алгоритма. Только выполнив требования одного предписания, можно приступить к выполнению следующего. Дискретная структура алгоритмической записи может, например, подчеркиваться сквозной нумерацией отдельных команд алгоритма, хотя это требование не является обязательным. Рассмотренное свойство алгоритмов называют дискретность.
2. Используемые на практике алгоритмы составляются с ориентацией на определенного исполнителя. Чтобы составить для него алгоритм, нужно знать, какие команды этот исполнитель может понять и исполнить, а какие не может. Известно, что у каждого исполнителя имеется своя система команд. Это свойство алгоритмов будем называть понятностью.
3. Будучи понятным, алгоритм не должен все же содержать предписаний, смысл которых может восприниматься неоднозначно. Это означает, что одна и та же команда, будучи понятна разным исполнителям, после исполнения каждым из них должна давать одинаковый результат. В данном случае речь фактически идет о том, что запись алгоритма должна быть настолько четкой, полной и продуманной в деталях, чтобы у исполнителя никогда не могло возникнуть потребности в принятии каких-либо самостоятельных решений, не предусмотренных составителем алгоритма. Говоря иначе, алгоритм не должен оставлять места для произвола исполнителя. Кроме того, в алгоритмах недопустимы также ситуации, когда после выполнения очередной команды алгоритма исполнителю неясно, какая из команд алгоритма должна выполняться на следующем шаге. Отмеченное свойства алгоритмов называют определенностью или детерминированностью.
4. Обязательное требование к алгоритмам – результативность. Смысл этого требования состоит в том, что при точном исполнении всех предписаний алгоритма процесс должен прекратиться за конечное число шагов и при этом должен получиться определенный ответ на вопрос задачи (либо вывод о том, что решения не существует).
5. Наиболее распространены алгоритмы, обеспечивающие решение не одной исключительной задачи, а некоторого класса задач данного типа. Это свойство алгоритма называют массовостью. В простейшем случае массовость обеспечивает возможность использования различных значений исходных данных.
Способы записи алгоритма
Основными изобразительными средствами алгоритмов являются следующие способы их записи:
- словесный;
- формульно-словесный;
- блок-схемный;
- псевдокод;
- структурные диаграммы;
- языки программирования.
Словесный способ – это содержание этапов вычислений задается на естественном языке в произвольной форме с требуемой детализацией.
Формульно-словесный способ - это задание инструкций с использованием математических символов и выражений в сочетании со словесными пояснениями.
Блок-схемный способ - это графическое изображение логической структуры алгоритма, в котором каждый этап процесса переработки данных представляется в виде геометрических фигур (блоков), имеющих определенную конфигурацию в зависимости от характера выполняемых операций.
В приведенной ниже табл.1 представлены основные блоки, используемые при построении алгоритма в блок-схемной форме.
Таблица 1. Блоки используемые при блок-схемной записи алгоритма
Доказано, что любую программу можно написать, используя комбинации трех управляющих структур:
- следования, или последовательности операторов;
- развилки, или условного оператора;
- повторения или оператора цикла.
Разработка программного обеспечения
Языки программирования
Развитие вычислительной техники сопровождается созданием новых и совершенствованием существующих средств общения программистов с ЭВМ – языков программирования (ЯП). Под ЯП понимают правила представления данных и записи алгоритмов их обработки, которые автоматически выполняются ЭВМ. В более абстрактном виде ЯП является средством создания программных моделей объектов и явлений внешнего мира. К настоящему времени созданы десятки различных ЯП от самых примитивных до близких к естественному языку человека. Чтобы разобраться во всем многообразии ЯП, нужно знать историю их создания, генезис и тенденции развития, что в конечном счете позволит осуществить классификацию.
История развития языков программирования
Первые ЭВМ, созданные человеком, имели небольшой набор команд и встроенных типов данных, но позволяли выполнять программы на машинном языке. Машинный язык (МЯ) – единственный язык, понятный ЭВМ. Он реализуется аппаратно: каждую команду выполняет некоторое электронное устройство. Программа на МЯ представляет собой последовательность команд и данных, заданных в цифровом виде. Данные на МЯ представлены числами и символами. Операции являются элементарными и из них строится вся программа. Ввод программы в цифровом виде производился непосредственно в память с пульта ЭВМ либо с примитивных устройств ввода. Естественно, что процесс программирования был очень трудоемким, разобраться в программе даже автору было довольно сложно, а эффект от применения ЭВМ был довольно низким. Этот этап в развитии ЯП показал, что программирование является сложной проблемой, трудно поддающейся автоматизации, но именно программное обеспечение определяет в конечном счете эффективность применения ЭВМ. Поэтому на всех последующих этапах усилия направлялись на совершенствование интерфейса между программистом и ЭВМ – языка программирования.
Стремление программистов оперировать не цифрами, а символами, привело к созданию мнемонического языка программирования, который называют ассемблером, мнемокодом, автокодом. Этот язык имеет определенный синтаксис записи программ, в котором, в частности, цифровой код операции заменен мнемоническим кодом. Теперь программа имеет более удобочитаемую форму, но ее не понимает ЭВМ. Поэтому понадобилось создать специальную программу транслятор, который преобразует программу с языка ассемблера на МЯ. Эта проблема потребовала, в свою очередь, глубоких научных исследований и разработки различных теорий, например теорию формальных языков, которые легли в основу создания трансляторов. Практически любой класс ЭВМ имеет свой язык ассемблера. На сегодняшний день язык ассемблера используется для создания системных программ, использующих специфические аппаратные возможности данного класса ЭВМ.
Следующий этап характеризуется созданием языков высокого уровня (ЯВУ). Эти языки являются универсальными (на них можно создавать любые прикладные программы) и алгоритмически полными, имеют более широкий спектр типов данных и операций, поддерживают технологии программирования. На этих языках создается неисчислимое множество различных прикладных программ. Принципиальными отличиями ЯВУ от языков низкого уровня являются:
использование переменных; возможность записи сложных выражений; расширяемость типов данных за счет конструирования новых типов из базовых; расширяемость набора операций за счет подключения библиотек подпрограмм; слабая зависимость от типа ЭВМ.
С усложнением ЯП усложняются и трансляторы для них. Теперь в набор инструментов программиста, кроме транслятора, входит текстовый редактор для ввода текста программ, отладчик для устранения ошибок, библиотекарь для создания библиотек программных модулей и множество других служебных программ. Все вместе это называется системой программирования. Наиболее яркими представителями ЯВУ являются FORTRAN, PL/1, Pascal, C, Basic, Ada.
Может возникнуть вопрос: почему создано столько различных языков одного класса? Почему нельзя создать один язык на все случаи жизни? Каждый из разработчиков ЯВУ стремился создать самый лучший и самый универсальный язык, который позволял бы быстро получать самые эффективные, надежные и безошибочные программы. Однако в процессе этого поиска выяснилось, что дело не в самом языке, а в технологии его использования. Одновременно с развитием универсальных ЯВУ стали развиваться проблемно-ориентированные ЯП, которые решали экономические задачи (COBOL), задачи реального времени (Modula-2, Ada), символьной обработки (Snobol), моделирования (GPSS, Simula, SmallTalk), численно-аналитические задачи (Analitic) и другие. Эти специализированные языки позволяли более адекватно описывать объекты и явления реального мира, приближая язык программирования к языку специалиста в проблемной области. Другим направлением развития ЯП является создание языков сверхвысокого уровня (ЯСВУ). На языке высокого уровня программист задает процедуру (алгоритм) получения результата по известным исходным данным, поэтому они называются процедурными ЯП. На ЯСВУ программист задает отношения между объектами в программе, например систему линейных уравнений, и определяет, что нужно найти, но не задает как получить результат. Такие языки еще называют непроцедурными, т.к. сама процедура поиска решения встроена в язык (в его интерпретатор). Такие языки используются, например, для решения задач искусственного интеллекта (Lisp, Prolog) и позволяют моделировать мыслительную деятельность человека в процессе поиска решений. К непроцедурным языкам относят и языки запросов систем управления базами данных (QBE, SQL).
Языки программирования общего назначения
Ассемблер. Первым значительным шагом представляется переход к языку ассемблера. Не очень заметный, казалось бы, шаг – переход к символическому кодированию машинных команд – имел на самом деле огромное значение. Программисту не надо было больше вникать в хитроумные способы кодирования команд на аппаратном уровне. Более того, зачастую одинаковые по сути команды кодировались совершенно различным образом в зависимости от своих параметров (широко известный пример из мира современных компьютеров – это кодирование инструкции mov в процессорах Intel: существует несколько совершенно по-разному кодируемых вариантов команды; выбор того или иного варианта зависит от операндов, хотя суть выполняемой операции неизменна: поместить содержимое (или значение) второго операнда в первый). Появилась также возможность использования макросов и меток, что также упрощало создание, модификацию и отладку программ. Появилось даже некое подобие переносимости - существовала возможность разработки целого семейства машин со сходной системой команд и некоего общего ассемблера для них, при этом не было нужды обеспечивать двоичную совместимость. Вместе с тем, переход к новому языку таил в себе и некоторые отрицательные (по крайней мере, на первый взгляд) стороны. Становилось почти невозможным использование всяческих хитроумных приемов сродни тем, что упомянуты выше. Кроме того, здесь впервые в истории развития программирования появились два представления программы: в исходных текстах и в откомпилированном виде. Сначала, пока ассемблеры только транслировали мнемоники в машинные коды, одно легко переводилось в другое и обратно, но затем, по мере появления таких возможностей, как метки и макросы, дизассемблирование становилось все более и более трудным делом. К концу ассемблерной эры возможность автоматической трансляции в обе стороны была утеряна окончательно. В связи с этим было разработано большой количество специальных программ-дизассемблеров, осуществляющих обратное преобразования, однако в большинстве случаев они с трудом могут разделить код и данные. Кроме того, вся логическая информация (имена переменных, меток и т.п.) теряется безвозвратно. В случае же задачи о декомпиляции языков высокого уровня примеры удовлетворительного решения проблемы и вовсе единичны.
Фортран. В 1954 году в недрах корпорации IBM группой разработчиков во главе с Джоном Бэкусом (John Backus) был создан язык программирования Fortran. Значение этого события трудно переоценить. Это первый язык программирования высокого уровня. Впервые программист мог по-настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, отличающей новый язык от ассемблера, была концепция подпрограмм. Напомним, что это современные компьютеры поддерживают подпрограммы на аппаратном уровне, предоставляя соответствующие команды и структуры данных (стек) прямо на уровне ассемблера, в 1954 же году это было совершенно не так. Поэтому компиляция Fortran’а была процессом отнюдь не тривиальным. Кроме того, синтаксическая структура языка была достаточно сложна для машинной обработки в первую очередь из-за того, что пробелы как синтаксические единицы вообще не использовались. Это порождало массу возможностей для скрытых ошибок. Язык Фортран использовался (и используется) для научных вычислений. Он страдает от отсутствия многих привычных языковых конструкций и атрибутов, компилятор практически никак не проверяет синтаксически правильную программу с точки зрения семантической корректности (соответствие типов и проч.). В нем нет поддержки современных способов структурирования кода и данных. Это осознавали и сами разработчики. По признанию самого Бэкуса, перед ними стояла задача скорее разработки компилятора, чем языка. Понимание самостоятельного значения языков программирования пришло позже. Появление Фортрана было встречено еще более яростной критикой, чем внедрение ассемблера. Программистов пугало снижение эффективности программ за счет использования промежуточного звена в виде компилятора. И эти опасения имели под собой основания: действительно, хороший программист, скорее всего, при решении какой-либо небольшой задачи вручную напишет код, работающий быстрее, чем код, полученный как результат компиляции. Через некоторое время пришло понимание того, что реализация больших проектов невозможна без применения языков высокого уровня. Мощность вычислительных машин росла, и с тем падением эффективности, которое раньше считалось угрожающим, стало возможным смириться. Преимущества же языков высокого уровня стали настолько очевидными, что побудили разработчиков к созданию новых языков, все более и более совершенных.
Cobol. В 1960 году был создан язык программирования Cobol. Он задумывался как язык для создания коммерческих приложений, и он стал таковым. На Коболе написаны тысячи прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных, что характерно именно для коммерческих приложений. Популярность Кобола столь высока, что даже сейчас, при всех его недостатках (по структуре и замыслу Кобол во многом напоминает Фортран) появляются новые его диалекты и реализации. Так недавно появилась реализация Кобола, совместимая с Microsoft.NET, что потребовало внесения в язык некоторых черт объектно-ориентированного языка.
PL/1. В 1964 году все та же корпорация IBM создала язык PL/1, который был призван заменить Cobol и Fortran в большинстве приложений. Язык обладал исключительным богатством синтаксических конструкций. В нем впервые появилась обработка исключительных ситуаций и поддержка параллелизма. Надо заметить, что синтаксическая структура языка была крайне сложной. Пробелы уже использовались как синтаксические разделители, но ключевые слова не были зарезервированы. Язык так и не стал популярен вне мира IBM.
BASIC. В 1963 году в Дартмурском колледже (Dartmouth College) был создан язык программирования BASIC (Beginners’ All-Purpose Symbolic Instruction Code – многоцелевой язык символических инструкций для начинающих). Язык задумывался в первую очередь как средство обучения и как первый изучаемый язык программирования. Он предполагался легко интерпретируемым и компилируемым. Надо сказать, что BASIC действительно стал языком, на котором учатся программировать (по крайней мере, так было еще несколько лет назад; сейчас эта роль отходит к Pascal). Было создано несколько мощных реализаций BASIC, поддерживающих самые современные концепции программирования (ярчайший пример – Microsoft Visual Basic).
Algol. В 1960 году командой во главе с Петером Науром (Peter Naur) был создан язык программирования Algol. Этот язык дал начало целому семейству Алгол-подобных языков (важнейший представитель – Pascal). В 1968 году появилась новая версия языка. Она не нашла столь широкого практического применения, как первая версия, но была весьма популярна в кругах теоретиков. Язык был достаточно интересен, так как обладал многими уникальными на так момент характеристиками.
Pascal-подобные языки. В 1970 году Никлаусом Виртом был создал язык программирования Pascal. Язык замечателен тем, что это первый широко распространенный язык для структурного программирования (первым, строго говоря, был Алгол, но он не получил столь широкого распространения). Впервые оператор безусловного перехода перестал играть основополагающую роль при управлении порядком выполнения операторов. В этом языке также внедрена строгая проверка типов, что позволило выявлять многие ошибки на этапе компиляции. Отрицательной чертой языка было отсутствие в нем средств для разбиения программы на модули. Вирт осознавал это и разработал язык Modula-2 (1978), в котором идея модуля стала одной из ключевых концепций языка. В 1988 году появилась Modula-3, в которую были добавлены объектно-ориентированные черты. Логическим продолжением Pascal и Modula являются язык Oberon и Oberon-2. Они характеризуются движением в сторону объектно- и компонентно- ориентированности.
C-подобные языки. В 1972 году Керниганом и Ритчи был создан язык программирования C. Он создавался как язык для разработки операционной системы UNIX. C часто называют «переносимым ассемблером», имея в виду то, что он позволяет работать с данными практически так же эффективно, как на ассемблере, предоставляя при этом структурированные управляющие конструкции и абстракции высокого уровня (структуры и массивы). Именно с этим связана его огромная популярность и поныне. И именно это является его ахиллесовой пятой. Компилятор C очень слабо контролирует типы, поэтому очень легко написать внешне совершенно правильную, но логически ошибочную программу. В 1986 году Бьярн Страуструп создал первую версию языка C++, добавив в язык C объектно-ориентированные черты, взятые из Simula (см. ниже), и исправив некоторые ошибки и неудачные решения языка. C++ продолжает совершенствоваться и в настоящее время, так в 1998 году вышла новая (третья) версия стандарта, содержащая в себе некоторые довольно существенные изменения. Язык стал основой для разработки современных больших и сложных проектов. У него имеются, однако же, и слабые стороны, вытекающие из требований эффективности.
Язык Java. В 1995 году в корпорации Sun Microsystems Кеном Арнольдом и Джеймсом Гослингом на базе синтаксиса C и C++ был создан язык Java, который был избавлен от некоторых неприятных черт С. Отличительной особенностью языка является компиляция в код некоей абстрактной машины, для которой затем пишется эмулятор (Java Virtual Machine) для реальных систем. Кроме того, в Java нет указателей и множественного наследования, что сильно повышает надежность программирования.
Язык C#. В 1999–2000 годах в корпорации Microsoft был создан язык C#. Он в достаточной степени схож с Java (и задумывался как альтернатива последнему), но имеет и отличительные особенности. Ориентирован, в основном, на разработку многокомпонентных Интернет-приложений.
Языки Ada. В 1983 году под эгидой Министерства Обороны США был создан язык Ada. Язык замечателен тем, что очень много ошибок может быть выявлено на этапе компиляции. Кроме того, поддерживаются многие аспекты программирования, которые часто отдаются на откуп операционной системе (параллелизм, обработка исключений). В 1995 году был принят стандарт языка Ada 95, который развивает предыдущую версию, добавляя в нее объекно - ориентированность и исправляя некоторые неточности. Оба этих языка не получили широкого распространения вне военных и прочих крупномасштабных проектов (авиация, железнодорожные перевозки). Основной причиной является сложность освоения языка и достаточно громоздкий синтаксис (значительно более громоздкий, чем Pascal).
Языки обработки данных
Все вышеперечисленные языки являются языками общего назначения в том смысле, что они не ориентированы и не оптимизированы под использование каких-либо специфических структур данных или на применение в каких-либо специальных областях.. Ниже приведен краткий обзор таких языков.
APL. В 1957 году была предпринята попытка создания языка для описания математической обработки данных. Язык был назван APL (Application Programming Language). Его отличительной особенностью было использование математических символов (что затрудняло применение на текстовых терминалах; появление графических интерфейсов сняло эту проблему) и очень мощный синтаксис, который позволял производить множество нетривиальных операций прямо над сложными объектами, не прибегая к разбиению их на компоненты. Широкому применению помешало, как уже отмечалось, использование нестандартных символов как элементов синтаксиса.
Snobol и Icon. В 1962 году появился язык Snobol (а в 1974 – его преемник Icon), предназначенный для обработки строк. Синтаксис Icon напоминает С и Pascal одновременно. Отличие заключается в наличии мощных встроенных функций работы со строками и связанная с этими функциями особая семантика. Современным аналогом Icon и Snobol является Perl – язык обработки строк и текстов, в который добавлены некоторые объектно-ориентированные возможности. Считается очень практичным языком, однако ему недостает элегантности.
SETL. В 1969 году был создан язык SETL – язык для описания операций над множествами. Основной структурой данных в языке является множество, а операции аналогичны математическим операциям над множествами. Полезен при написании программ, имеющих дело со сложными абстрактными объектами.
Lisp. В 1958 году появился язык Lisp – язык для обработки списков. Получил достаточно широкое распространение в системах искусственного интеллекта. Имеет несколько потомков: Planner (1967), Scheme (1975), Common Lisp (1984). Многие его черты были унаследованы современными языками функционального программирования.
Скриптовые языки программирования
В последнее время в связи развитием Интернет-технологий, широким распространением высокопроизводительных компьютеров и рядом других факторов получили распространение так называемые скриптовые языки. Эта языки первоначально ориентировались на использование в качестве внутренних управляющих языков во всякого рода сложных системах. Многие из них, однако же, вышли за пределы сферы своего изначального применения и используются ныне в совсем иных областях. Характерными особенностями данных языков являются, во-первых, их интерпретируемость (компиляция либо невозможна, либо нежелательна), во-вторых, простота синтаксиса, а в-третьих, легкая расширяемость. Таким образом, они идеально подходят для использования в часто изменяемых программах, очень небольших программах или в случаях, когда для выполнения операторов языка затрачивается время, несопоставимое со временем их разбора. Было создано достаточно большое количество таких языков, перечислим лишь основные и наиболее часто используемые.
JavaScript. Язык Java был создан в компании Netscape Communications в качестве языка для описания сложного поведения веб-страниц. Первоначально назывался LiveScript, причиной смены названия получили маркетинговые соображения. Интерпретируется браузером во время отображения веб-страницы. По синтаксису схож с Java и (отдаленно) с C/C++. Имеет возможность использовать встроенную в браузер объектную функциональность, однако подлинно объектно-ориентированным языком не является.
VBScript. Язык был создан в корпорации Microsoft во многом в качестве альтернативы JavaScript. Имеет схожую область применения. Синтаксически схож с языком Visual Basic (и является усеченной версией последнего). Так же, как и JacaScript, исполняется браузером при отображении веб-страниц и имеет ту же степень объектно - ориентированности.
Perl. Язык создавался в помощь системному администратору операционной системы Unix для обработки различного рода текстов и выделения нужной информации. Развился до мощного средства работы с текстами. Является интерпретируемым языком и реализован практически на всех существующих платформах. Применяется при обработке текстов, а также для динамической генерации веб-страниц на веб-серверах.
Python. Интерпретируемый объектно-ориентированный язык программирования. По структуре и области применения близок к Perl, однако менее распространен и более строг и логичен. Имеются реализации для большинства существующих платформ.
Объектно-ориентированные языки программирования
Объектно-ориентированный подход, пришедший на смену структурному, впервые появился отнюдь не в C++.
Simula. Первым объектно-ориентрованным языком был язык Simula (1967). Этот язык был предназначен для моделирования различных объектов и процессов, и объектно-ориентированные черты появились в нем именно для описания свойств модельных объектов.
Smalltalk. Популярность объектно-ориентированному программированию принес язык Smalltalk, созданный в 1972 году. Язык предназначался для проектирования сложных графических интерфейсов и был первым по-настоящему объектно-ориентированным языком. В нем классы и объекты – это единственные конструкции программирования. Большим недостатком Smalltalk являются большие требования к памяти и низкая производительность полученных программ. Это связано с не очень удачной реализацией объектно-ориентированных особенностей. Популярность языков C++ и Ada 95 связана именно с тем, что объектно - ориентированность реализована без существенного снижения производительности.
Eiffel. Существует язык с очень хорошей реализацией объектно - ориентированности, не являющийся надстройкой ни над каким другим языком. Это язык Eiffel (1986). Являясь чистым языком объектно-ориентированного программирования, он, кроме того, повышает надежность программы путем использования «контрольных утверждений».
Языки параллельного программирования
Большинство компьютерных архитектур и языков программирования ориентированы на последовательное выполнение операторов программы. В настоящее время, однако же, существуют программно-аппаратные комплексы, позволяющие организовать параллельное выполнение различных частей одного и того же вычислительного процесса. Для программирования таких систем необходима специальная поддержка со стороны средств программирования, в частности, языков программирования. Некоторые языки общего назначения содержат в себе элементы поддержки параллелизма, однако же программирование истинно параллельных систем требует подчас специальных приемов.
Язык Оccam. Был создан в 1982 году и предназначен для программирования транспьютеров – многопроцессорных систем распределенной обработки данных. Он описывает взаимодействие параллельных процессов в виде каналов – способов передачи информации от одного процесса к другому. Отметим особенность синтаксиса языка Occam – в нем последовательный и параллельный порядки выполнение операторов равноправны, и их необходимо явно указывать ключевыми словами PAR и SEQ.
Linda. В 1985 году была предложена модель параллельных вычислений Linda. Основной ее задачей является организация взаимодействия между параллельно выполняющимися процессами. Это достигается за счет использования глобальной кортежной области (tuple space). Процесс может поместить туда кортеж с данными (то есть совокупность нескольких, возможно разнородных, данных), а другой процесс может ожидать появления в кортежной области некоторого кортежа и, после его появления, прочитать кортеж с возможным последующим его удалением. Заметим, что процесс может, например, поместить кортеж в область и завершиться, а другой процесс может через некоторое время воспользоваться этим кортежем. Таким образом обеспечивается возможность асинхронного взаимодействия. Очевидно, что при помощи такой модели может быть сэмулировано и синхронное взаимодействие. Linda – это модель параллельных вычислений, она может быть добавлена в любой язык программирования. Существуют достаточно эффективные реализации Linda, обходящие проблему существования глобальной кортежной области с потенциально неограниченным объемом памяти.
Языки графического программирования
Simulink – это графическая среда имитационного моделирования, позволяющая при помощи блок-диаграмм в виде направленных графов, строить динамические модели, включая дискретные, непрерывные и гибридные, нелинейные и разрывные системы. Интерактивная среда Simulink, позволяет использовать уже готовые библиотеки блоков для моделирования электросиловых, механических и гидравлических систем, а также применять развитый модельно-ориентированный подход при разработке систем управления, средств цифровой связи и устройств реального времени. Дополнительные пакеты расширения Simulink позволяют решать весь спектр задач от разработки концепции модели до тестирования, проверки, генерации кода и аппаратной реализации. Simulink интегрирован в среду MATLAB, что позволят использовать встроенные математические алгоритмы, мощные средства обработки данных и научную графику.
LabVIEW – язык графического программирования, в котором для создания приложений используются графические образы (иконки) вместо традиционного текстового кода. От пользователя пакета не требуется знаний языков программирования, но понятие об алгоритме, цикле, выходе по условию и т.п. конечно иметь нужно. Все действия сводятся к простому построению структурной схемы приложения в интерактивной графической системе с набором всех необходимых библиотечных образов, из которых собираются объекты, называемые Виртуальными Инструментами (VI). VI состоит из двух частей – Блок-Диаграмма (Block Diagram) и Передняя Панель (Front Panel). Блок-диаграмма – это программный код (точнее визуальное графическое представление кода), а Передняя панель – это интерфейс. LabVIEW используется в системах сбора и обработки данных, а также для управления техническими объектами и технологическими процессами.
Неимперативные языки программирования
Все языки, о которых шла речь ранее, имеют одно общее свойство: они императивны. Это означает, что программы на них, в конечном итоге, представляют собой пошаговое описание решения той или иной задачи. Можно попытаться описывать лишь постановку проблемы, а решать задачу поручить компилятору. Существует два основных подхода, развивающие эту идею: функциональное и логическое программирование.
Функциональные языки
Основная идея, лежащая в основе функционального программирования – это представление программы в виде математических функций (т.е. функций, значение которых определяется лишь их аргументами, а не контекстом выполнения). Оператор присваивания в таких языках не используется (или, как минимум, его использование не поощряется). Императивные возможности, как правило, имеются, но их применение обставлено серьезными ограничениями. Существуют языки с «ленивой» и с «энергичной» семантикой. Различие заключается, грубо говоря, в том, что в языках с «энергичной» семантикой вычисления производятся в том же месте, где они описаны, а в случае «ленивой семантики» вычисление производится только тогда, когда оно действительно необходимо. Первые языки имеют более эффективную реализацию, в то время как вторые – лучшую семантику. Из языков с «энергичной семантикой» упомянем ML и два его современных диалекта – Standard ML (SML) и CaML. Последний имеет объектно-ориентированного потомка – Objective CaML (O’CaML).
Среди языков с «ленивой семантикой» наиболее распространены два: Haskell и его более простой диалект Clean.
Языки логического программирования
Программы на языках логического программирования выражены как формулы математической логики, а компилятор пытается получить следствия из них. Родоначальником большинства языков логического программирования является язык Prolog (1971). У него есть ряд потомков – Parlog (1983, ориентирован на параллельные вычисления), Delta Prolog и др. Логическое программирование, как и функциональное – это отдельная область программирования, не рассматриваемая в данном курсе лекций.
Стили программирования
Одним из важнейших признаков классификации языков программирования является принадлежность их к одному из стилей, основными из которых являются следующие стили:
• процедурный;
• функциональный;
• логический;
• объектно-ориентированный;
• графический.
Каждому стилю программирования свойственно использование различных ЯП (как правило высокого и сверхвысокого уровня).
Тенденции развития языков программирования различного класса
Языки системного программирования, на которых создаются операционные системы, развиваются в направлении повышения их уровня и независимости от ЭВМ. На сегодняшний день 90% системного программного обеспечения создается не на языке ассемблера, а на языке C. Например, операционная система Unix практически полностью написана на C. Язык C позволяет получать программы, сравнимые по своей эффективности с программами, написанными на языке ассемблера. Машинная независимость достигается использованием стандарта языка, поддерживаемого всеми разработчиками трансляторов, и использованием так называемых кросс-систем для эквивалентного преобразования программ с одного языка низкого уровня на другой.
Другим направлением является повышение уровня самого машинного языка. Например, известны Lisp-машины, в которых машинным языком является язык Lisp (реализован аппаратно). Другим примером являются ЭВМ 5-го поколения с машинным языком искусственного интеллекта Prolog.
ЯВУ развиваются в направлении поддержки технологий программирования, обеспечения низкоуровневых операций (уровня ассемблера), обеспечения новых информационных технологий (НИТ) и независимости от среды реализации. Следует сказать, что по своим возможностям ЯВУ постепенно приближаются к C.
Активно развивается технология объектно-ориентированное программирование (ООП) Практически все современные ЯВУ поддерживают ООП и все современные программные системы построены на принципах ООП. Для обозначения факта поддержки ООП языки получают приставку Object (например, ObjectPascal) или другие (например, C++).
Windows, сети ЭВМ, серверы, базы данных и Internet, как основа НИТ, оказывают сильнейшее влияние на современные ЯП. Разработчики ЯП просто обязаны включать в языки средства поддержки НИТ, чтобы привлечь программистов на свою сторону. Для поддержки Windows создаются системы визуального программирования с приставкой Visual, например Visual C++, Visual Basic и др. Для работы с БД, сетями и Internet в ЯП включаются специальные внутренние или внешние средства.
Стремление к созданию программ, независимых от типа ЭВМ и операционной системы, привело к созданию языка Java. Основная задача Java – обеспечить выполнение программ, распространяемых через Web-страницы Internet, на любой рабочей станции. Кроме того, Java поддерживает все средства НИТ и в ближайшее время, очевидно, станет самым популярным ЯП.
Популярность языков искусственного интеллекта за последние 10 лет, к сожалению, заметно упала. Это связано, прежде всего, с психологическими проблемами, которые испытывают программисты при использовании этих языков. Например, в мощнейшем языке Lisp программа имеет очень сложную для понимания списочную структуру и небольшой по объему проект очень быстро выходит из-под контроля. В языке Prolog программист должен точно знать логику работы встроенной машины логического вывода, а работа программы зависит от структуры и содержимого базы знаний (БЗ). Если с проектированием программы и структуры БЗ программист справляется, то для заполнения БЗ он должен быть экспертом в предметной области либо тесно контактировать с экспертом и извлекать из него знания, а то и другое является сложной задачей.
Набирают популярность в следствии своей высокоуниверсальности, простоты и функциональности графические языки программирования, особенно MATLAB/ Simulink и NI LabVIEW, поэтому в следующем разделе лекции остановимся и детально рассмотрим характерные особенности данных ЯП на конкретных примерах.
Примеры использования графических языков программирования в решении прикладных инженерных и научных задач
Рассмотрим в качестве примера математическую модель описывающую бесплатформенную инерциальную навигационную систему (БИНС), построенную на алгоритме ориентации с углами Эйлера-Крылова, построенную с помощью языка графического программирования MATLAB/ Simulink (данный графический язык программирования был также подробно рассмотрен в лекции 5 на примере моделирования человека-оператора в контуре управления ЛА).
Для реализации алгоритма ориентации с углами Эйлера-Крылова необходимо из составляющих угловой скорости получить углы рыскания, тангажа и крена. Данный алгоритм основан на решении системы уравнений (1).
(1)
Уравнения (1) называются кинематическими уравнениями в углах Эйлера-Крылова. Проинтегрировать систему дифференциальных уравнений (1) можно численными методами, в результате чего будут определены параметры ориентации ψ (рысканье), θ (тангаж), γ (крен).
Структурная схема горизонтальных каналов БИНС представлена на рис. 1.
Рис. 1. Структурная схема горизонтальных каналов БИНС
Работа БИНС происходит следующим образом. Блок акселерометров вырабатывает проекции вектора кажущегося ускорения nX, nY, nZ на ребра связанного трехгранника. Пересчет компонент вектора кажущегося ускорения из связанного трехгранника в географический осуществляется с помощью матрицы С, которая вычисляется на основании показаний ДУС. В результате пересчета образуются проекции кажущегося ускорения nХg и nZg на оси географической системы координат. Из составляющих nХg, nZg исключаются компенсирующие ускорения и , сформированные на основании равенств (2), в результате чего образуются ускорения относительного движения ЛА и .
(2)
Двукратное интегрирование ускорений и на основании уравнений (3) и (4) позволяет определить координаты местоположения и скорости объекта.
(3)
(4)
По информации об угловых скоростях широте и угловой скорости Земли U вырабатываются проекции вектора абсолютной угловой скорости географического трехгранника на свои оси ωXg, ωYg, ωZg на основе соотношений (5):
(5)
Составляющие угловой скорости ωXg, ωYg, ωZg после пересчета с помощью матрицы С-1 поступают в алгоритм ориентации.
Выработка параметров ориентации ψ,θ,γпроисходит на основе измерений ДУС. Три ДУС измеряют проекции вектора абсолютной угловой скорости ЛА ωX, ωY, ωZ на ребра связанного трехгранника. Из показаний ДУС вычитаются проекции вектора угловой скорости географического трехгранника на оси связанной системы координат которые для ЛА являются переносной угловой скоростью, вследствие чего образуются относительные угловые скорости По информации о проекциях вырабатываются углы рыскания ψ, тангажа θ и крена γ интегрированием уравнений (1). На основании значений углов ψ,θ,γформируются матрицы С и СT=C-1.
Необходимый для решения уравнений (1) блок интегрирования (Integrator) находится в библиотеке Continuous.
Модель алгоритма ориентации с углами Эйлера-Крылова приведена на рис. 2.
Рис. 2. Алгоритм ориентации с углами Эйлера-Крылова
Для осуществления операции деления необходимо в окне параметров блока Product ввести символ */. Следует также отметить, что на интеграторах по умолчанию установлены нулевые начальные условия (Initial condition) (рис. 3.), соответствующие начальным значениям углов рыскания, тангажа и крена (так как была принята синусоидальная форма измерения этих углов).
В противном случае в интеграторах необходимо устанавливать начальные значения углов ψ, θ, γ.
Рис. 3. Окно параметров интегратора
Создадим в NI LabVIEW простую программу (рис. 4), конвертирующую температуру представленную в градусах Цельсия в температуру по Фаренгейту, используя формулу: F=1,8×C+32, где F – температура по Фаренгейту, C – температура в градусах Цельсия.
Рис. 4 Программа, конвертирующая температуру в градусах Цельсия в температуру по Фаренгейту
Выполним следующие действия:
• Создадим новый виртуальный прибор (Blank VI);
• На лицевой панели разместим два индикатора Thermometer (на палитре элементов управления и индикаторов выберем: Modern→ Numeric→ Thermometer);
• Двойным нажатием левой клавиши мышки по меткам индикаторов выделим их и переименуем в “C” и “F”;
• Индикатор с меткой “C” сделаем элементом управления;
• Перейдем на блок-диаграмму.
• Выберем функции Умножение (Multiply) и Сложение (Add) из палитры функций в разделе Арифметические функции (Programming→ Numeric);
• Поместим выбранные функции на блок-диаграмму.
• Создадим числовую константу у соответствующего входа функции умножения. Для этого подведем курсор мышки к этому входу, чтобы появился инструмент Катушка и однократно нажмем правую клавишу мышки. Во всплывающем меню выберем Create→ Constant. После размещения числовой константы на блок-диаграмме поле ввода ее значений подсвечивается и готово для редактирования. Присвоим ей значение 1,8.
• Точно также создадим вторую константу и присвоим ей значение 32, как показано на рис.
• Запустим программу на исполнение, нажав клавишу Run Continuously.
А теперь рассмотрим более сложный случай. Пусть необходимо разработать программу определяющую динамичность нервной системы (НС) оператора ЛА, то есть по скорости и характеру работы и моторике, выделяющую лабильность и инертность НС. Динамичность НС как ее самостоятельное свойство обнаружена в исследованиях В.Д.Небылицына. Алгоритм работы теста представлен на (рис. 5).
Рисунок 5. Алгоритм тестирования динамичности нервной системы оператора ЛА
Описание блоков алгоритма системы диагностики:
1. Начало работы в системе диагностики.
2. Осуществляется запуск программы теста на динамичность НС.
3. Выдается случайная комбинация лампочек красного и зеленого цвета.
4. Комбинация дублируется на выключателях.
5. Получаем результаты тестирования.
6. Выявляем тип НС обучаемого (смотри табл. 2).
7. Конец работы системы диагностики.
Таблица 2. Определение типа нервной системы
Тип нервной системы
Время
выполнения задания t, с.
сильный, лабильный
3-4
слабый, лабильный
5-7
сильный, инертный
8-10
слабый, инертный
11…
Интерфейс теста представлен на (рис. 6)
Рисунок 6. Графический интерфейс программы (блок диаграмм и блок программ)
На основании рисунка 6, очевидно, что в блоке Array 4 вводится переменная для вывода на экран случайной комбинации выключателей красного и зеленого цвета, в блоке Array 2 вводится переменная для вывода на экран случайной комбинации лампочек красного и зеленого цвета, в блоке Array 3 сверяются значения Array 2 и Array 4. Блок Meter осуществляет индикацию времени работы программы
Классификация ЯП
Исходя из вышесказанного, ЯП можно классифицировать по следующим признакам.
1. По степени ориентации на специфические возможности ЭВМ ЯП делятся на:
1.1. машинно-зависимые К машинно-зависимым ЯП относятся машинные языки, ассемблеры и автокоды, которые используются в системном программировании. Программа на машинно-зависимом ЯП может выполняться только на ЭВМ данного типа.;
1.2. машинно-независимые. Программа на машинно-независимом ЯП после трансляции на машинный язык становится машинно-зависимой. Этот признак ЯП определяет мобильность получаемых программ (возможность переноса на ЭВМ другого типа).
2. По степени детализации алгоритма получения результата ЯП делятся на:
2.1. языки низкого уровня (ЯНУ);
2.2. языки высокого уровня (ЯВУ);
2.3. языки сверхвысокого уровня (ЯСУ).
3. По степени ориентации на решение определенного класса задач:
3.1. проблемно-ориентированные;
3.2. универсальные.
4. По возможности дополнения новыми типами данных и операциями:
4.1. расширяемые;
4.2. нерасширяемые.
5. По возможности управления реальными объектами и процессами:
5.1. языки систем реального времени;
5.2. языки систем условного времени.
6. По способу получения результата:
6.1. процедурные;
6.2. непроцедурные.
7. По типу решаемых задач:
7.1. языки системного программирования;
7.2. языки прикладного программирования.
8. Непроцедурные языки по типу встроенной процедуры поиска решений делятся на:
8.1. реляционные;
8.2. функциональные;
8.3 логические.
9. В зависимости от стиля используемого при программировании
9.1. процедурные;
9.2. функциональные;
9.3. логические;
9.4. объектно-ориентированные;
9.5. графические.
Рассмотренная схема классификации является авторской и достаточно условной, но тем не менее позволяет каждому ЯП присвоить один из признаков каждого класса и при необходимости обосновать целесообразность использования того или иного ЯП. Рассмотренная схема классификации ЯП позволяет сделать вывод о том, что ЯП обладают определенной специализацией. Поэтому рассмотрим тенденции развития отдельных классов ЯП и семейств ЯП внутри тех или иных классов.
Компиляция и интерпретация программ
ЭВМ непосредственно выполняет программы на машинном языке программирования данной ЭВМ. При этом программа представляет собой набор отдельных команд компьютера. Эти команды являются достаточно «простыми», например, сложение, умножение, сравнение или пересылка отдельных данных. Каждая команда содержит в себе сведения о том, какая операция должна быть выполнена (код операции), с какими операндами (адреса данных или непосредственно сами данные) выполняются вычисления и куда (адрес) должен быть помещен результат.
Машинные языки были первыми языками программирования. Программирование на них затруднительно ввиду того, что, во-первых, эти языки различны для каждого типа ЭВМ, во-вторых, являются трудоемкими для большинства пользователей по причине необходимости знания особенностей конкретной ЭВМ и большого количества реализуемых ею операций (команд). Данные языки обычно используются для разработки системных программ, при этом чаще всего применяются специальные символические языки – Ассемблеры, близкие к соответствующим машинным языкам. Человеку свойственно формулировать и решать задачи в выражениях более общего характера, чем команды ЭВМ. Поэтому с развитием программирования появились языки, ориентированные па более высокий уровень абстракции при описании решаемой на ЭВМ задачи. Эти языки получили название языков высокого уровня. Их теоретическую основу составляют алгоритмические языки, например, Паскаль, Си, Бейсик, Фортран. Для перевода программы, написанной на языке высокого уровня, в соответствующую машинную программу используются языковые процессоры. Различают два вида языковых процессоров: интерпретаторы и трансляторы. Интерпретатор – это программа, которая получает исходную программу и по мере распознавания конструкций входного языка реализует действия, описываемые этими конструкциями. Транслятор – это программа, которая принимает исходную программу и порождает на своем выходе программу, записываемую на объектном языке программирования (объектную программу). В частном случае объектным может служит машинный язык, и в этом случае полученную на выходе транслятора программу можно сразу же выполнить на ЭВМ. В общем случае объектный язык необязательно должен быть машинным или близким к нему (автокодом). В качестве объектного языка может служить и некоторый промежуточный язык. Для промежуточного языка может быть использован другой транслятор или интерпретатор – с промежуточного языка на машинный. Транслятор, использующий в качестве входного язык, близкий к машинному (автокод или язык Ассемблера) традиционно называют Ассемблером. Транслятор с языка высокого уровня называют компилятором.
Заключение
Языки программирования развиваются в сторону все большей и большей абстракции. И это сопровождается падением эффективности. Вопрос: а стоит ли этого абстракция? Стоит, так как повышение уровня абстракции влечет за собой повышение уровня надежности программирования. С низкой эффективностью можно бороться путем создания более быстрых компьютеров. Если требования к памяти слишком высоки, можно увеличить ее объем. Это, конечно, требует времени и средств, но это решаемо. А вот с ошибками в программах можно бороться только одним способом: их надо исправлять. А еще лучше – не совершать. А еще лучше максимально затруднить их совершение.
И именно на это направлены все исследования в области языков программирования.
Литература
1. Герберт Шилдт. C# 4.0. Полное руководство – 2011г. –1044 c.
2. Дунаев В. Самоучитель JavaScript, 2-е изд. – СПб.: Питер, 2005. – 395 с.
3. Крёнке Д. Теория и практика построения баз данных. – 8-еизд. – СПб.: Питер. 2003. – 800 с.
4. Мироновский Л.А., Петрова К.Ю. Введение в MATLAB. Учебное пособие. ГУАП, СПб, 2006.
5. Matlab: официальный учебный курс Кембриджского университета/ Hunt, Brian R. и др./ – М.: Триумф, 2008.
6. Страуструп Б. Язык программирования C++. Специальное издание. – М.: Бином, 2005. – 1104 с.
7. Суранов А. Я. LabVIEW 8.6: Справочник по функциям. – М.: ДМК Пресс, 2007. – 536 с.
8. Суэринг С., Конверс Т., Парк Дж. PHP и MySQL. Библия программиста: Диалектика – 2010. 912 с.: ил.