КаталогИндекс раздела
НазадОглавлениеВперед


Программирование в ОС UNIX. Обзор

СОДЕРЖАНИЕ

1. Введение
    1.1. Предыстория
    1.2. Простая формулировка философии системы UNIX

2. Инструментарий ОС UNIX. Где о нем можно прочитать
    2.1. Какие инструменты описываются в данном Руководстве
    2.2. Shell как средство изготовления прототипов

3. Три вида программистов
    3.1. Программисты-одиночки
    3.2. Прикладные программисты
    3.3. Системные программисты


1. ВВЕДЕНИЕ

В 1983 году Кен Томпсон и Деннис Ритчи были удостоены Премии Тьюринга Ассоциации Пользователей Вычислительных Машин (ACM) за разработку операционной системы UNIX. В аннотации, в частности, говорилось:

Успех системы UNIX основывается на удачном выборе нескольких ключевых идей и их элегантной реализации. Благодаря системе UNIX появилось поколение разработчиков программного обеспечения с новой идеологией программирования, основой которой является многократное использование имеющихся программ.

Должны ли программисты, использующие ОС UNIX, интересоваться тем, что делали Томпсон и Ритчи? Имеет ли это сегодня какой-либо смысл? Это необходимо, поскольку понимание идеологии, заложенной в проект системы, а также знание атмосферы, в которой проходила ее реализация, способствует наиболее быстрому ее освоению.

1.1 Предыстория

Возможно, Вы уже читали о том, что первоначально реализация новой операционной системы, впоследствии названной UNIX, проводилась группой Кена Томпсона и Денниса Ритчи на неиспользуемом компьютере DEC PDP-7, стоявшем в коридоре AT&T Bell Laboratories. Причем целью этих работ было построение удобного окружения для собственного использования. Никто не собирался разрабатывать операционную систему, способную завоевать мировую известность.

Интересно проследить последовательность, в которой реализовывались различные элементы операционной системы. Сначала была построена простая файловая система, не имеющая древовидной структуры. Затем она была организована как система каталогов и файлов. Говоря о файлах, необходимо подчеркнуть две основные идеи. Во-первых, в ОС UNIX данные, программы, каталоги и даже физические устройства рассматриваются как файлы того или иного типа. Во-вторых, сам файл понимается как одномерный массив байт, лишенный какой-либо другой структуры. Очевидность и простота такого подхода способствовали построению удобного окружения как для программистов, так и для других пользователей.

Следующая идея состояла в том, чтобы рассматривать выполняющиеся программы как процессы. При этом каждый процесс может порождать другой и обмениваться с ним информацией. В результате такого подхода стало естественным разделение сегментов команд между несколькими процессами (это является характерной особенностью ОС UNIX).

Наконец, когда были реализованы команды для различных действий с файлами и ассемблер для генерации выполняемых программ, система уже могла автономно функционировать.

Следующим важным шагом было приобретение компьютера DEC PDP-11 и установка на нем новой операционной системы. По мнению Ритчи это была большая удача, поскольку PDP-11 была очень хорошей машиной и успех самого компьютера в определенной степени способствовал признанию операционной системы, ставшей известной под названием UNIX.

К 1972 году в системе была реализована возможность организации межпроцессных каналов (такого способа связи, при котором вывод одного процесса становится вводом другого). Операционная система была переписана на языках более высокого уровня (сначала на языке B, затем C) и получила название UNIX, придуманное Брайаном Керниганом. Таким образом, задача, поставленная Томсоном и Ритчи, то есть построение удобного программного окружения, была выполнена.

Стоит отметить, что реализация ОС UNIX проходила в атмосфере, существенно отличающейся от той, в которой разрабатывается большинство операционных систем, имеющих коммерческих успех, когда дюжины талантливых программистов напряженно работают в обстановке абсолютной секретности, причем сроки завершения работ бывают очень жесткими. В противоположность такому подходу, ОС UNIX созревала примерно в течение десяти лет. С самого начала она привлекла внимание большого числа замечательных специалистов, многие из которых использовали систему для проведения собственных разработок, с одной стороны, и внесли свой вклад в ее развитие, с другой стороны.

Начиная с 1971 года система стала использоваться внутри AT&T Bell Laboratories, а вскоре (в 1974 году) стала продаваться колледжам и университетам, причем цена была невысокой и никакой поддержки не предполагалось. Эти, так называемые исследовательские версии, нумеровались арабскими цифрами, начиная с 7. Иногда они самостоятельно развивались и обогащали систему новыми элементами. Например, широко известный экранный редактор vi был добавлен к системе Уильямом Джоем из Университета Беркли. В 1979 году, согласно коммерческим требованиям, AT&T начала поставлять поддерживаемые версии ОС UNIX. Они нумеровались римскими цифрами, и кроме того, часто снабжались номером модификации. Например, текущая версия называется UNIX System V Release 3.1.

Версии ОС UNIX, поставляемые AT&T сейчас, разрабатываются в обстановке, более типичной для промышленного производства программного обеспечения. Совершенствование системы происходит в ответ на требования рынка. Тем не менее, система по-прежнему выражает передовую идеологию ее разработчиков, и несет отпечаток университетской атмосферы, в которой они работают. Это свойство системы часто называют ее философией, имея в виду способ использования UNIX'а опытными программистами.

1.2. Простая формулировка философии системы UNIX

В течение всего времени разработки программ в операционной системе UNIX держите в поле зрения девиз:


   Используйте труд других программистов!   
 

В отличие от компьютерных окружений, в которых разработка новых проектов обычно начинается с нуля, в ОС UNIX значительная часть работы уже проделана и хранится, ожидая использования, в каталогах /bin, /usr/bin, а также /etc.

Особенности ОС UNIX (каналы, процессы, устройство файловой системы) способствуют многократному использованию программ, что подтверждается историей разработки самой системы, восходящей к 1969 году. Вы рискуете не понять сути системы UNIX, если не будете в своей работе использовать эти ее особенности.

 

2. ИНСТРУМЕНТАРИЙ ОС UNIX. ГДЕ О НЕМ МОЖНО ПРОЧИТАТЬ

Термин инструментарий ОС UNIX требует некоторого уточнения. В наиболее узком смысле он означает фрагменты существующего програмного обеспечения, используемые как компоненты для построения новых программ. В более широком смысле этим термином может обозначаться совокупность самых различных элементов ОС UNIX, таких как утилиты, программы, команды, языки, функции и т.д. Путаница может возникнуть, и часто возникает, из-за того, что многие из упомянутых элементов системы действительно могут использоваться как компоненты для построения новых программ.

2.1. Какие инструменты описываются в данном Руководстве

В Руководстве программиста описываются инструменты, используемые для создания программ в окружении ОС UNIX. Заметим, что в руководстве описываются не все имеющиеся инструменты. Возможно, что неописанные инструменты окажутся даже более важными для Вас, тем не менее у нас нет возможности написать обо всем. Кратко перечислим, что именно будет описано, а что - нет.

Не описанные в данном руководстве инструменты:

Информацию об этом можно найти в Руководстве пользователя, а также в других доступных книгах.

Описываемые в руководстве инструменты можно классифицировать следующим образом:

2.2. Shell как средство изготовления прототипов

Всякий раз, когда Вы входите в ОС UNIX, Вы используете shell. Shell - это интерактивный интерпретатор команд, позволяющий взаимодействовать с ядром ОС UNIX. Но это лишь одно из применений shell'а. Shell может быть использован как язык программирования. Программы на этом языке в дальнейшем будут называться shell-процедурами. Shell-процедуры могут иметь разветвленную структуру, из них можно запускать процессы. В языке имеются средства для обработки исключительных ситуаций, а также для переназначения ввода и вывода. Таким образом, shell является полноценным языком программирования.

Одним из достоинств shell'а является возможность организации так называемых конвейеров - цепочек команд, которые будут выполняться одна за другой таким образом, что вывод предыдущей команды является вводом следующей. В конвейерах может использоваться большинство команд, описанных в Справочнике пользователя, поэтому время, затраченное Вами на изучение Справочника пользователя, безусловно окупится. Просмотрите этот Справочник, и, возможно, Вы найдете команду, которая, будучи употребленной с нужными опциями, решит трудную программистскую проблему. Чем больше команд станет Вам известно, тем в большей степени Вы сможете воспользоваться возможностями ОС UNIX.

В данный момент мы не будем заниматься обучением программированию на shell'е. Подчеркнем лишь ту важную роль, которую может играть shell при разработке макетных образцов крупномасштабного программного обеспечения. Действительно, несмотря на то, что изучение shell'а со всеми его нюансами является достаточно сложной задачей, на получение shell-программ требуется гораздо меньше времени, чем на разработку программ на обычных языках высокого уровня.

Благодаря возможности быстрого получения работающих программ, shell является мощным инструментом при разработке программного обеспечения. Применение shell'а позволяет использовать труд других в максимальной степени, так как при программировании на shell'е можно легко и эффективно комбинировать различные компоненты. На shell'е часто удается запрограммировать даже большие прикладные программные системы. Даже если такое программирование выполняется с целью получения макетного образца программной системы, предназначенного лишь для проверки ее целей, могут быть сэкономлены многие месяцы работы. Действительно, имея такой макетный образец, можно определить диапазон возможных пользовательских ошибок, что не всегда легко проделать на стадии проектирования программной системы. Кроме того, макет позволяет отработать реакцию системы при некорректном вводе пользователя. Таким образом, можно избежать большого объема работ по исправлению ошибок, возникших на стадии проектирования разрабатываемой программной системы.

В заключении заметим, что из shell-процедур можно обращаться как к программам, написанным на обычных языках программирования, так и к стандартным командам ОС UNIX. Это удобно, так как часто с помощью имеющихся инструментов можно выполнить какие-либо действия, записав всего пару строк вместо полуторастраничной программы на каком-либо языке.

 

3. ТРИ ВИДА ПРОГРАММИСТОВ

Как уже говорилось, мы будем различать три категории UNIX-программистов, используя в качестве критерия вид разрабатываемых ими программ. Заметим, что эта классификация не основана на квалификации или опыте программистов. Действительно, высококвалифицированные программисты, имеющие многолетний опыт, могут быть иногда отнесены к категории программистов-одиночек. С другой стороны, программисты с относительно небольшим опытом работы могут участвовать в коллективах, создающих прикладное или системное программное обеспечение.

3.1. Программисты-одиночки

Программисты этой категории пишут программы только для того, чтобы облегчить выполнение своей основной работы. Полученные ими результаты могут быть помещены в фонд программ, доступных коллективу, в котором данный программист работает. Это похоже на то, как развивалась сама ОС UNIX: кто-то изготавливает полезный инструмент и затем использует его совместно с остальными членами организации. Программисты данной категории могут не иметь внешних требований к программам, работать без соавторов и без какого-либо управления их деятельностью. На процесс создания программы влияет только сама задача, решаемая программистом. Одним из факторов, способствующих наличию программистов данной категории, является то, что ОС UNIX является системой с разделением времени. Действительно, сотрудники, умеющие программировать, могут решать свои проблемы, минуя процедуру офици- ального одобрения их проектов и не ожидания в течение месяцев, когда штатные программисты напишут программы.

Программистам данной категории необходимо знать, как:

Большая часть информации, необходимой для выполнения этих действий, содержится в следующей главе.

3.2. Прикладные программисты

Программисты данной группы разрабатывают программные системы, которыми будут пользоваться непрограммисты. Разработка крупной прикладной системы требует участия целых коллективов программистов. Членами таких коллективов могут быть сотрудники как фирмы-заказчика, так и фирмы-разработчика. Заметим, что некоторые программисты, занятые разработкой прикладного программного обеспечения, в большей степени занимаются организацией процесса разработки программ, а не собственно программированием.

Информация, необходимая программистам данной категории, включает все темы следующей главы, а также:

Системы управления программным обеспечением.

В этой связи настоятельно рекомендуем изучить том, посвященный Интегрированной Среде Разработки Программ (ИСРП).

3.3. Системные программисты

Это программисты, занятые в разработке программных средств, являющихся частью операционной системы, или тесно с ней связанных. Такая деятельность может включать создание драйверов новых физических устройств, разработку систем управления базами данных или совершенствование ядра системы. Программистам этой категории, кроме знания исходных текстов операционной системы, необходимо тщательно изучить всю доступную документацию по ОС UNIX.


НазадОглавлениеВперед
КаталогИндекс раздела