История
любой отрасли науки или техники позволяет не только удовлетворить естественное
любопытство, но и глубже понять сущность основных достижений этой отрасли, осознать
существующие тенденции и правильно оценить перспективность тех или. иных направлений
развития. За почти полувековой период своего существования операционные системы
прошли сложный путь, насыщенный многими важными событиями. Огромное влияние на
развитие операционных систем оказали успехи в совершенствовании элементной базы
и вычислительной
аппаратуры, поэтому многие этапы развития ОС тесно связаны с появлением новых
типов аппаратных платформ, таких как мини-компьютеры или персональные компьютеры.
Серьезную эволюцию операционные системы претерпели в связи с новой ролью компьютеров
в локальных и глобальных сетях. Важнейшим фактором развития ОС стал Интернет.
По мере того как эта Сеть приобретает черты универсального средства массовых коммуникаций,
ОС становятся все более простыми и удобными в использовании, включают развитые
средства поддержки мультимедийной информации, снабжаются надежными средствами
защиты.
Появление первых операционных систем.
Идея
компьютера была предложена английским математиком Чарльзом Бэбиджем (Charles
Babage) в середине девятнадцатого века. Его механическая «аналитическая машина» так
и не смогла по-настоящему заработать, потому что технологии того времени не
удовлетворяли
требованиям, необходимым для изготовления нужных деталей точной механики. Конечно,
никакой речи об операционной системе для этого «компьютера» не шло. Настоящее
рождение цифровых вычислительных машин произошло вскоре после окончания
второй мировой войны. В середине 40-х были созданы первые ламповые
вычислительные устройства.
В то время одна и та же группа людей участвовала и в проектировании, и в эксплуатации,
и в программировании вычислительной машины. Это была скорее научно-исследовательская
работа в области вычислительной техники, а не использование компьютеров в
качестве инструмента решения каких-либо практических задач из других прикладных
областей.
Программирование осуществлялось исключительно на машинном языке. Не было никакого
системного программного обеспечения, кроме библиотек математических и служебных
подпрограмм, которые программист мог использовать для того, чтобы не писать каждый
раз коды, вычисляющие значение какой-либо математической функции или управляющие
стандартным устройством ввода-вывода. Операционные системы все еще не появились,
все задачи организации вычислительного процесса решались вручную каждым программистом
с пульта управления, который представлял собой примитивное устройство ввода-вывода,
состоящее из кнопок, переключателей и индикаторов. Операционная система (ОС) – это набор программ,
которые обеспечивают возможность использования аппаратуры компьютера. При
этом аппаратура компьютера предоставляет «сырую» вычислительную мощность и
задача операционной системы заключается в том, чтобы сделать аппаратуру доступной
и по возможности удобной для пользователя. ОС обеспечивает также рациональное и
координированное управление аппаратурой для достижения высокой
производительности. Считается,
что первую ОС для своих ЭВМ IBM-701 создала в начале 50 г.г. 20 века фирма
General Motors – реальный пользователь, который не имел к созданию ЭВМ никакого отношения.
В 1955 эта фирма и North American Aviation совместно разработали ОС для ЭВМ IBM-704. С
середины 50-х годов начался новый период в развитии вычислительной техники,
связанный
с появлением новой технической базы — полупроводниковых элементов. Выросло быстродействие
процессоров, увеличились объемы оперативной и внешней памяти. Компьютеры
стали более надежными, теперь они могли непрерывно работать настолько долго, чтобы
на них можно было возложить выполнение действительно практически важных задач. Наряду
с совершенствованием аппаратуры заметный прогресс наблюдался также в области
автоматизации программирования и организации вычислительных работ. В эти годы появились
первые алгоритмические языки, и таким образом к библиотекам математических и служебных
подпрограмм добавился новый тип системного программного обеспечения — трансляторы. Выполнение
каждой программы стало включать большое количество вспомогательных работ:
загрузка нужного транслятора (АЛГОЛ, ФОРТРАН, КОБОЛ и т. п.), запуск
транслятора и
получение результирующей программы в машинных кодах, связывание программы с библиотечными
подпрограммами, загрузка программы в оперативную память, запуск программы,
вывод результатов на периферийное устройство. Для организации эффективного совместного
использования трансляторов, библиотечных программ и загрузчиков в штат многих
вычислительных центров были введены должности операторов, профессионально выполнявших
работу по организации вычислительного процесса для всех пользователей этого центра.
Но
как бы быстро и надежно ни работали операторы, они никак не могли состязаться в производительности
с работой устройств компьютера. Большую часть времени процессор простаивал
в ожидании, пока оператор запустит очередную задачу. А поскольку процессор представлял
собой весьма дорогое устройство, то низкая эффективность его использования означала
низкую эффективность использования компьютера в целом. Для решения этой проблемы
были разработаны первые системы пакетной обработки, которые автоматизировали всю
последовательность действий оператора по организации вычислительного процесса. Ранние
системы пакетной обработки явились прообразом современных операционных систем,
они стали первыми системными программами, предназначенными не для обработки данных,
а для управления вычислительным процессом. В
ходе реализации систем пакетной обработки был разработан формализованный язык управления заданиями, с помощью которого программист сообщал системе и оператору,
какие действия
и в какой последовательности он хочет выполнить на вычислительной машине.
Типовой
_______набор директив обычно включал признак начала отдельной работы, вызов транслятора,
вызов загрузчика, признаки начала и конца исходных данных. Оператор
составлял пакет заданий, которые в дальнейшем без его участия последовательно
запускались на выполнение управляющей программой — монитором. Кроме
того, монитор
был способен самостоятельно обрабатывать наиболее часто встречающиеся при работе
пользовательских программ аварийные ситуации, такие как отсутствие исходных данных,
переполнение регистров, деление на ноль, обращение к несуществующей области памяти
и т. д. Пакет обычно представлял собой набор перфокарт, но для ускорения работы
он мог
переноситься на более удобный и емкий носитель, например на магнитную ленту или магнитный
диск. Сама программа-монитор в первых реализациях также хранилась на перфокартах
или перфоленте, а в более поздних — на магнитной ленте и магнитных дисках. Ранние
системы пакетной обработки значительно сократили затраты времени на вспомогательные
действия по организации вычислительного процесса, а значит, был сделан еще
один шаг по повышению эффективности использования компьютеров. Однако при этом программисты-пользователи
лишились непосредственного доступа к компьютеру, что снижало эффективность
их работы — внесение любого исправления требовало значительно больше времени,
чем при интерактивной работе за пультом машины.
Появление мультипрограммных операционных систем для
мэйнфреймов.
Следующий
важный период развития операционных систем относится к 1965-1975 годам. В
это время в технической базе вычислительных машин произошел переход от отдельных
полупроводниковых элементов типа транзисторов к интегральным микросхемам, что открыло
путь к появлению следующего поколения компьютеров. Большие функциональные возможности
интегральных схем сделали возможным реализацию на практике сложных компьютерных
архитектур, таких, например, как IBM/360 и ее ОС – OS/360. В
этот период были реализованы практически все основные механизмы, присущие современным
ОС: мультипрограммирование, мультипроцессирование, поддержка многотерминального
многопользовательского режима, виртуальная память, файловые системы, разграничение
доступа и сетевая работа. В эти годы начинается расцвет системного программирования.
Из направления прикладной математики, представляющего интерес для узкого круга
специалистов, системное программирование превращается в отрасль индустрии, оказывающую
непосредственное влияние на практическую деятельность миллионов людей. Революционным
событием данного этапа явилась промышленная реализация мультипрограммирования.
(Заметим, что в виде концепции и экспериментальных систем этот способ организации
вычислений существовал уже около десяти лет.) В условиях резко возросших возможностей
компьютера по обработке и хранению данных выполнение только одной программы
в каждый момент времени оказалось крайне неэффективным. Решением стало мультипрограммирование — способ организации вычислительного процесса, при котором в памяти
компьютера находилось одновременно несколько программ, попеременно выполняющихся
на одном процессоре. Эти усовершенствования значительно улучшили эффективность
вычислительной системы: компьютер теперь мог использоваться почти постоянно,
а не менее половины времени работы компьютера, как это было раньше. Мультипрограммирование
было реализовано в двух вариантах — в системах пакетной обработки
и разделения времени. Мультипрограммные
системы пакетной обработки так же, как и их однопрограммные предшественники,
имели своей целью обеспечение максимальной загрузки аппаратуры компьютера,
однако решали эту задачу более эффективно. В мультипрограммном пакетном режиме
процессор не простаивал, пока одна программа выполняла операцию ввода-вывода
(как это
происходило при последовательном выполнении программ в системах ранней пакетной обработки),
а переключался на другую готовую к выполнению программу. В результате достигалась
сбалансированная загрузка всех устройств компьютера, а следовательно, увеличивалось
число задач, решаемых в единицу времени. В
мультипрограммных системах пакетной обработки пользователь по-прежнему был лишен
возможности интерактивно взаимодействовать со своими программами. Для того
чтобы хотя
бы частично вернуть пользователям ощущение непосредственного взаимодействия с компьютером,
был разработан другой вариант мультипрограммных систем — системы разделения времени. Этот вариант рассчитан на многотерминалъные
системы, когда каждый пользователь
работает за своим терминалом. В числе первых операционных систем разделения времени,
разработанных в середине 60-х годов, были TSS/360 (компания IBM), CTSS и MULTICS
(Массачусетский технологический институт совместно с Bell Labs и компанией General
Electric). Вариант мультипрограммирования, применяемый в системах разделения времени,
был нацелен на создание для каждого отдельного пользователя иллюзии единоличного
владения вычислительной машиной за счет периодического выделения каждой программе
своей доли процессорного времени. В системах разделения времени эффективность использования
оборудования ниже, чем в системах пакетной обработки, что явилось платой за удобства
работы пользователя. Многотерминальный
режим использовался не только в системах разделения времени, но и
в системах пакетной обработки. При этом не только оператор, но и все
пользователи получали
возможность формировать свои задания и управлять их выполнением со своего терминала.
Такие операционные системы получили название систем
удаленного ввода заданий. Терминальные
комплексы могли располагаться на большом расстоянии от процессорных стоек, соединяясь
с ними с помощью различных глобальных связей — модемных соединений телефонных
сетей или выделенных каналов. Для поддержания удаленной работы терминалов в операционных
системах появились специальные программные модули, реализующие различные
(в то время, как правило, нестандартные) протоколы связи. Такие вычислительные системы
с удаленными терминалами, сохраняя централизованный характер обработки данных, в
какой-то степени являлись прообразом современных сетей, а соответствующее
системное программное
обеспечение — прообразом сетевых операционных систем. К
этому времени можно констатировать существенное изменение в распределении функций
между аппаратными и программными средствами компьютера. Операционные системы
становились неотъемлемыми элементами компьютеров, играя роль «продолжения» аппаратуры.
В первых вычислительных машинах программист, напрямую взаимодействуя с аппаратурой,
мог выполнить загрузку программных кодов, используя пультовые переключатели
и лампочки индикаторов, а затем вручную запустить программу на выполнение, нажав
кнопку «пуск». В компьютерах 60-х годов большую часть действий по организации вычислительного
процесса взяла на себя операционная система. (В большинстве современных компьютеров
не предусмотрено даже теоретической возможности выполнения какой-либо вычислительной
работы без участия операционной системы. После включения питания автоматически
происходит поиск, загрузка и запуск операционной системы, а в случае ее отсутствия
компьютер просто останавливается.) Реализация
мультипрограммирования потребовала внесения очень важных изменений в аппаратуру
компьютера, непосредственно направленных на поддержку нового способа организации
вычислительного процесса. При разделении ресурсов компьютера между программами
необходимо обеспечить быстрое переключение процессора с одной программы на другую,
а также надежно защитить коды и данные одной программы от непреднамеренной или преднамеренной
порчи другой программой. В процессорах появился привилегированный и пользовательский
режимы работы, специальные регистры для быстрого переключения с одной программы
на другую, средства защиты областей памяти, а также развитая система прерываний. В
привилегированном режиме, предназначенном для работы программных модулей операционной
системы, процессор мог выполнять все команды, в том числе и те из них, которые
позволяли осуществлять распределение и защиту ресурсов компьютера. Программам, работающим
в пользовательском режиме, некоторые команды процессора были недоступны. Таким
образом, только ОС могла управлять аппаратными средствами и исполнять роль монитора
и арбитра для пользовательских программ, которые выполнялись в непривилегированном,
пользовательском режиме. Система
прерываний позволяла синхронизировать работу различных устройств компьютера,
работающих параллельно и асинхронно, таких как каналы ввода-вывода, диски, принтеры
и т. п. Аппаратная поддержка
операционных систем стала с тех пор неотъемлемым свойством
практически любых компьютерных систем, включая персональные компьютеры. Еще
одной важной тенденцией этого периода является создание семейств программно-совместимых машин и операционных систем для них. Примерами семейств программно-совместимых
машин, построенных на интегральных микросхемах, являются серии машин IBM/360
и IBM/370 (аналоги этих семейств советского производства — машины серии ЕС), PDP-11
(советские аналоги — СМ-3, СМ-4, СМ-1420). Вскоре идея программно-совместимых машин
стала общепризнанной. Программная
совместимость требовала и совместимости операционных систем. Однако такая
совместимость подразумевает возможность работы на больших и на малых вычислительных
системах, с большим и с малым количеством разнообразной периферии, в коммерческой
области и в области научных исследований. Операционные системы, построенные
с намерением удовлетворить всем этим противоречивым требованиям, оказались чрезвычайно
сложными. Они состояли из многих миллионов ассемблерных строк, написанных тысячами
программистов, и содержали тысячи ошибок, вызывающих нескончаемый поток исправлений.
Операционные системы этого поколения были очень дорогими. Так, разработка OS/360,
объем кода для которой составил 8 Мбайт, стоила компании IBM 80 миллионов долларов. Однако
несмотря на необозримые размеры и множество проблем, OS/360 и другие ей подобные
операционные системы этого поколения действительно удовлетворяли большинству требований
потребителей. За это десятилетие был сделан огромный шаг вперед и заложен прочный
фундамент для создания современных операционных систем.
Операционные системы и глобальные сети.
В
начале 70-х годов появились первые сетевые
операционные системы, которые в отличие
от многотерминальных ОС позволяли не только рассредоточить пользователей, но и организовать
распределенное хранение и обработку данных между несколькими компьютерами,
связанными электрическими связями. Любая сетевая операционная система, с одной стороны,
выполняет все функции локальной операционной системы, а с другой стороны, обладает
некоторыми дополнительными средствами, позволяющими ей взаимодействовать по сети
с операционными системами других компьютеров. Программные модули, реализующие сетевые
функции, появлялись в операционных системах постепенно, по мере развития
сетевых технологий,
аппаратной базы компьютеров и возникновения новых задач, требующих сетевой обработки.
Хотя
теоретические работы по созданию концепций сетевого взаимодействия велись почти
с самого появления вычислительных машин, значимые практические результаты по объединению
компьютеров в сети были получены в конце 60-х, когда с помощью глобальных связей
и техники коммутации пакетов удалось реализовать взаимодействие машин класса мэйнфреймов
и суперкомпьютеров. Эти дорогостоящие компьютеры часто хранили уникальные
данные и программы, доступ к которым необходимо было обеспечить широкому кругу
пользователей, находившихся в различных городах на значительном расстоянии от вычислительных
центров.
В
1969 году Министерство обороны США инициировало работы по объединению суперкомпьютеров
оборонных и научно-исследовательских центров в единую сеть. Эта сеть получила
название ARPANET и явилась отправной точкой для создания самой известной ныне глобальной
сети — Интернета. Сеть ARPANET объединяла компьютеры разных типов, работавшие
под управлением различных ОС с добавленными модулями, реализующими коммуникационные
протоколы, общие для всех компьютеров сети. В
1974 году компания IBM объявила о создании собственной сетевой архитектуры для своих
мэйнфреймов, получившей название SNA (System Network Architecture). Эта многоуровневая
архитектура, во многом подобная стандартной модели OSI, появившейся несколько
позже, обеспечивала взаимодействие типа «терминал-терминал», «терминал-компьютер»
и «компьютер-компьютер» по глобальным связям. Нижние уровни архитектуры были
реализованы специализированными аппаратными средствами, наиболее важным из которых
является процессор телеобработки. Функции верхних уровней SNA выполнялись программными
модулями. Один из них составлял основу программного обеспечения процессора
телеобработки. Другие модули работали на центральном процессоре в составе стандартной
операционной системы IBM для мэйнфреймов. В
это же время в Европе велись активные работы по созданию и стандартизации сетей Х.25.
Эти сети с коммутацией пакетов не были привязаны к какой-либо конкретной операционной
системе. После получения статуса международного стандарта в 1974 году протоколы
Х.25 стали поддерживаться многими операционными системами. С 1980 года компания IBM
включила поддержку протоколов Х.25 в архитектуру SNA и в свои операционные системы.
Операционные системы мини-компьютеров и первые
локальные сети.
К
середине 70-х годов наряду с мэйнфреймами широкое распространение получили мини-компьютеры,
такие как PDP-11, Nova, HP. Мини-компьютеры первыми использовали преимущества
больших интегральных схем, позволившие реализовать достаточно мощные функции
при сравнительно невысокой стоимости компьютера. Архитектура
мини-компьютеров была значительно упрощена по сравнению с мэйнфреймами,
что нашло отражение и в их операционных системах. Многие м функции мультипрограммных
многопользовательских ОС мэйнфреймов были усечены, учитывая ограниченность
ресурсов мини-компьютеров. Операционные системы мини-компьютеров часто стали
делать специализированными, например только для управления в реальном времени
(ОС RT-11
для мини-компьютеров PDP-11) или только для поддержания режима разделения времени
(RSX-11M для тех же компьютеров). Эти операционные системы не всегда были многопользовательскими,
что во многих случаях оправдывалось невысокой стоимостью компьютеров. Важной
вехой в истории мини-компьютеров и вообще в истории операционных систем явилось
создание ОС UNIX. Первоначально эта ОС предназначалась для поддержания режима разделения
времени в мини-компьютере PDP-7. С середины 70-х годов началось массовое использование
ОС UNIX. К этому времени программный код для UNIX был на 90 % написан на языке
высокого уровня С. Широкое распространение эффективных С-компиляторов сделало UNIX
уникальной для того времени ОС, обладающей возможностью сравнительно легкого переноса
на различные типы компьютеров. Поскольку эта ОС поставлялась вместе с исходными
кодами, то она стала первой открытой ОС, которую могли совершенствовать простые пользователи-энтузиасты.
Хотя UNIX была первоначально разработана для мини-компьютеров, гибкость,
элегантность, мощные функциональные возможности и открытость позволили ей занять
прочные позиции во всех классах компьютеров: суперкомпьютерах, мэйнфреймах, мини-компьютерах,
серверах и рабочих станциях на базе RISC-процессоров, персональных компьютерах. Доступность
мини-компьютеров и вследствие этого их распространенность на предприятиях
послужили мощным стимулом для создания локальных
сетей. Предприятие могло
себе позволить иметь несколько мини-компьютеров, находящихся в одном здании или даже
в одной комнате. Естественно, возникала потребность в обмене информацией между
ними и
в совместном использовании дорогого периферийного оборудования. Первые
локальные сети строились с помощью нестандартного коммуникационного оборудования,
в простейшем случае — путем прямого соединения последовательных портов компьютеров.
Программное обеспечение также было нестандартным и реализовывалось в виде пользовательских
приложений. Первое сетевое приложение для ОС UNIX — программа UUCP (UNIX-to-UNIX
Copy program) — появилась в 1976 году и начала распространяться с версией 7 AT&T
UNIX с 1978 года. Эта программа позволяла копировать файлы с одного компьютера
на другой
в пределах локальной сети через различные аппаратные интерфейсы — RS-232,
токовую петлю
и т. п., а кроме того, могла работать через глобальные связи, например
модемные.
|