Файл: Debian Таненбаум Бос.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Операционные системы

Добавлен: 29.10.2018

Просмотров: 47987

Скачиваний: 190

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

1.5. Понятия операционной системы   

71

включая 

sh

csh

ksh

 и 

bash

. Все они поддерживают рассматриваемые далее функции, 

происходящие из исходной оболочки (

sh

).

Оболочка запускается после входа в систему любого пользователя. В качестве стан-
дартного устройства ввода и вывода оболочка использует терминал

1

. Свою работу она 

начинает с вывода приглашения — знака доллара, сообщающего пользователю, что 
оболочка ожидает приема команды. Например, если теперь пользователь наберет на 
клавиатуре

date

оболочка создаст дочерний процесс и запустит дочернюю программу 

date

. Пока вы-

полняется дочерний процесс, оболочка ожидает его завершения. После завершения 
дочернего процесса оболочка снова выведет приглашение и попытается прочитать 
следующую введенную строку.

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

date >file

Точно так же может быть перенаправлен и стандартный ввод

sort <file1 >file2

Эта команда вызывает программу сортировки 

sort

, входные данные для которой берут-

ся из файла 

file1

, а выходные данные отправляются в файл 

file2

.

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

cat file1 file2 file3 | sort >/dev/lp

вызывает программу 

cat

 для объединения трех файлов и отправки выходных данных 

программе 

sort

, чтобы она расставила все строки в алфавитном порядке. Выходные 

данные программы 

sort

 перенаправляются в файл 

/dev/lp

, которым обычно обознача-

ется принтер.

Если пользователь после команды введет знак 

&

, оболочка не станет ожидать ее за-

вершения, а сразу же выведет приглашение. Следовательно, команда

cat file1 file2 file3 | sort >/dev/lp &

приступит к сортировке как к фоновому заданию, позволяя пользователю во время 
сортировки продолжить обычную работу. Оболочка имеет и ряд других интересных 
свойств, рассмотреть которые нам не позволяет объем книги. Но в большинстве книг 
по UNIX оболочка рассматривается довольно подробно (например, Kernighan and Pike, 
1984; Kochan Quigley, 2004; Robbins, 2005).

В наши дни на большинстве персональных компьютеров используется графический 
пользовательский интерфейс. По сути, графический пользовательский интерфейс — это 
просто программа (или совокупность программ), работающая поверх операционной 
системы наподобие оболочки. В системах Linux этот факт проявляется явным образом, 
поскольку у пользователя есть выбор по крайней мере из двух сред, реализующих графи-
ческий пользовательский интерфейс: Gnome и KDE. Или он может вообще не выбрать ни 
одну из них, воспользовавшись окном терминала из X11. В Windows также есть возмож-

1

 В настоящее время, как правило, монитор с клавиатурой. — Примеч. ред.


background image

72  

 Глава 1. Введение 

ность заменить стандартный менеджер рабочего стола (Windows Explorer) какой-нибудь 
другой программой путем внесения изменений в некоторые значения реестра, хотя этой 
возможностью практически никто не пользуется.

1.5.7. Онтогенез повторяет филогенез

После того как была опубликована книга Чарльза Дарвина «Происхождение видов», 
немецкий зоолог Эрнст Хэккель (Ernst Haeckel) сформулировал правило: «Онтогенез 
повторяет филогенез». Сказав это, он имел в виду, что развитие зародыша (онтогенез) 
повторяет эволюцию видов (филогенез). Другими словами, человеческая яйцеклетка 
с момента оплодотворения до того, как стать ребенком, проходит через состояния 
рыбы, свиньи и т. д. Современные биологи считают такую модель очень сильно и грубо 
упрощенной, но все же доля истины в ней есть.

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

Довольно часто технологические изменения приводят к тому, что какая-то идея уста-
ревает и быстро выходит из употребления. Но другие технологические изменения спо-
собны вернуть ее к жизни. Это особенно характерно для тех случаев, когда изменения 
касаются относительной производительности различных компонентов системы. На-
пример, когда быстродействие центрального процессора значительно превышает ско-
рость работы памяти, становится актуальным использование кэш-памяти, чтобы уско-
рить работу «медленной» памяти. Если в один прекрасный момент новая технология 
памяти сделает ее намного быстрее центральных процессоров, кэш-память исчезнет. 
А если новая технология производства процессоров позволит им в очередной раз стать 
быстрее памяти, то кэш-память появится снова. В биологии виды исчезают навсегда, 
но в компьютерном мире иногда что-нибудь исчезает всего лишь на несколько лет.

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

Чтобы пояснить эту мысль, давайте рассмотрим простой пример. Первые компьютеры 
имели аппаратно-реализованные наборы команд. Команды выполнялись непосред-
ственно аппаратурой и не могли быть изменены. Затем настали времена микропро-
граммирования (впервые нашедшего широкое применение на машинах IBM 360), 


background image

1.5. Понятия операционной системы   

73

в котором интерпретатор переносил аппаратные команды в программное обеспечение. 
Выполнение аппаратных команд стало устаревшей, недостаточно гибкой техноло-
гией. Когда были изобретены RISC-компьютеры, микропрограммирование (то есть 
интерпретируемое выполнение) устарело, поскольку непосредственное выполнение 
работало гораздо быстрее. А теперь мы наблюдаем возрождение интерпретации в виде 
Java-апплетов, посылаемых по Интернету и интерпретируемых по прибытии. Скорость 
выполнения не всегда является решающим аргументом при развитии тенденции к до-
минированию сетевых задержек. Мы видим, что маятник уже несколько раз качался 
между непосредственным выполнением и интерпретацией, и он может продолжить 
свои колебания в будущем.

Давайте рассмотрим историю некоторых разработок в области аппаратного обеспече-
ния и их неоднократное влияние на программное обеспечение.

Большие объемы памяти

У первых универсальных машин был ограниченный объем памяти. В полной кон-
фигурации машины IBM 7090 или 7094, доминировавшие на рынке с конца 1959 до 
1964 года, имели память объемом всего лишь 128 Кбайт. Разработка программ для них 
велась в основном на ассемблере, и операционная система также была написана на 
ассемблере, чтобы сэкономить драгоценную по тем временам память.

Со временем компиляторы для таких языков, как FORTRAN и COBOL, стали настоль-
ко качественными, что ассемблер был объявлен умершим. Но когда были выпущены 
первые коммерческие мини-компьютеры (PDP-1), их память состояла всего лишь из 
4096 18-разрядных слов, и ассемблер неожиданно вернулся к жизни. Постепенно ми-
ни-компьютеры приобретали все большие объемы памяти, и языки высокого уровня 
стали превалировать над ассемблером.

Когда в начале 1980-х годов появились микрокомпьютеры, первые образцы имели па-
мять объемом 4 Кбайт, и ассемблер снова воскрес. Во встроенных компьютерах часто 
использовались те же микропроцессоры, что и в микрокомпьютерах (8080, Z80, а позже 
и 8086), и поначалу программирование для них также велось на ассемблере. Теперь их 
потомки, персональные компьютеры, имеют большие объемы памяти, и программиро-
вание для них ведется на C, C++, Java и других языках высокого уровня. Смарт-карты 
проходят тот же путь развития, хотя, несмотря на заданный размер, они часто содер-
жат интерпретатор Java и выполняют Java-программы в режиме интерпретации, а не 
пользуются программами на Java, откомпилированными под свой машинный язык.

Аппаратные средства защиты

На ранних универсальных машинах вроде IBM 7090/7094 аппаратные средства за-
щиты отсутствовали, поэтому в процессе работы эти машины могли выполнять лишь 
одну программу, которая при наличии ошибок могла затереть операционную систему 
и вывести из строя всю машину. С появлением IBM 360 стали доступны примитивные 
формы аппаратных средств защиты, поэтому данные машины могли содержать в па-
мяти несколько программ одновременно, позволяя им работать по очереди (в режиме 
многозадачности). Однозадачная работа была объявлена устаревшей. Но лишь до тех 
пор, пока не появились первые мини-компьютеры, не имевшие аппаратных средств 
защиты, на которых реализация многозадачности не представлялась возможной. Хотя 


background image

74  

 Глава 1. Введение 

на PDP-1 и PDP-8 не имелось аппаратной защиты, со временем она появилась на PDP-
11, и это обстоятельство привело к работе в многозадачном режиме и в конечном счете 
к появлению UNIX.

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

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

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

Во всех случаях развитие программного обеспечения было продиктовано технологи-
ческими возможностями. Например, первые микрокомпьютеры имели что-то около 
4 Кбайт оперативной памяти и не имели аппаратных средств защиты. Языки высоко-
го уровня и многозадачность были не под силу столь скромным системам. В процессе 
развития микрокомпьютеры превратились в современные персональные компьютеры 
и приобрели все аппаратное, а затем и программное обеспечение, чтобы справляться 
с более серьезными функциональными задачами. Похоже, что это развитие будет 
продолжаться еще долгие годы. Это колесо реинкарнации может коснуться и других 
областей, но, кажется, в компьютерной индустрии оно вращается намного быстрее, 
чем где-либо еще.

Диски

Ранние универсальные машины работали в основном с использованием магнитных 
лент. Они могли читать программу с ленты, компилировать ее, затем запускать на 
выполнение и записывать результаты на другую ленту. Тогда не было никаких дис-
ков и никакого понятия о файловой системе. Ситуация начала изменяться, когда 
IBM в 1956 году представила первый жесткий диск — RAMAC (RAndoM Access, что 
означало диск с произвольным доступом). Он занимал около 4 м

2

 площади и мог 

хранить 5 млн 7-разрядных символов, чего хватило бы для одной цифровой фото-
графии среднего разрешения. Однако годовая арендная плата в 35 тыс. долларов за 


background image

1.6. Системные вызовы   

75

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

Типичным представителем этого нового витка развития был компьютер CDC 6600, 
представленный в 1964 году, который в течение многих лет оставался самым быстрым 
компьютером в мире. Пользователи могли создавать так называемые постоянные 
файлы, давая им имена в надежде, что никакой другой пользователь не решит, что, 
скажем, имя «data» является вполне подходящим для его файла. В них использовался 
одноуровневый каталог. Со временем для универсальных машин были разработаны 
сложные иерархические файловые системы, кульминацией которых, наверное, стала 
файловая система MULTICS.

Когда стали использоваться мини-компьютеры, то со временем они также обзавелись 
жесткими дисками. Стандартным для PDP-11 на момент его представления в 1970 году 
был диск RK05 емкостью 2,5 Мбайт, что составляло примерно половину емкости 
диска IBM RAMAC, но он был всего 40 см в диаметре и 5 см высотой. Поначалу он 
также имел всего один каталог. Когда пришло время микрокомпьютеров, то сначала 
доминирующей операционной системой была CP/M, и она тоже поддерживала только 
один каталог на гибком диске.

Виртуальная память

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

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

1.6. Системные вызовы

Мы выяснили, что операционные системы выполняют две основные функции: предо-
ставляют абстракции пользовательским программам и управляют ресурсами компью-
тера. В основном взаимодействие пользовательских программ и операционной системы 
касается первой функции — взять, к примеру, операции с файлами: создание, запись,