Добавлен: 29.10.2018
Просмотров: 47967
Скачиваний: 190
26
Глава 1. Введение
Рис. 1.2. Операционная система превращает уродливое аппаратное обеспечение
в красивые абстракции
предоставляемые операционной системой, но так бывает не всегда. Чтобы пояснить
это положение, рассмотрим обычный рабочий стол Windows и командную строку.
И то и другое — программы, работающие под управлением операционной системы
Windows и использующие предоставленные этой системой абстракции, но они пред-
лагают существенно отличающиеся друг от друга пользовательские интерфейсы. Точно
так же пользователи Linux, работающие в Gnome или KDE, видят совершенно иной
интерфейс, чем пользователи Linux, работающие в X Window System, но положенные
в основу абстракции операционной системы в обоих случаях одни и те же.
В данной книге мы подробнейшим образом изучим те абстракции, которые предостав-
ляются прикладным программам, но не станем слишком углубляться в пользователь-
ские интерфейсы. Это весьма объемная и важная тема, но с операционными системами
она связана слабо.
1.1.2. Операционная система в качестве
менеджера ресурсов
Представление о том, что операционная система главным образом предоставляет аб-
стракции для прикладных программ, — это взгляд сверху вниз. Сторонники альтерна-
тивного взгляда, снизу вверх, придерживаются того мнения, что операционная система
существует для управления всеми частями сложной системы. Современные компьютеры
состоят из процессоров, памяти, таймеров, дисков, мышей, сетевых интерфейсов, принте-
ров и широкого спектра других устройств. Сторонники взгляда снизу вверх считают, что
задача операционной системы заключается в обеспечении упорядоченного и управляе-
мого распределения процессоров, памяти и устройств ввода-вывода между различными
программами, претендующими на их использование.
Современные операционные системы допускают одновременную работу нескольких
программ. Представьте себе, что будет, если все три программы, работающие на одном
и том же компьютере, попытаются распечатать свои выходные данные одновременно
на одном и том же принтере. Первые несколько строчек распечатки могут быть от
программы № 1, следующие несколько строчек — от программы № 2, затем несколько
строчек от программы № 3 и т. д. В результате получится полный хаос. Операционная
система призвана навести порядок в потенциально возможном хаосе за счет буфери-
1.2. История операционных систем
27
зации на диске всех выходных данных, предназначенных для принтера. После того как
одна программа закончит свою работу, операционная система сможет скопировать ее
выходные данные с файла на диске, где они были сохранены, на принтер, а в то же самое
время другая программа может продолжить генерацию данных, не замечая того, что
выходные данные фактически (до поры до времени) не попадают на принтер.
Когда с компьютером (или с сетью) работают несколько пользователей, потребности
в управлении и защите памяти, устройств ввода-вывода и других ресурсов значительно
возрастают, поскольку иначе пользователи будут мешать друг другу работать. Кроме
этого, пользователям часто требуется совместно использовать не только аппаратное
обеспечение, но и информацию (файлы, базы данных и т. п.). Короче говоря, сторонни-
ки этого взгляда на операционную систему считают, что ее первичной задачей является
отслеживание того, какой программой какой ресурс используется, чтобы удовлетворять
запросы на использование ресурсов, нести ответственность за их использование и при-
нимать решения по конфликтующим запросам от различных программ и пользователей.
Управление ресурсами включает в себя мультиплексирование (распределение) ре-
сурсов двумя различными способами: во времени и в пространстве. Когда ресурс
разделяется во времени, различные программы или пользователи используют его по
очереди: сначала ресурс получают в пользование одни, потом другие и т. д. К примеру,
располагая лишь одним центральным процессором и несколькими программами, стре-
мящимися на нем выполняться, операционная система сначала выделяет центральный
процессор одной программе, затем, после того как она уже достаточно поработала,
центральный процессор получает в свое распоряжение другая программа, затем еще
одна программа, и, наконец, его опять получает в свое распоряжение первая програм-
ма. Определение того, как именно ресурс будет разделяться во времени — кто будет
следующим потребителем и как долго, — это задача операционной системы. Другим
примером мультиплексирования во времени может послужить совместное использова-
ние принтера. Когда в очереди для распечатки на одном принтере находятся несколько
заданий на печать, нужно принять решение, какое из них будет выполнено следующим.
Другим видом разделения ресурсов является пространственное разделение. Вместо
поочередной работы каждый клиент получает какую-то часть разделяемого ресурса.
Например, оперативная память обычно делится среди нескольких работающих про-
грамм, так что все они одновременно могут постоянно находиться в памяти (например,
используя центральный процессор по очереди). При условии, что памяти достаточно
для хранения более чем одной программы, эффективнее разместить в памяти сразу
несколько программ, чем выделять всю память одной программе, особенно если ей
нужна лишь небольшая часть от общего пространства. Разумеется, при этом возникают
проблемы равной доступности, обеспечения безопасности и т. д., и их должна решать
операционная система. Другим ресурсом с разделяемым пространством является жест-
кий диск. На многих системах на одном и том же диске могут одновременно храниться
файлы, принадлежащие многим пользователям. Распределение дискового пространства
и отслеживание того, кто какие дисковые блоки использует, — это типичная задача
операционной системы по управлению ресурсами.
1.2. История операционных систем
История развития операционных систем насчитывает уже много лет. В следующих
разделах книги мы кратко рассмотрим некоторые основные моменты этого развития.
28
Глава 1. Введение
Так как операционные системы появились и развивались в процессе конструирования
компьютеров, эти события исторически тесно связаны. Поэтому чтобы представить,
как выглядели операционные системы, мы рассмотрим несколько следующих друг за
другом поколений компьютеров. Такая схема взаимосвязи поколений операционных
систем и компьютеров носит довольно приблизительный характер, но она обеспечивает
некоторую структуру, без которой невозможно было бы что-то понять.
Первый настоящий цифровой компьютер был изобретен английским математиком
Чарльзом Бэббиджем (Charles Babbage, 1792–1871). Хотя большую часть жизни Бэб-
бидж посвятил созданию своей аналитической машины, он так и не смог заставить ее
работать должным образом. Это была чисто механическая машина, а технологии того
времени не были достаточно развиты для изготовления многих деталей и механизмов
высокой точности. Не стоит и говорить, что его аналитическая машина не имела опе-
рационной системы.
Интересный исторический факт: Бэббидж понимал, что для аналитической машины
ему необходимо программное обеспечение, поэтому он нанял молодую женщину по
имени Ада Лавлейс (Ada Lovelace), дочь знаменитого британского поэта Джорджа
Байрона. Она и стала первым в мире программистом, а язык программирования Ada
®
был назван именно в ее честь.
1.2.1. Первое поколение (1945–1955): электронные лампы
После безуспешных усилий Бэббиджа прогресс в конструировании цифровых ком-
пьютеров практически не наблюдался вплоть до Второй мировой войны, которая сти-
мулировала взрывную активизацию работ над ними. Профессор Джон Атанасов (John
Atanasoff) и его аспирант Клиффорд Берри (Clifford Berry) создали в университете
штата Айовы конструкцию, которая сейчас считается первым действующим цифро-
вым компьютером. В ней использовалось 300 электронных ламп. Примерно в то же
время Конрад Цузе (Konrad Zuse) в Берлине построил Z3 — компьютер, основанный
на использовании электромеханических реле. В 1944 году группой ученых (включая
Алана Тьюринга) в Блетшли Парк (Великобритания) был построен и запрограмми-
рован «Колоссус», в Гарварде Говардом Айкеном (Howard Aiken) построен «Марк I»,
а в университете штата Пеннсильвания Вильям Мочли (William Mauchley) и его аспи-
рант Джон Преспер Эккерт (J. Presper Eckert) построили «Эниак». Некоторые из этих
машин были цифровыми, в других использовались электронные лампы, а работу части
из них можно было программировать, но все они были весьма примитивно устроены
и тратили многие секунды на производство даже простейших вычислений.
На заре компьютерной эры каждую машину проектировала, создавала, программиро-
вала, эксплуатировала и обслуживала одна и та же группа людей (как правило, инже-
неров). Все программирование велось исключительно на машинном языке или, и того
хуже, за счет сборки электрических схем, а для управления основными функциями ма-
шины приходилось подключать к коммутационным панелям тысячи проводов. О язы-
ках программирования (даже об ассемблере) тогда еще ничего не было известно. Об
операционных системах вообще никто ничего не слышал. Режим работы программиста
заключался в том, чтобы записаться на определенное машинное время на специальном
стенде, затем спуститься в машинный зал, вставить свою коммутационную панель
в компьютер и провести следующие несколько часов в надежде, что в процессе работы
не выйдет из строя ни одна из примерно 20 тысяч электронных ламп. В сущности, все
1.2. История операционных систем
29
решаемые задачи сводились к простым математическим и числовым расчетам, таким
как уточнение таблиц синусов, косинусов и логарифмов или вычисление траекторий
полета артиллерийских снарядов.
Когда в начале 1950-х годов появились перфокарты, положение несколько улучшилось.
Появилась возможность вместо использования коммутационных панелей записывать
программы на картах и считывать с них, но в остальном процедура работы не претер-
пела изменений.
1.2.2. Второе поколение (1955–1965):
транзисторы и системы пакетной обработки
В середине 1950-х годов изобретение и применение транзисторов радикально изменило
всю картину. Компьютеры стали достаточно надежными, появилась высокая вероят-
ность того, что машины будут работать довольно долго, выполняя при этом полезные
функции. Впервые сложилось четкое разделение между проектировщиками, сборщи-
ками, операторами, программистами и обслуживающим персоналом.
Машины, называемые теперь мэйнфреймами, располагались в специальных больших
залах с кондиционированием воздуха, где ими управлял целый штат профессиональ-
ных операторов. Только большие корпорации, правительственные учреждения или
университеты могли позволить себе технику, цена которой исчислялась миллионами
долларов. Чтобы выполнить задание (то есть программу или комплект программ),
программист сначала должен был записать его на бумаге (на Фортране или ассембле-
ре), а затем перенести на перфокарты. После этого он должен был принести колоду
перфокарт в комнату ввода данных, передать одному из операторов и идти пить кофе
в ожидании, когда будет готов результат.
Когда компьютер заканчивал выполнение какого-либо из текущих заданий, оператор
подходил к принтеру, отрывал лист с полученными данными и относил его в комнату
для распечаток, где программист позже мог его забрать. Затем оператор брал одну из
колод перфокарт, принесенных из комнаты ввода данных, и запускал ее на считывание.
Если в процессе расчетов был необходим компилятор языка Фортран, то оператору
приходилось брать его из картотечного шкафа и загружать в машину отдельно. На одно
только хождение операторов по машинному залу терялась впустую масса драгоценного
компьютерного времени.
Если учесть высокую стоимость оборудования, неудивительно, что люди довольно ско-
ро занялись поиском способа повышения эффективности использования машинного
времени. Общепринятым решением стала система пакетной обработки. Первоначаль-
но замысел состоял в том, чтобы собрать полный поднос заданий (колод перфокарт)
в комнате входных данных и затем переписать их на магнитную ленту, используя не-
большой и (относительно) недорогой компьютер, например IBM 1401, который был
очень хорош для считывания карт, копирования лент и печати выходных данных, но
не подходил для числовых вычислений.
Другие, более дорогостоящие машины, такие как IBM 7094, использовались для на-
стоящих вычислений. Этот процесс изображен на рис. 1.3.
Примерно после часа сбора пакета карты считывались на магнитную ленту, которую
относили в машинный зал, где устанавливали на лентопротяжном устройстве. Затем
30
Глава 1. Введение
Рис. 1.3. Ранняя система пакетной обработки: а — программист приносит карты для IBM 1401;
б — IBM 1401 записывает пакет заданий на магнитную ленту; в — оператор переносит входные
данные на ленте к IBM 7094; г — IBM 7094 выполняет вычисления; д — оператор переносит ленту
с выходными данными на IBM 1401; е — IBM 1401 печатает выходные данные
оператор загружал специальную программу (прообраз сегодняшней операционной
системы), которая считывала первое задание с ленты и запускала его. Выходные
данные, вместо того чтобы идти на печать, записывались на вторую ленту. Завершив
очередное задание, операционная система автоматически считывала с ленты следую-
щее и начинала его обработку. После обработки всего пакета оператор снимал ленты
с входной и выходной информацией, ставил новую ленту со следующим заданием,
а готовые данные помещал на IBM 1401 для печати в автономном режиме (то есть без
связи с главным компьютером). Структура типичного входного задания показана на
рис. 1.4. Оно начиналось с карты $JOB, на которой указывались максимальное время
выполнения задания в минутах, загружаемый учетный номер и имя программиста. За-
тем поступала карта $FORTRAN, дающая операционной системе указание загрузить
Рис. 1.4. Структура типичного задания для операционной системы FMS