Обзорная лекция № 30 для студентов специальности «Прикладная математика»

advertisement
Обзорная лекция № 30
для студентов специальности «Прикладная математика»
доцента кафедры ИВТ, к.т.н. Ливак Е.Н.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ЭВМ.
ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Основные понятия, факты
Программное обеспечение ЭВМ: классификация, назначение. Формальное
описание языка программирования (синтаксические диаграммы, нормальная
форма Бэкуса). Назначение и сравнительный анализ языков высокого уровня и
машинно-ориентированных языков.
Навыки и умения
Разработка программ на языке высокого уровня. Разработка программ на
машинно-ориентированном языке.
Классификация программного обеспечения
Традиционно программное обеспечение подразделяют на два класса:
1) системное программное обеспечение (СПО) и
2) прикладное (пользовательское) программное обеспечение (ППО)
Выделим еще один класс (скорее группу) программ – (3) специальное
программное обеспечение информационных и управляющих систем.
Прикладные программы предназначены для решения функциональных задач,
они выполняют обработку информации различных предметных областей.
Это самый многочисленный класс программных продуктов.
В свою очередь он условно подразделяется на две группы.
1 группа – программы для решения отдельных, самостоятельных задач. Эти
программы выполняются независимо друг от друга и представляют собой набор
разрозненных, не связанных между собой знаний. Конечно, и они могут быть
весьма сложными и очень необходимыми задачами.
2 группа - системы программ для решения классов задач из различных
специализированных областей науки техники и промышленности. Часто такие
системы называют пакетами прикладных программ. Программы, входящие в
пакет, выполняются не отдельно друг от друга, а совместно, в различных
комбинациях, в зависимости от конкретной решаемой задачи.
К специальному программному обеспечению информационных и
управляющих систем относятся
 программы (системы) управления базами данных;
 программы управления языком интерфейса информационных систем;
 программы сбора и предварительной обработки информации (в
информационно-измерительных системах, например, бортовые системы).
ПО этого класса часто оказывается скрытым в составе драйверов оборудования
или поставляется в виде библиотек функционального расширения языков
программирования.
Поэтому часто такое ПО относят к системному программному обеспечению.
Система управления базами данных (СУБД) - это сложная программная
система накопления и последующего манипулирования данными. Каждая СУБД
предоставляет интерфейс с базой данных и может располагать средствами
непосредственного доступа к последней ее пользователей.
С помощью языка описания данных создаются описания элементов и записей
данных, а также взаимосвязей между ними. Для выполнения операция с базой
данных (например, выборка или обновление) в прикладных программах
используется язык манипулирования данными. Фактическая структура
физического хранения данных известна только СУБД.
Системное программное обеспечение (System Software) - совокупность
программ и программных комплексов для обеспечения работы компьютера и
сетей ЭВМ.
СПО управляет ресурсами компьютерной системы и позволяет пользователям
программировать в более выразительных языках, чем машинный язык
компьютера. Состав СПО мало зависит от характера решаемых задач
пользователя.
Системное программное обеспечение предназначено для:
 создания операционной среды функционирования других программ
(другими словами, для организации выполнения программ);
 автоматизации разработки (создания) новых программ;
 обеспечения надежной и эффективной работы самого компьютера и
вычислительной сети;
 проведения диагностики и профилактики аппаратуры компьютера и
вычислительных сетей;
 выполнения вспомогательных технологических процессов (копирование,
архивирование, восстановление файлов программ и баз данных и т.д.).
Данный класс программных продуктов тесно связан с типом компьютера и
является его неотъемлемой частью.
Программные продукты данного класса в основном ориентированы на
квалифицированных пользователей - профессионалов в компьютерной области:
системного программиста, администратора сети, прикладного программиста,
оператора.
Часто системное ПО компьютера подразделяют на БАЗОВОЕ и СЕРВИСНОЕ
программное обеспечение.
БАЗОВОЕ программное обеспечение (base software) - минимальный набор
программных средств, обеспечивающих работу компьютера.
К базовому программному обеспечению компьютера относятся
 операционные системы и драйверы в составе ОС;
 интерфейсные оболочки для взаимодействия пользователя с ОС
(операционные оболочки) и программные среды;
 системы управления файлами.
Операционная система - совокупность программных средств, обеспечивающая
управление аппаратной частью компьютера и прикладными программами, а
также их взаимодействием между собой и пользователем.
Операционная система предназначена для управления выполнением
пользовательских программ, планирования и управления вычислительными
ресурсами ЭВМ.
Операционная система, с одной стороны, выступает как интерфейс между
аппаратурой компьютера и пользователем с его задачами, с другой стороны,
предназначена для эффективного использования ресурсов вычислительной
системы и организации надежных вычислений.
Системы управления файлами предназначены для организации более
удобного доступа к данным, организованным как файлы.
Вместо низкоуровневого доступа к данным с указанием конкретных физических
адресов система управления файлами позволяет использовать логический
доступ с указанием имени файла.
Любая система управления файлами не существует сама по себе - она
разработана для работы в конкретной ОС и с конкретной файловой системой. То
есть можно было бы систему управления файлами отнести к ОС.
Но в связи с тем, что
1) ряд ОС позволяет работать с несколькими файловыми системами (либо с
одной из нескольких, либо сразу с несколькими одновременно); а
дополнительную файловую систему можно установить (т.е. они
самостоятельны)
2) простейшие ОС могут работать и без файловых систем;
системы управления файлами выделяются в отдельную группу системных
программ.
Заметим, что часто в специальной литературе системы управления файлами
относят все-таки к операционным системам.
СЕРВИСНОЕ программное обеспечение - программы и программные
комплексы, которые расширяют возможности базового программного
обеспечения и организуют более удобную среду работы пользователя.
Это набор сервисных, дополнительно устанавливаемых программ, которые
можно классифицировать по функциональному признаку следующим образом:
 драйверы специфических и специальных устройств (те, которые не
поставляются в составе ОС).
 программы диагностики работоспособности компьютера;
 антивирусные программы, обеспечивающие защиту компьютера,
обнаружение и восстановление зараженных файлов;
 программы обслуживания дисков, обеспечивающие проверку качества
поверхности магнитного диска, контроль сохранности файловой системы на
логическом и физической уровнях, сжатие дисков, создание страховых копий
дисков, резервирование данных на внешних носителях и др.;
 программы архивирования данных, которые обеспечивают процесс сжатия
информации в файлах с целью уменьшения объема памяти для ее хранения;
 программы обслуживания сети.
Эти программы часто называются утилитами. (Заметим, что к антивирусным
средствам этот термин обычно не применяется)
Утилиты - программы, служащие для выполнения вспомогательных операций
обработки данных или обслуживания компьютеров (диагностики, тестирования
аппаратных и программных средств, оптимизации использования дискового
пространства, восстановления разрушенной на магнитном диске информации и
т.п.).
Наибольшее распространение сегодня имеют комплекты утилит: Norton
Utilities - фирма Symantec; Checkit PRO Deliuxe 2.0 - фирма Touch Stone;
программа резервного копирования HP Colorado Backup for Windows 95.
Отдельно вспомним о такой группе системного ПО как системы
программирования.
Это набор специализированных программных продуктов, которые являются
инструментальны средствами разработчика. Программные продукты данного
класса поддерживают все этапы процесса программирования, отладки и
тестирования создаваемых программ.
Система программирования включает следующие программные компоненты:
 редактор текста;
 транслятор с соответствующего языка;
 компоновщик (редактор связей);
 отладчик;
 библиотеки подпрограмм.
Заметим, что любая система программирования может работать только в
соответствующей ОС, под которую она и создана, однако при этом она может
позволять разрабатывать программное обеспечение и под другие ОС.
Например, одна из популярных систем программирования на языке С/С++
от фирмы Watcom для OS/2 позволяет получать программы и для самой
OS/2, и для DOS, и для Windows.
Редактор текста - это программа для ввода и модификации текста.
Трансляторы предназначены для преобразования программ, написанных на
языках программирования, в программы на машинном языке. Программа,
подготовленная на каком-либо языке программирования, называется исходным
модулем. В качестве входной информации трансляторы применяют исходные
модули и формируют в результате своей работы объектные модули,
являющиеся входной информацией для редактора связей. Объектный модуль
содержит текст программы на машинном языке и дополнительную
информацию, обеспечивающую настройку модуля по месту его загрузки и
объединение этого модуля с другими независимо оттранслированными
модулями в единую программу.
Трансляторы делятся на два класса: компиляторы и интерпретаторы.
Компиляторы переводят весь исходный модуль на машинный язык.
Интерпретатор последовательно переводит на машинный язык и выполнят
операторы исходного модуля
(У интерпретаторов два основных недостатка. Первый - низкая скорость
работы интерпретируемых программ.)
Преимущество интерпретатора перед компилятором состоит в том, что
программа пользователя имеет одно представление - в виде текста. При
компиляции одна и та же программа имеет несколько представлений - в
виде текста и в виде выполняемого файла.
Компоновщик, или редактор связей - системная обрабатывающая программа,
редактирующая и объединяющая объектные (ранее оттраслированные) модули в
единые загрузочные, готовые к выполнению программные модули. Загрузочный
модуль может быть помещен ОС в основную память и выполнен.
Отладчик позволяет управлять процессом исполнения программы, является
инструментом для поиска и исправления ошибок в программе. Базовый набор
функций отладчика включает:
 пошаговое выполнение программы (режим трассировки) с отображением
результатов,
 остановка в заранее определенных точках,
 возможность остановки в некотором месте программы при выполнении
некоторого условия;
 изображение и изменение значений переменных.
Загрузчик - системная обрабатывающая программа, объединяющая
основные функции редактора связей и программы выборки в одном
пункте задания. Загрузчик помещает находящиеся в его входном наборе
данных объектные и загрузочные модули в оперативную память,
объединяет их в единую программу, корректирует перемещаемые
адресные константы с учетом фактического адреса загрузки и передает
управление в точку входа созданной программы.
Средства сетевого доступа обеспечивают обработку, передачу и хранение
данных в сети.
Заметим, что чаще говорят о сетевых операционных системах, которые
предоставляют пользователям различные виды сетевых служб (управление
файлами, электронная почта, процессы управления сетью и др.)
Ключом к использованию этих ресурсов является сервер - специальная
программа на компьютере, подключенному к сети, которая принимает запросы
(или команды) и посылает ответы автоматически.
Программы, предназначенные для подачи запросов серверу, называются
программами-клиентами. Сервер предназначен для их обслуживания. Клиент
посылает запросы пользователя на сервер, используя стандартизированный
формат, называемый протоколом. Ответ сервера содержит информацию,
представленную в виде файла, содержащего данные того или иного формата.
Постоянно ведется разработка все новых программ-клиентов, предлагающих
более удобные способы взаимодействия с сервером.
Пример. Приложения Netscape Navigator , Internet Explorer - программыклиенты.
Таким образом, в системном ПО мы выделили пять групп системных
программ:






операционные системы;
интерфейсные оболочки для взаимодействия пользователя с ОС
(операционная оболочка) и программные среды;
системы управления файлами;
системы программирования;
утилиты;
средства сетевого доступа.
Формальное описание языка программирования
Существует несколько способов описания синтаксиса языка программирования.
Наиболее известны синтаксические диаграммы и нормальная форма Бэкуса
(форма Бэкуса-Наура).
1. Формы Бэкуса-Наура (БНФ)
Пример описания определения «множитель»
<множитель>::=<беззнаковая постоянная> | <переменная> | <идентификатор
функции> |
<идентификатор функции > (<список выражений>) |
(<выражение>) |
<множитель> | [<список пар выражений>]
Здесь
В скобки < > заключены нетерминальные символы языка (т.е. те, которые
будут определены).
Символ ::= читается «определяется как »
| - черта означает «или»
Заметим, что любая синтаксически правильная программа, написанная на
некотором языке программирования, может быть определена как
нетерминальный символ некоторого языка.
2.
Синтаксические диаграммы – это один из простых и эффективных
способов описания синтаксиса определений.
Пример синтаксической диаграммы для понятия «множитель»
Число путей диаграммы – бесконечно.
Каждый путь соответствует одному из возможных определений описываемого
понятия.
Каждому нетерминальному узлу (обозначается прямоугольником) соответствует
в свою очередь синтаксическая диаграмма, определяющая понятие внутри.
Кружком обозначается терминальный узел.
Математическая система, определяющая язык, – это грамматика.
Формальное определение грамматики.
Грамматикой называется четверка G= (N, T, P, S), где
N – конечное множество нетерминальных символов, или нетерминалов
(иногда их называют вспомогательными символами, синтаксическими
переменными или понятиями),
T – не пересекающееся с N конечное множество терминальных символов,
или терминалов,
P – конечное множество правил вида   ,
где  - строка в левой части правила:   (N  T)+, (так
обозначается совокупность строк, имеющих длину >=1),
 - строка в правой части правила:   (N  T),
S – начальный символ грамматики.
Терминальная цепочка, порождаемая грамматикой G – это выводимая цепочка
грамматики G, не содержащая нетерминальных символов.
Язык, порождаемый грамматикой G (обозначается L(G)), - это множество
терминальных цепочек, порождаемых грамматикой.
Таким образом, язык, определяемый грамматикой, - это множество цепочек,
которые состоят только из терминалов и выводятся, начиная с одной особой
цепочки, состоящей из одного выделенного символа.
Пример грамматики.
G = ({E, T, F}, {a, +, *, (, ) }, P, E), где Р состоит из правил
EE+T|T
TT*F|F
F  (E) | a
Язык L(G) представляет собой множество арифметических выражений,
построенных из символов a, +, *, (, ).
Назначение и сравнительный анализ языков высокого уровня
и машинно-ориентированных языков
Язык ассемблера — это символическое представление машинного языка.
«Все процессы в машине на самом низком, аппаратном уровне приводятся в
действие только командами (инструкциями) машинного языка. Отсюда понятно,
что, несмотря на общее название, язык ассемблера для каждого типа
компьютера свой. Это касается и внешнего вида программ, написанных на
ассемблере, и идей, отражением которых этот язык является.
По-настоящему решить проблемы, связанные с аппаратурой (или даже, более
того, зависящие от аппаратуры как, к примеру, повышение быстродействия
программы), невозможно без знания ассемблера.
Программист или любой другой пользователь может использовать любые
высокоуровневые средства, вплоть до программ построения виртуальных миров
и, возможно, даже не подозревать, что на самом деле компьютер выполняет не
команды языка, на котором написана его программа, а их трансформированное
представление в форме скучной и унылой последовательности команд совсем
другого языка — машинного. А теперь представим, что у такого пользователя
возникла нестандартная проблема или просто что-то не заладилось. К примеру,
его программа должна работать с некоторым необычным устройством или
выполнять другие действия, требующие знания принципов работы аппаратуры
компьютера. И вот здесь-то и начинается совсем другая история.... Каким бы
умным ни был программист, каким бы хорошим ни был язык, на котором он
написал свою чудную программу, без знания ассемблера ему не обойтись.
И не случайно практически все компиляторы языков высокого уровня содержат
средства связи своих модулей с модулями на ассемблере либо поддерживают
выход на ассемблерный уровень программирования.
Фундамент, на котором строится любое серьезное компьютерное образование это знания о принципах работы компьютера, его архитектуре и языке
ассемблера как отражении и воплощении этих знаний.
Таким образом, внешне являясь полиглотом, компьютер понимает только
один язык — язык машинных команд. Конечно, для общения и работы с
компьютером, необязательно знать этот язык, но практически любой
профессиональный программист рано или поздно сталкивается с
необходимостью его изучения. К счастью, программисту не нужно пытаться
постичь значение различных комбинаций двоичных чисел, так как еще в 50-е
годы программисты стали использовать для программирования символический
аналог машинного языка, который назвали языком ассемблера. Этот язык точно
отражает все особенности машинного языка. Именно поэтому, в отличие от
языков высокого уровня, язык ассемблера для каждого типа компьютера свой.
Из всего вышесказанного можно сделать вывод, что, так как язык ассемблера
для компьютера “родной”, то и самая эффективная программа может быть
написана только на нем (при условии, что ее пишет квалифицированный
программист). Здесь есть одно маленькое “но”: это очень трудоемкий,
требующий большого внимания и практического опыта процесс.
Поэтому реально на ассемблере пишут в основном программы, которые
должны обеспечить эффективную работу с аппаратной частью. Иногда на
ассемблере пишутся критичные по времени выполнения или расходованию
памяти участки программы. Впоследствии они оформляются в виде
подпрограмм и совмещаются с кодом на языке высокого уровня.» [1]
В языках высокого уровня по сравнению с языками машинноориентированными укрупняются допустимые операторы; усложняются
допустимые операции. Языки высокого уровня позволяют оперировать более
сложными структурами данных.
Языки высокого уровня более удобны для использования.
Download