Отнести конкретную программу к системному или прикладному обеспечению нам помогут два следующих критерия:
1. Откуда возникла данная программа? Была ли она разработана прикладным программистом или отдельной группой, созданной для сопровождения программ, а может быть, ее разработали те же, кто создал и аппаратуру? Кто сопровождает эту программу?
2. Насколько универсальна данная программа, могут ли ее использовать какие-либо другие прикладные программисты?
В фазе использования программы, написанные прикладными программистами совместно с группой системных программистов, для стороннего наблюдателя ничем не отличаются от программ, целиком созданных одними прикладными программистами. Однако в фазах разработки и сопровождения различия становятся очень и очень заметными.
Разнообразие операционных систем. Некоторую путаницу в вопросы, связанные с операционными системами, вносит и тот факт, что их развитие привело в настоящий момент к появлению специализированных систем.
Для одной и той же аппаратуры создаются операционные системы, которые рекомендуется применять в фазе использования, и системы, которые следует применять в фазе разработки. Имеются пакетные операционные системы, системы управления сетями, системы реального времени и операционные системы, ориентированные на пользователя. На некоторых машинах реализованы своеобразные смеси всех этих операционных систем.
Стоимость операционной системы. Создание и сопровождение операционных систем обходится фирмам-изготовителям в миллионы долларов, а иногда счет доходит до миллиардов. Зачастую, однако, эти расходы не выделяют из стоимости аппаратуры.
А ведь в фазе использования операционные системы тоже кое-что «стоят»: они «едят» и машинное время, и память. Тысячи людей пользуются операционными системами, это заставляет предусматривать в них широчайшее многообразие функций. Если мне какие-либо функции не нужны, я могу попробовать исключить некоторые из них из своей системы, но все исключить невозможно. Отсюда следует, что вычислительная машина делает совсем ненужные мне вещи. С этим приходится мириться, поскольку это обходится все же дешевле, чем создание собственной операционной системы или передача ее функций прикладным программам.
Источник системного программного обеспечения. В настоящее время все возрастающую долю системных программ пишут компании по производству программного обеспечения или пользователи, однако до сих пор большую их часть создают изготовители аппаратуры. Почти все системы управления базами данных отделены от операционных систем. Хотя эти системы используются совместно, но разработка их ведется по отдельности, и продают их чаще всего отдельно друг от друга.
Системные и прикладные программы в фазе использования. Итак, прикладными считаются программы, которые печатают платежные ведомости, управляют полетом ракеты, ведут самолет на посадку или выписывают чеки.
Большинство прикладных программ пишется таким образом, чтобы пользоваться ими можно было только совместно с системными программами, которые управляют работой машины и ее окружением в фазе использования, а также выполняют наиболее общие функции, в частности печать. Взгляните на схему распределения памяти, изображенную на рис. 4.16. На схеме приведены те программы, которые размещаются в памяти вычислительной машины при выполнении производственного задания, ради которого эту машину и приобретали.
Из рис. 4.16 очень хорошо видно, что основную часть памяти машины занимают системные программы, управляющие работой этой машины и ее внешним окружением.
На большинстве машин программы пишутся таким образом, чтобы они соответствовали действующей операционной системе, работали именно в ней, выполнялись совместно с ней. Программисты, работающие в какой-то фирме, разрабатывают и пишут программы выдачи платежных ведомостей фирмы. Когда работает программа составления платежной ведомости, одновременно с ней работает операционное и другое системное программное обеспечение.
В самом начале процесса выполняется операционная система, которая определяет вид работы, сообщает операторам, какие ленты и куда надо поставить и т. д. В дальнейшем начинает выполняться собственно программа печати ведомости. Если возникает прерывание (например, встречается ошибка), управление опять передается операционной системе, которая обрабатывает ошибку, а затем возвращает управление программе печати.
Но этот пример слишком прост. Очень часто бывает так, что в одно и то же время в памяти машины размещается несколько, а то и несколько десятков различных прикладных заданий.
В случае мультипрограммирования операционная система управляет одновременно работой дюжины прикладных программ, распределяет между ними все ресурсы машины, доводя до максимума просто «работу» — работу, выполняемую за определенное время. Подробнее этот вопрос будет изучаться в гл.7.
Плохая операционная система может обесценить сколь угодно хорошую аппаратуру, в то время как хорошая система может спасти и плохую. Часто системные программы оказываются медленными просто из-за того, что им приходится разбираться с огромным количеством возможных пользователей, данных и т. д., а для этого нужны тысячи и даже миллионы команд. Иногда они бывают медленными, потому что плохо разработаны или плохо скомпонованы.
Стандартное и нестандартное системное обеспечение.
В то же время существует часть пользователей вычислительных машин, которые обязаны создавать свои собственные системные программы, — это пользователи систем реального времени типа V. Необходимость выполнить цикл вычислений за определенное время — миллисекунды в оборонных системах, системах гражданской авиации и NASA или секунды в системах резервирования, — а также необходимость высокой надежности делают невозможным использование стандартного программного обеспечения. Поэтому многие пользователи систем реального времени должны создавать обеспечение сами.
Системные программы индивидуального пользования пишутся довольно часто. Иногда такие системные программы могут применяться более чем одним пользователем. Разработанная фирмой IBM для резервирования авиационных билетов операционная система PARS (или АСР) используется более чем двумя десятками авиакомпаний и несколькими банками. Создание системы PARS было обусловлено тем фактом, что система ОС/360 оказалась слишком большой и медленной.
Система диспетчеризации воздушного транспорта, управляющая рейсовым авиационным транспортом, была написана один раз, а используется в 20 авиапортах Соединенных Штатов и в одном из авиапортов Великобритании. ОС/360 не смогла обеспечить необходимую надежность и подходящую схему распределения ресурсов; пришлось FAA (Federal Aviation Agency) (с помощью отделения федеральных систем IBM) писать собственные системные программы.
Такая необходимость писать специализированное системное обеспечение является одной из причин высокой стоимости и трудоемкости больших программных систем типа V.
Не так давно сразу в двух разных книгах я встретил утверждение о том, что вычислительные машины не сбиваются при работе. Это явно абсурдное утверждение; конечно же, у них бывают сбои. Все электронные устройства подвержены сбоям.
Один из авторов пытался утверждать, что оправдание типа «произошел сбой вычислительной машины» представляет собой не более чем мошенничество; ошибка обычно заключена в процедурах или командах программ.
Хотя я согласен, что фраза «виновата машина» просто отговорка, но все же утверждение, что у машин не бывает сбоев, представляется слишком вредным, особенно в книге вводного характера.
Поскольку руководство знает, что вычислительные машины все же выходят из строя, оно должно позаботиться о том, чтобы включать процедуры проверки функционирования. Любой «сбой машины» означает недостаточно квалифицированное руководство, поскольку оно не обеспечило достаточно надежную защиту системы с помощью как программного, так и аппаратного контроля.
Для обеспечения правильного, своевременного и бесперебойного выполнения задачи руководство вольно выбирать либо стандартное, либо изготовленное специально программное обеспечение. Сегодня такой выбор вполне возможен.
От пакетного режима к режиму реального времени. Переход от пакетной обработки к работе в режиме реального времени не требует слишком больших переделок прикладных программ и их логики. Баллистические траектории остаются баллистическими траекториями. А вот реорганизация системных программ действительно необходима.
Очень часто эта капитальная реорганизация не предусматривается заранее, что приводит к ужасным последствиям. Люди думают, что если они отладили свои программы в пакетном режиме, то сам переход к режиму реального времени не составит для них затруднения. Графики перехода не разрабатываются, сметы с затратами не составляются.
В системах реального времени основным фактором является само время. В пакетных системах данные, например данные от радиолокационных станций, собранные на магнитной ленте, сначала вводятся в машину, а затем обрабатываются в ней. Как только будут обработаны все данные, случись это через 24 ч. или даже через неделю, машина закончит свою работу. Время при этом не принимается во внимание.
В системах же реального времени данные радиолокаторов
Переход от хорошей пакетной системы к системе реального времени — это переход к новым концепциям.
Преимущества системного программного обеспечения
1. Системное программное обеспечение увеличивает модульность и улучшает защиту информации, значительно упрощая процесс внесения изменений в программы.
2. Системное программное обеспечение избавляет прикладных программистов от необходимости затрачивать большие усилия на сопровождение стандартных программ.
3. Уменьшая простои, системное обеспечение доводит до максимума использование аппаратуры.
4. Исключая дублирование информации во внешних файлах, системное программное обеспечение лучше использует память.
Недостатки системного программного обеспечения
1. В силу универсальности системных программ снижается скорость их выполнения по сравнению со специализированными системами.
2. Системные программы велики, сложны, их часто трудно использовать надлежащим образом.
3. Системное программное обеспечение не всегда обладает гибкостью, достаточной, чтобы удовлетворять всем индивидуальным требованиям.
Таблица 4.5. Эволюция системного программного обеспечения
| Проблема | Ее решение |
|---|---|
| Машина простаивала, в то время как оператор в спешке ставил магнитные ленты и т. п. | Была написана программа, которая отслеживала список поставленных лент, переключая ленты не физически, а логически. Это привело к сильному увеличению числа магнитофонов. В одно и то же время на машине стало возможно выполнять несколько программ |
| Начальник вычислительного центра не успевал принимать решения по поводу того, какую задачу запускать на машине. Сколько для этой задачи потребуется памяти? Лент? И т. д. | Была написана программа, которая отслеживала списки свободных машинных ресурсов и стоящих в очереди программ. После этого машина стала сама распределять работы и устройства вычислительного комплекса |
| Программисты вставляли в прикладные программы детали физического расположения данных и дисков. Новые диски, более дешевые и быстрые, нельзя было внедрять до того, как будут переписаны старые прикладные программы. Это было очень трудно, поскольку программисты могли быть заняты чем-нибудь другим или вообще уволиться | Были написаны программы управления данными, которые выполняли чтение и запись данных на диске. Программисты стали теперь писать команды для программы управления данными, которая взяла на себя все заботы. Имена, использовавшиеся для идентификации этих стандартных системных программ, скорее вводили в заблуждение, чем вносили ясность. Одним из имен было «Методы доступа». Конечно же все думали о методах и расположении данных, забывая о программах, реализующих эти методы |
| Разным программистам часто были нужны одни и те же данные, но в разной последовательности или в различном порядке. Поэтому им приходилось создавать свои собственные файлы из главного файла и в дальнейшем пользоваться уже своими файлами. Это было чревато двумя опасностями во-первых, память для файлов становилась все больше заполненной, но, что еще хуже, данные в одном файле не согласовывались с данными в другом файле | Были написаны программы управления базами данных, которые обеспечили сложный логический поиск файлов в тех случаях, когда файлы записывались не с теми ключами, которые использовались программистом для их поиска. Эти системы получили название систем управления базами данных (СУБД); они сняли с программистов обязанности по разработке и проведению логического проектирования методов поиска и хранения данных; все работы отныне выполнялись с помощью СУБД |
Выводы о системном программном обеспечении. Мы теряем в скорости выполнения, памяти и гибкости, чтобы достичь порядка при работе, избежать создания дополнительных программ и снизить тем самым вероятность внесения ошибок в программную систему, а также чтобы облегчить процесс исправления программ. Системное программное обеспечение явилось огромным благом для пользователей, значительно увеличив коэффициент полезного действия вычислительных машин (см. табл. 4.5).
Для многих систем можно четко определить место их разработки, место работы и место сопровождения. Некоторые называют все обеспечение, посылаемое к месту работы, «операционным». Это может вносить только путаницу, поскольку термин «операционное программное обеспечение» является синонимом термина «обеспечение времени использования». Например, корабль, находящийся в море, является местом выполнения, но многие программы, посылаемые туда, не работают в фазе использования. На корабль посылаются диагностические программы, помогающие инженерам-ремонтникам налаживать работу машин, но эти программы работают автономно, а не совместно с системой при ее использовании.
Таблица 4.6. Когда используется программное обеспечение разных типов
| Тип программного обеспечения | Выполняются во время разработки | Выполняются во время использования | Выполняются во время сопровождения |
|---|---|---|---|
| Инструментальное | Трансляторы | Нет | Трансляторы |
| Программа-библиотекарь | Программы-библиотекари | ||
| Отладочные программы | Отладочные программы | ||
| Системное | Операционные системы | Диалоговый режим | Операционные системы |
| Системы управления базами данных | Операционные системы СУБД Диагностика в диалоговом режиме Вычисления в диалоговом режиме | СУБД | |
| Прикладное | Нет | Ведомости (периодически) Управление или контроль (постоянно) Отслеживание даты (раз в сутки) | Нет |
Они представляют собой набор инструментальных программ, и называть их «операционными» только за то, что они находятся в одном месте со всей системой, ошибочно. В табл. 4.6 перечислено по крайней мере некоторое программное обеспечение, работающее в разных фазах независимо от места работы, а в табл. 4.7 показано, какие программы могут работать автономно в различных местах.
Таблица 4.7. Какое программное обеспечение может самостоятельно работать в различных местах
| Выполняются самостоятельно по месту разработки | Выполняются самостоятельно по месту использования | Выполняются самостоятельно по месту сопровождения | |
|---|---|---|---|
| Инструментальные | Диагностические программы | Диагностические программы Элементы калькуляции | Диагностические программы |
| Системные | ОС | Операционные системы | ОС |
| Прикладные | В целях тестирования программы калькуляции | Нет | В целях тестирования программы калькуляции |
Инструментальное программное обеспечение — это третий раздел большой области всех программ. Применяется инструментальное обеспечение в фазе разработки. Инструментальное программное обеспечение — это совокупность программ, используемых для помощи программистам в их работе, для помощи руководителям разработки программного обеспечения в их стремлении проконтролировать процесс разработки и получаемую продукцию.
Наиболее известными представителями этой части программного обеспечения являются программы трансляторов с языков программирования, которые помогают программистам писать машинные команды. Инструментальными программами являются трансляторы с языков Фортран, Кобол, Джовиал, Бейсик, АПЛ и Паскаль. Они облегчают процесс создания новых рабочих программ.
Однако трансляторы с языков это только наиболее известная часть инструментальных программ; существует же их великое множество. Проще всего можно получить представление о количестве и разнообразии инструментальных программ, изучив список программ, используемых во время разработки большой программной системы. Взгляните на табл. 4.8.
Таблица 4.8. Некоторые инструментальные программы
| Общее назначение | Требования и спецификации |
|---|---|
| Текстовые редакторы | PSL/PSA |
| Форматирование документации | Реляционные СУБД |
| Архивные системы | Проверка непротиворечивости |
| Работа с дисками и лентами | CARA/CLARA |
| Модели | SADT IA |
| Проектирование | Написание |
| Графические пакеты | Транслятор |
| Построители структурных блок-схем | Кросс-транслятор |
| Предтранслятор | |
| Проектный анализатор APLGOL | Программа-библиотекарь |
| Конструирование | Верификация |
| Система планирования и руководства разработками PERT | Статические анализаторы |
| Символическое выполнение | |
| Редактор связей | Интерпретация |
| Библиотекарь | Генератор тестовых последовательностей |
| Библиотекарь | Сбор статистики |
Такое использование вычислительных машин для помощи в создании новых программ далеко не очевидно для людей, не являющихся профессиональными программистами. Часто же бывает так, что профессионалы рассказывают об инструментальном (фаза разработки) и системном (фаза использования) программном обеспечении на едином дыхании, предполагая, что не посвященному в тайны их мастерства известно об этой роли инструментального программного обеспечения. Так же как и в фазе использования (для прикладных программ), системное обеспечение работает и в фазе разработки, но только совместно с инструментальным обеспечением.
Стоимость полного комплекта необходимых для разработки инструментальных средств может легко дойти до многих десятков и даже сотен миллионов долларов. Для выполнения инструментальных программ, кроме всего прочего, нужна также и вычислительная машина. Подробнее о средствах обеспечения разработки мы поговорим в разделе, посвященном
Так же как и все другие программы, инструментальное программное обеспечение может содержать ошибки. Этот не очень очевидный факт вынуждает нас для придания людям уверенности в высоком качестве наших инструментальных средств, для содержания их в рабочем порядке, каталогизации, обеспечения помощи производственным программистам в обучении, для их использования, а также для исправления в случае, если они не дают верных результатов, организовывать специальные группы инструментального сопровождения. Такие группы сопровождения, состоящие из системных программистов, представляют большую ценность. (Кому хочется работать с неисправными инструментами?) Затраты на их создание оправдываются увеличением производительности труда другой части программистов, участвующих в разработке. О необходимости таких групп часто забывают, и статьи в бюджете на них не отводят.
Кроме «обычных» средств разработки мы можем упомянуть некоторые дополнительные вспомогательные области:
Разработка тестового программного обеспечения
имитаторы; моделирующие программы; генераторы.
диагностика; тесты; помощь при техническом обслуживании.
Обучение с помощью программного обеспечения
помощь в изучении; программированные инструкции; программы-тренажеры.
Инструментальное обеспечение может стоить сотни миллионов долларов. Военно-морской флот США принял решение использовать на борту всех кораблей только две различные вычислительные машины, работающие в разных диапазонах производительности. Ремонт и поставка запасных частей в море настолько сильно влияют на систему в целом, что размещение на всех кораблях одинаковых машин значительно облегчает расчеты перевозок и снабжения.
Побочным эффектом этой стандартизации является унификация системы команд, а как следствие огромные запасы инструментальных программ, разработанных за многие годы, могут использоваться при разработке всех без исключения бортовых приложений.
В середине 1979 г. в ВМФ США подсчитали, что на создание инструментального программного обеспечения для этих машин было затрачено около 300 млн. долларов. Такая сумма не является чем-то необычным. Чтобы сопровождение машин происходило хорошо, должно быть создано огромное число различных программных инструментальных средств.
ВМФ США предпринял смелое и успешное начинание, отвергнув создание целой системы нового инструментального обеспечения, когда при заказе новой самолетной бортовой машины потребовал, чтобы ее система команд совпадала с системой команд одной из судовых ЭВМ. Многие считали, что такие действия будут тормозить развитие вычислительной техники, но работы завершились успешно, налогоплательщикам сэкономлены многие миллионы долларов.
Все усилия по разработке программного обеспечения можно характеризовать в зависимости от масштабов и сложности этой работы, а также ясности и понятности полученных программ.
Термин «программное обеспечение» имеет очень широкое значение. Это общее обозначение подобно слову «животное», которое одновременно относится и к вашей любимой кошке, и к огромному трехсоткилограммовому белому медведю. Несмотря на это, люди говорят о программном обеспечении как о некой вещи или как об однородной группе вещей. Все что угодно, только не это.
В полном одиночестве за двадцать минут я могу написать программу из 100 команд, которая будет вычислять мои ежемесячные выплаты процентов по ссуде. Это будет разработка программы. За 20 минут.
Я также могу быть одним из нескольких сотен программистов и руководителей проекта создания программы вычисления траектории и управления полетом космического корабля на Луну. Я буду создавать свою часть большой, более 1 млн. команд, программы, причем это может длиться несколько лет.
В обоих случаях я буду выступать в роли разработчика программ. Но усилия мои будут весьма различными. А быть руководителем группы, ответственным за все эти миллионы команд, это абсолютно другой вид деятельности.
Есть «программирование в малом» и «программирование в большом». 100 команд — это просто программа, миллион команд — это уже программное обеспечение.
Давайте поищем (вокруг себя) аналогии, которые помогут нам понять наши технологические проблемы. Строителем моста может быть человек, который строит полутораметровое сооружение из тонких досок над узким ручейком на заднем дворе, или человек, создающий подвесной мост через реку или залив. Нельзя сравнивать такие мосты, они находятся на разных концах масштабной шкалы. Но и тот и другой — мост!
Попробуем теперь разобраться в том, что такое планирование, организация и контроль работ особенно большого объема. Надо изучить требования к мосту, его несущую способность, его местоположение, подъездные пути и еще множество других совсем не очевидных вещей. Теперь пришло время сделать грубую оценку стоимости сооружения. Затем следует еще один просмотр требований и возможных вариантов моста.
Когда место расположения моста определено и его примерные очертания приняты, начинается подлинное планирование работ по его созданию. Проводятся детальные расчеты моста, его вантов, опор, пилонов, его колебательных характеристик, кабельной системы — и еще множества других технических деталей, которые составляют мост как целое. Для хранения чертежей приходится строить отдельные помещения. Только для отыскания нужных чертежей требуется специальная информационно-поисковая система, позволяющая при необходимости получить любой из них.
Создается «рабочий план». Тщательно детализируются и документируются все сведения о том, что, когда и кем должно выполняться, какая между всем этим есть взаимосвязь. Определяется параллельность работ (какие работы могут выполняться параллельно друг другу).
Все это надо распланировать и понять заранее. Только после этого можно приступать к найму строителей, выписывать ордера на материалы, инструменты и доставлять оборудование.
Для начисления рабочим зарплаты создается бухгалтерия. Одна комната заполняется за другой, поскольку для управления созданием такого огромного сооружения требуется огромное количество документов.
Проходят годы. Мост становится реальностью, чудом, воплощенным в жизнь. Его могут видеть миллионы людей, видеть уже построенным, пользоваться им. Это триумф (см. рис. 4.17).
Но никто не видит долгих лет подготовки, тонны документов, сложную и удивительную работу по планированию. Они невидимы для тех, кто ходит по мосту, но абсолютна необходимы для достижения результата.
Урок, который можно извлечь из табл. 4.9, очевиден — для строительства моста стоимостью в 300 млн. долларов нужен тщательно разработавшей «фундамент». Все это с полной уверенностью можно отнести и к программному обеспечению стоимостью в 100 млн. долларов, состоящему из программ размером от 500 тыс. до 2 млн. строк текста.
Эффект больших масштабов проявляется во всех отраслях. Дональд Дуглас, один из пионеров авиации, говорил, что «когда вес документов достигнет веса самолета, самолет начнет летать» (См. рис. 4.18.)
Джеймс Мартин утверждает, что «документы для „Боинга-747“ весили больше, чем сам самолет». То же самое можно сказать и о большом программном обеспечении. Здесь может возникнуть вопрос, много ли в настоящее время имеется систем из программ в миллион строк, много ли их будет появляться в будущем. Некоторые я перечислил в табл. 4.10, но дело в том, что их с каждым днем становится все больше.
Таблица 4.9. Эффект влияния роста размеров на рост усилий
| Пешеходный мостик в парке | Мост в Веразано | |
|---|---|---|
| Выработка требований | 1 день | 1825 дней |
| Разработка | 1 листок бумаги | Большой склад документов |
| Материальный план | 1 ч. | 1460 дней |
| план осуществления | 1 ч. | 182 дня |
| материалы | ½ дня | 182 дня |
| заготовки | 1/2 дня | 182 дня |
| инвентарные склады | 1 день | 182 дня |
| обеспечение реализации | 1 день | 182 дня |
| использование | 2 дня | 36 500 дней |
| План занятости людей | ||
| число людей | 2 | 5000 |
| занятость строителей | 1 день | 365 дней |
| Общая занятость людей | 3 дня | 3650 дней |
| занятость бухгалтеров | 1 день | 3650 дней |
| калькуляция всего этого | 1 день | 3650 дней |
| Строительство | 3 дня | 1825 дней |
| Документирование | 1 день | 555 дней |
| число листов бумаги | 5 листов | 500 000 листов |
| Полная стоимость | 1000 долларов | 300 000 000 долларов |
Таблица 4.10. Большие программные проекты
| Сумма контракта на все время использования (млн. долл.) | Число команд (млн.) | Затраты (чел. — год)[7] | |
|---|---|---|---|
| Хьюстон (Аполлон/Скайлэб) | 209 | 23.00 | 6000 + |
| Управление дальней связью | 30 | 1.25 | 1000 + |
| Управление авиатранспортом | 103 | 1.48 | 5000 + |
| Противоракетная система | 120 | 1.87 | 3500 + |
| Обработка данных со спутников в реальном времени | 23 | 0.55 | 1300 + |