Системное программное обеспечение

 

Системное программное обеспечение может быть разделено на следующие группы:

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.