Системное программное обеспечение
Системное программное обеспечение может быть разделено на следующие группы:
1. Операционные системы.
2. Интерфейсные оболочки для взаимодействия пользователя с ОС и программные среды.
3. Утилиты.
Рассмотрим эти группы системных программ.
Операционные системы
Операционная система (ОС) – комплекс программ, организующих вычислительный процесс в вычислительной системе.
Вычислительная система – совокупность аппаратных и программных средств ЭВМ, взаимодействующих для решения задач обработки информации.
Операционнаясистема выступает, с одной стороны, как интерфейс между аппаратурой компьютера и пользователем с его задачами, а с другой — предназначена для наиболее эффективного использования ресурсов вычислительной системы и организации надежных вычислений. Любой из компонентов прикладного программного обеспечения обязательно работает под управлением ОС.
Основные функции, которые выполняет ОС, следующие:
прием от пользователя заданий или команд, сформулированных на соответствующем языке — в виде директив (команд) оператора или в виде указаний (своеобразных команд) с помощью соответствующего манипулятора (например, с помощью мыши), — и их обработка;
прием и исполнение программных запросов на запуск, приостановку, остановку других программ;
загрузка в оперативную память подлежащих исполнению программ;
инициация программы (передача ей управления, в результате чего процессор исполняет программу);
идентификация всех программ и данных;
обеспечение работы систем управлений файлами (СУФ) и/или систем управления базами данных (СУБД), что позволяет резко увеличить эффективность всего программного обеспечения;
обеспечение режима мультипрограммирования, то есть выполнение двух или более программ на одном процессоре, создающее видимость их одновременного исполнения;
обеспечение функций по организации и управлению всеми операциями ввода/вывода;
распределение памяти;
планирование и диспетчеризация задач;
обеспечение сохранности данных;
обеспечение работы систем программирования, с помощью которых пользователи готовят свои программы и др.
Проведем классификацию операционных систем.
Прежде всего, различают ОС общего и специального назначения. ОС специального назначения, в свою очередь, подразделяются на следующие: для переносимых микрокомпьютеров и различных встроенных систем, организации и ведения баз данных, решения задач реального времени и т. п.
По режиму обработки задач различают ОС, обеспечивающие однопрограммный и мультипрограммный режимы. Под мультипрограммированием понимается способ организации вычислений, когда на однопроцессорной вычислительной системе создается видимость одновременного выполнения нескольких программ. Любая задержка в решении программы (например, для осуществления операций ввода/вывода данных) используется для выполнения других (таких же, либо менее важных) программ. Иногда при этом говорят о мультизадачном режиме.
Мультипрограммный и мультизадачный режимы — это не синонимы, хотя и близкие понятия. Основное принципиальное отличие в этих терминах заключается в том, что мультипрограммный режим обеспечивает параллельное выполнение нескольких приложений и при этом программисты, создающие эти программы, не должны заботиться о механизмах организации их параллельной работы. Эти функции берет на себя сама ОС; именно она распределяет между выполняющимися приложениями ресурсы вычислительной системы, осуществляет необходимую синхронизацию вычислений и взаимодействие. Мультизадачный режим, наоборот, предполагает, что забота о параллельном выполнении и взаимодействии приложений ложится как раз на прикладных программистов.
При организации работы с вычислительной системой в диалоговом режиме можно говорить об однопользовательских (однотерминальных) и многопользовательских (мультитерминальных) ОС. В мультитерминальных ОС с одной вычислительной системой одновременно могут работать несколько пользователей, каждый со своего терминала. При этом у пользователей возникает иллюзия, что у каждого из них имеется своя собственная вычислительная система. В качестве одного из примеров мультитерминальных ОС для ПК можно назвать Linux.
Основной особенностью операционных систем реального времени (ОСРВ) является обеспечение обработки поступающих заданий в течение заданных интервалов времени, которые нельзя превышать. Поток заданий в общем случае не является планомерным и не может регулироваться оператором (характер следования событий можно предсказать лишь в редких случаях), то есть задания поступают в непредсказуемые моменты времени и без всякой очередности. В ОС, непредназначенных для решения задач реального времени, имеются некоторые накладные расходы процессорного времени на этапе инициирования (при выполнении которого ОС распознает все пожелания пользователей относительно решения своей задачи, загружает в оперативную память нужную программу и выделяет другие необходимые для ее выполнения ресурсы). В ОСРВ подобные затраты могут отсутствовать, так как набор задач обычно фиксирован и вся информация о задачах известна еще до поступления запросов.
Для подлинной реализации режима реального времени необходима (хотя этого и недостаточно) организация мультипрограммирования. Мультипрограммирование является основным средством повышения производительности вычислительной системы, а для решения задач реального времени производительность становится важнейшим фактором. Лучшие характеристики по производительности для систем реального времени обеспечиваются однотерминальными ОСРВ. Средства организации мультитерминального режима всегда замедляют работу системы в целом, но расширяют функциональные возможности системы. Одной из наиболее известных ОСРВ для ПК является ОС QNX.
В настоящее время используется много типов различных операционных систем для ЭВМ различных видов, однако в их структуре существуют общие принципы. В составе многих операционных систем можно выделить некоторую часть, которая является основой всей системы и называется ядром. В состав ядра входят наиболее часто используемые модули, такие как модуль управления системой прерываний, средства по распределению таких основных ресурсов, как оперативная память и процессор. Программы, входящие в состав ядра, при загрузке ОС помещаются в оперативную память, где они постоянно находятся и используются при функционировании ЭВМ. Такие программы называют резидентными. К резидентным относят также и программы-драйверы, управляющие работой периферийных устройств.
Драйверы – программы, предназначенные для обслуживания периферийных устройств, обычно загружаются в оперативную память при запуске компьютера. Они расширяют возможности операционных систем по управлению устройствами ввода-вывода компьютера (клавиатурой, жестким диском, мышью и т.д.), оперативной памятью и т.д. С помощью драйверов возможно подключение к компьютеру новых устройств или нестандартное использование имеющихся устройств. Важной частью ОС является командный процессор – программа, отвечающая за интерпретацию и исполнение простейших команд, подаваемых пользователем, и его взаимодействие с ядром ОС.
По основному архитектурному принципу ОС разделяются на микроядерные и монолитные. В некоторой степени это разделение тоже условно, однако можно в качестве яркого примера микроядерной ОС привести ОСРВ QNX, тогда как в качестве монолитной можно назвать Windows 95/98. Ядро ОС Windows мы не можем изменить, нам не доступны его исходные коды и у нас нет программы для сборки (компиляции) этого ядра. А вот в случае с Linux мы можем сами собрать ядро, которое нам необходимо, включив в него те необходимые программные модули и драйверы, которые мы считаем целесообразным включить именно в ядро (а не обращаться к ним из ядра).
Как правило, все современные ОС включают в себя соответствующие системы управления файлами. Назначение системы управления файлами — организация более удобного доступа к данным, организованным как файлы. Именно благодаря системе управления файлами вместо низкоуровневого доступа к данным с указанием конкретных физических адресов нужной нам записи используется логический доступ с указанием имени файла и записи в нем.
Всем известная файловая система FAT (file allocation table) имеет множество реализаций как система управления файлами, например FAT-16 для MS-DOS, super-FAT для OS/2, FAT для Windows NT и т. д. Другими словами, для работы с файлами, организованными в соответствии с некоторой файловой системой, для каждой ОС должна быть разработана соответствующая система управления файлами; и эта система управления файлами будет работать только в той ОС, для которой она и создана.
Ряд ОС позволяет работать с несколькими файловыми системами (либо с одной из нескольких, либо сразу с несколькими одновременно). В этом случае говорят о монтируемых файловых системах (дополнительную систему управления файлами можно установить). Кроме того, можно назвать примеры простейших ОС, которые могут работать и без файловых систем, а значит, им необязательно иметь систему управления файлами.
Интерфейсные оболочки
Для удобства взаимодействия с ОС могут использоваться дополнительные интерфейсные оболочки. Их основное назначение — либо расширить возможности по управлению ОС, либо изменить встроенные в систему возможности. В качестве классических примеров интерфейсных оболочек и соответствующих операционных сред выполнения программ можно назвать различные варианты графического интерфейса Х Window в системах семейства UNIX (например, К Desktop Environment в Linux), PM Shell или Object Desktop в OS/2 с графическим интерфейсом; можно указать разнообразные варианты интерфейсов для семейства ОС Windows компании Microsoft, которые заменяют Explorer.
Ряд операционных систем могут организовывать выполнение программ, созданных для других ОС. Например, в OS/2 можно выполнять как программы, созданные для самой OS/2, так и программы, предназначенные для выполнения в среде MS-DOS и Windows 3.х. Аналогично, в системе Linux можно создать условия для выполнения некоторых программ, написанных для Windows 95/98.
Наконец, к этому классу системного программного обеспечения следует отнести и эмуляторы, позволяющие смоделировать в одной операционной системе какую-либо другую машину или операционную систему. Так, известна система эмуляции WMWARE, которая позволяет запустить в среде Linux любую другую ОС, например, Windows. Можно, наоборот, создать эмулятор, работающий в среде Windows, который позволит смоделировать компьютер, работающий под управлением любой ОС, в том числе и под Linux.
Утилиты
Под утилитами понимают специальные системные программы, с помощью которых можно как обслуживать саму операционную систему, так и подготавливать для работы носители данных, выполнять перекодирование данных, осуществлять оптимизацию размещения данных на носителе и производить некоторые другие работы, связанные с обслуживанием вычислительной системы.
К утилитам следует отнести и программу разбиения накопителя на магнитных дисках на разделы, и программу форматирования, и программу переноса основных системных файлов самой ОС. Также к утилитам относятся и известные комплексы программ от фирмы Symantec, носящие имя Питера Нортона (создателя этой фирмы и соавтора популярного набора утилит для первых IBM PC). Естественно, что утилиты могут работать только в соответствующей операционной среде.
Опишем некоторые разновидности утилит.
Программы-упаковщики позволяют за счет применения специальных методов «упаковки» информации сжимать информацию на дисках, т.е. создавать копии файлов меньшего размера, а также объединять копии нескольких файлов в один архивный файл. Применение программ-упаковщиков очень полезно при создании архива файлов, так как в большинстве случаев значительно удобнее хранить на дискетах файлы, предварительно сжатые программами-упаковщиками. Следует заметить, что различные упаковщики не совместимы друг с другом — архивный файл, созданный одним упаковщиком, чаще всего нельзя прочесть другим.
Антивирусные программы предназначены для предотвращения заражения компьютерным вирусом и ликвидации последствий заражения вирусом. Антивируснаяпрограмма–программа, выявляющая вирусную программу на диске или в оперативной памяти компьютера и обезвреживающая ее. Вирусная программа – программа, специально предназначенная для копирования себя и выполнения различных действий на компьютере без санкции пользователя.
Коммуникационные программы предназначены для организации обмена информацией между компьютерами. Такие программы позволяют удобно пересылать файлы с одного компьютера на другой при соединении кабелемих последовательных портов (некоторые программы — при соединении параллельных портов, что обеспечивает большую скорость). Другой вид программ обеспечивает возможность связи компьютеров по телефонной сети (при наличии модема).
Программы для диагностики компьютера позволяют проверить конфигурацию компьютера (количество памяти, ее использование, типы дисков и т.д.), а также проверить работоспособность устройств компьютера (прежде всего жестких дисков). Они позволяют выявить «намечающиеся» дефекты дисков (возникающие из-за износа магнитной поверхности диска) и предотвратить потерю данных, хранящихся на диске.
Программы для оптимизации дисков позволяют обеспечить более быстрый доступ к информации на диске за счет оптимизации размещения данных на диске. Эти программы перемещают все участки каждого файла друг к другу (устраняют фрагментацию), собирают все файлы в начале диска и т.д., за счет чего уменьшается число перемещений головок диска (т.е. ускоряется доступ к данным) и снижается износ диска.
Разумеется, многообразие вспомогательных программ для ЭВМ отнюдь не исчерпывается описанными выше типами программ.
Системы программирования
В самом общем случае для создания программы на выбранном языке программирования нужно иметь следующие компоненты:
1. Текстовый редактор. Так как текст программы записывается с помощью ключевых слов, обычно происходящих от слов английского языка, и набора стандартных символов для записи всевозможных операций, то формировать этот текст можно в любом редакторе, получая в итоге текстовый файл с исходным текстом программы. Лучше использовать специализированные редакторы, которые ориентированы на конкретный язык программирования и позволяют в процессе ввода текста выделять ключевые слова и идентификаторы разными цветами и шрифтами. Подобные редакторы созданы для всех популярных языков и дополнительно могут автоматически проверять правильность синтаксиса программы непосредственно во время ее ввода.
2. Исходный текст с помощью программы-компилятора переводится в машинный код. Если обнаружены синтаксические ошибки, то результирующий код создан не будет. На этом этапе уже возможно получение готовой программы, но чаще всего в ней не хватает некоторых компонентов, поэтому компилятор обычно выдает промежуточный объектный код (двоичный файл, стандартное расширение .OBJ).
3. Исходный текст большой программы состоит, как правило, из нескольких модулей (файлов с исходными текстами), потому что хранить все тексты в одном файле неудобно – в них сложно ориентироваться. Каждый модуль компилируется в отдельный файл с объектным кодом, которые затем надо объединить в одно целое.
Кроме того, к ним надо добавить машинный код подпрограмм, реализующих различные стандартные функции (например, вычисляющих математические функции sin или ln). Такие функции содержатся в библиотеках, которые поставляются вместе с компилятором.
Библиотеки подпрограмм составляют существенную часть систем программирования. Наряду с дружественностью пользовательского интерфейса состав доступных библиотек подпрограмм во многом определяет возможности системы программирования и ее позиции на рынке средств разработки программного обеспечения.
В состав системы программирования может входить большое количество разнообразных библиотек. Среди них всегда можно выделить основную библиотеку, содержащую обязательные функции входного языка программирования. Эта библиотека всегда используется компилятором, поскольку без нее разработка программ на данном входном языке невозможна. Все остальные библиотеки необязательны и подключаются к результирующей программе только по прямому указанию разработчика.
Принципиально новые возможности предоставили только современные ОС, которые позволили подключать к результирующим программам не статические, а динамические библиотеки. Динамические библиотеки в отличие от традиционных (статических) библиотек подключаются к программе не в момент ее компоновки, а непосредственно в ходе выполнения, как только программа затребовала ту или иную функцию, находящуюся в библиотеке. Преимущества таких библиотек очевидны — они не требуют включать в программу объектный код часто используемых функций, чем существенно сокращают объем кода.
Сгенерированный код модулей и подключенные к нему стандартные функции надо не просто объединить в одно целое, а выполнить такое объединение с учетом требований операционной системы, то есть получить на выходе программу, отвечающую определенному формату. Объектный код обрабатывается специальной программой — редактором связей или сборщиком, который выполняет связывание объектных модулей и машинного кода стандартных функций, находя их в библиотеках, и формирует на выходе работоспособное приложение — исполнимый код для конкретной платформы.
Если по каким-то причинам один из объектных модулей или нужная библиотека не обнаружены (например, неправильно указан каталог с библиотекой), то сборщик сообщает об ошибке, и готовой программы не получается.
Исполнимый код — это законченная программа, которую можно запустить на любом компьютере, где установлена операционная система, для которой эта программа создавалась. Как правило, итоговый файл имеет расширение .ЕХЕ или .СОМ.
Системой программирования называется весь комплекс программных средств, предназначенных для кодирования, тестирования и отладки программного обеспечения. Системы программирования в современном мире доминируют на рынке средств разработки. Практически все фирмы-разработчики компиляторов поставляют свои продукты в составе соответствующей системы программирования в комплексе всех прочих технических средств. Отдельные компиляторы являются редкостью и, как правило, служат только узко специализированным целям.
Интегрированная система программирования включает в себя специализированный текстовый редактор. Почти все этапы создания программы в ней автоматизированы: после того как исходный текст введен, его компиляция и сборка выполняются одним нажатием клавиши. Это очень удобно, так как не требует ручной настройки множества параметров запуска компилятора и редактора связей, указывания им нужных файлов вручную и т. д. Процесс компиляции обычно демонстрируется на экране: показывается, сколько строк исходного текста откомпилировано, или выдаются сообщения о найденных ошибках.
Еще одним модулем системы программирования, функции которого тесно связаны с выполнением программы, является отладчик. Отладчик — это программный модуль, который позволяет выполнить основные задачи, связанные с мониторингом процесса выполнения результирующей прикладной программы. Этот процесс называется отладкой и включает в себя следующие возможности:
последовательное пошаговое выполнение результирующей программы на основе шагов по машинным командам или по операторам входного языка;
просмотр содержимого областей памяти, занятых командами или данными результирующей программы и др.
Отладчики в современных системах программирования представляют собой модули с развитым интерфейсом пользователя, работающие непосредственно с текстом и модулями исходной программы. Многие их функции интегрированы с функциями текстовых редакторов исходных текстов, входящих в состав систем программирования.
Для популярных языков программирования на IBM PC существует множество систем программирования. В качестве примеров таких систем программирования можно назвать Turbo С, Turbo C++, Turbo Pascal, Microsoft С, Microsoft Basic.
Среди программистов, пишущих программы для персональных компьютеров, наибольшей популярностью пользуются языки Си, Си++, Паскаль и Бейсик. Приведем краткие сведения об этих языках.
Язык Си был разработан в 1972 г. Денисом Ричи для использования при написании весьма ныне популярной операционной системы Unix. Си соединяет свойства языка высокого уровня с возможностью эффективного использования ресурсов компьютера, которое обычно обеспечивается только при программировании на языке Ассемблера. Си не очень прост в обучении и требует тщательности в программировании, но позволяет писать сложные и весьма высокоэффективные программы. Бьярном Страустрапом был разработан язык Си++ — расширение языка Си, реализующее популярные в последнее время концепции объектно-ориентированного программирования и облегчающее создание сложных программ.
Язык Паскаль был разработан в 1970 г. Никлаусом Виртом как язык для обучения студентов программированию. Паскаль позволяет писать программы, легко читаемые даже новичком, и содержит в себе все элементы, необходимые для соблюдения хорошего строгого стиля программирования (называемого структурным программированием), упрощающего разработку сложных программ. Это обусловило большую популярность Паскаля. В своем первоначальном виде Паскаль имел довольно ограниченные возможности, так как был предназначен для учебных целей, но при разработке реализации Паскаля на компьютерах в него были внесены дополнения, делающие его более пригодным для практического использования. Системы программирования на Паскале для IBM PC также реализуют расширенные варианты этого языка.
Язык Бейсик был создан в 1964 г. Томасом Куртом и Джоном Кемени как язык для начинающих, облегчающий написание простых программ. Существуют сотни различных версий Бейсика, которые не полностью (а иногда и мало) совместимы друг с другом. Бейсик очень распространен на микрокомпьютерах, он легок для обучения, но мало подходит для написания больших и сложных программ. На IBM PC широко используются Quick Basic фирмы Microsoft и Turbo Basic фирмы Borland.
Кардинально облегчило жизнь программистов появление визуального программирования, возникшего в Visual Basic и нашедшего блестящее воплощение в Delphi и C++Builder фирмы Borland. Визуальное программирование позволило свести проектирование пользовательского интерфейса к простым и наглядным процедурам, которые дают возможность за минуты или часы сделать то, на что ранее уходили месяцы работы.
Интегрированная среда разработки предоставляет программисту формы, на которых размещаются компоненты. Обычно это оконная форма, хотя могут быть и невидимые формы. На форму с помощью мыши переносятся и размещаются пиктограммы компонентов, имеющихся в библиотеках системы программирования. С помощью простых манипуляций программист может изменять размеры и расположение этих компонентов. При этом результаты проектирования видны на экране даже без компиляции программы, немедленно после выполнения какой-то операции с помощью мыши.
Самое главное достоинство визуального программирования заключается в том, что во время проектирования формы и размещения на ней компонентов автоматически формируются коды программы. В программу включаются соответствующие фрагменты, описывающие данный компонент. А затем в соответствующих диалоговых окнах программист может изменить заданные по умолчанию значения каких-то свойств этих компонентов и, при необходимости, написать обработчики каких-то событий. То есть проектирование сводится, фактически, к размещению компонентов на форме, заданию некоторых их свойств и написанию, при необходимости, обработчиков событий.
Благодаря визуальному объектно-ориентированному программированию была создана технология, получившая название быстрая разработка приложений – RAD. Эта технология характерна для нового поколения систем программирования.
Сегодня имеется немало систем программирования, выпускаемых различными фирмами и ориентированных на различные модели ПК и операционные системы. Наиболее популярны следующие визуальные среды быстрого проектирования программ для Windows:
Basic: Microsoft Visual Basic;
Pascal: Borland Delphi;
C++: Borland C++Bulider.