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

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

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

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

Добавлен: 29.10.2018

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

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

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

Об авторах   

21

(Institute of Electrical and Electronics Engineers — IEEE), Королевской Нидерландской 
академии искусства и наук. Он удостоен многочисленных научных наград от ACM, 
IEEE и USENIX. У него имеются две почетные докторские степени. Если вы заинте-
ресовались ученым, зайдите на страницу о нем в «Википедии».

Херберт Бос

 получил степень магистра в университете Твенте, а степень доктора 

философии — в компьютерной лаборатории Кембриджского университета (Велико-
британия). С тех пор он упорно работал над созданием надежных и эффективных 
архитектур ввода-вывода для операционной системы Linux и проводил исследования 
систем, основанных на MINIX 3. В настоящее время является профессором кафедры 
компьютерных наук университета Врийе (Vrije) в Амстердаме (Нидерланды) и зани-
мается вопросами безопасности систем и сетей. Со своими студентами он работает над 
новыми способами обнаружения и прекращения атак, анализа и расшифровки устрой-
ства вредоносных программ, а также фиксации ботов (вредоносных инфраструктур, 
которыми могут быть охвачены миллионы компьютеров). В 2011 году под свои иссле-
дования по расшифровке устройства вредоносных программ он получил начальный 
грант Европейского совета по научным исследованиям (ERC Starting Grant). Трое из 
его студентов получили премию имени Роджера Нидхэма (Roger Needham Award) за 
лучшие кандидатские диссертации по системам.


background image

Гл а в а   1

.

 

Введение

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

, в чью задачу входит управление пользовательскими программами, а также 

всеми ранее упомянутыми ресурсами. Именно такие системы и являются предметом 
рассмотрения данной книги.

Большинство читателей уже имеют некоторый опыт работы с такими операционными 
системами, как Windows, Linux, FreeBSD или Max OS X, но их внешний облик может 
быть разным. Программы, с которыми взаимодействуют пользователи, обычно назы-
ваемые оболочкой, когда они основаны на применении текста, и графическим пользо-
вательским интерфейсом

 (Graphical User Interface (GUI)), когда в них используются 

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

Схематично основные рассматриваемые здесь компоненты представлены на рис. 1.1. 
В нижней части рисунка показано аппаратное обеспечение. Оно состоит из микросхем, 
плат, дисков, клавиатуры, монитора и других физических объектов. Над аппаратным 
обеспечением находится программное обеспечение. Большинство компьютеров имеют 
два режима работы: режим ядра и режим пользователя. Операционная система — наи-
более фундаментальная часть программного обеспечения, работающая в режиме ядра 
(этот режим называют еще режимом супервизора). В этом режиме она имеет полный 
доступ ко всему аппаратному обеспечению и может задействовать любую инструкцию, 
которую машина в состоянии выполнить. Вся остальная часть программного обеспечения 
работает в режиме пользователя, в котором доступно лишь подмножество инструкций 
машины. В частности, программам, работающим в режиме пользователя, запрещено 
использование инструкций, управляющих машиной или осуществляющих операции 
ввода-вывода (Input/Output — I/O). К различиям между режимами ядра и пользователя 
мы еще не раз вернемся на страницах этой книги. Эти различия оказывают решающее 
влияние на порядок работы операционной системы.

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


background image

Введение  

23

Рис. 1.1. Место операционной системы в структуре программного обеспечения

Местонахождение операционной системы показано на рис. 1.1. Она работает непо-
средственно с аппаратным обеспечением и является основой остального программного 
обеспечения.

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

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

Операционные системы отличаются от пользовательских программ (то есть при-
ложений) не только местоположением. Их особенности — довольно большой объем, 
сложная структура и длительные сроки использования. Исходный код основы опе-
рационной системы типа Linux или Windows занимает порядка 5 млн строк. Чтобы 
представить себе этот объем, давайте мысленно распечатаем 5 млн строк в книжном 
формате по 50 строк на странице и по 1000 страниц в каждом томе (что больше этой 
книги). Чтобы распечатать такое количество кода, понадобится 100 томов, а это прак-
тически целая книжная полка. Можете себе представить, что вы получили задание 


background image

24  

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

по поддержке операционной системы и в первый же день ваш начальник подвел вас 
к книжной полке и сказал: «Вот это все нужно выучить». И это касается только той 
части, которая работает в режиме ядра. При включении необходимых общих библиотек 
объем Windows превышает 70 млн строк кода (напечатанные на бумаге, они займут 
10–20 книжных полок), и это не считая основных прикладных программ (таких, как 
Windows Explorer, Windows Media Player и т. д.).

Теперь понятно, почему операционные системы живут так долго, — их очень трудно 
создавать, и, написав одну такую систему, владелец не испытывает желания ее выбро-
сить и приступить к созданию новой. Поэтому операционные системы развиваются 
в течение долгого периода времени. Семейство Windows 95/98/Me по своей сути 
представляло одну операционную систему, а семейство Windows NT/2000/XP/Vista/ 
Windows 7 — другую. Для пользователя они были похожи друг на друга, поскольку 
Microsoft позаботилась о том, чтобы пользовательский интерфейс Windows 2000/XP/
Vista/Windows 7 был очень похож на ту систему, которой он шел на замену, а чаще всего 
это была Windows 98. Тем не менее у Microsoft были довольно веские причины, чтобы 
избавиться от Windows 98, и мы еще вернемся к их рассмотрению, когда в главе 11 
приступим к подробному изучению системы Windows.

Другим примером, который используется во всей книге, будет операционная система 
UNIX, ее варианты и клоны. Она также развивалась в течение многих лет, существуя 
в таких базирующихся на исходной системе версиях, как System V, Solaris и FreeBSD. 
А вот Linux имеет новую программную основу, хотя ее модель весьма близка к UNIX 
и она обладает высокой степенью совместимости с этой системой. Примеры, касаю-
щиеся UNIX, будут использоваться во всей книге, а Linux подробно рассматривается 
в главе 10.

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

1.1. Что такое операционная система?

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

1.1.1. Операционная система как расширенная машина

Архитектура

 большинства компьютеров (система команд, организация памяти, ввод-

вывод данных и структура шин) на уровне машинного языка слишком примитивна 
и неудобна для использования в программах, особенно это касается систем ввода-вы-
вода. Чтобы перевести разговор в конкретное русло, рассмотрим современные жест-


background image

1.1. Что такое операционная система?   

25

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

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

Эта абстракция является ключом к управлению сложностью. Хорошая абстракция 
превращает практически неподъемную задачу в две, решить которые вполне по силам. 
Первая из этих задач состоит в определении и реализации абстракций, а вторая — в ис-
пользовании этих абстракций для решения текущей проблемы. Одна из абстракций, 
понятная практически любому пользователю компьютера, — это уже упомянутый 
ранее файл. Он представляет собой полезный объем информации, скажем, цифровую 
фотографию, сохраненное сообщение электронной почты или веб-страницу. Работать 
с фотографиями, сообщениями электронной почты и веб-страницами намного легче, 
чем с особенностями SATA-дисков (или других дисковых устройств). Задача опера-
ционной системы заключается в создании хорошей абстракции, а затем в реализации 
абстрактных объектов, создаваемых в рамках этой абстракции, и управлении ими. 
В этой книге абстракциям будет уделено весьма большое внимание, поскольку они 
являются одним из ключей к пониманию операционных систем.

Учитывая важность этого положения, стоит изложить его несколько другими слова-
ми. При всем уважении к разработчикам Macintosh, следует заметить, что аппаратное 
обеспечение не отличается особым изяществом. Реально существующие процессоры, 
блоки памяти, диски и другие компоненты представляют собой слишком сложные 
устройства, предоставляющие трудные, неудобные, не похожие друг на друга и не обла-
дающие постоянством интерфейсы для тех людей, которым приходится создавать для 
них программное обеспечение. Иногда такая ситуация объясняется необходимостью 
поддержки обратной совместимости, а иногда она связана со стремлением к экономии 
средств, но порой разработчики аппаратного обеспечения просто не понимают (или 
не хотят понимать), как много проблем они создают для разработчиков программного 
обеспечения. Одна из главных задач операционной системы — скрыть аппаратное обе-
спечение и существующие программы (и их разработчиков) под создаваемыми взамен 
них и приспособленными для нормальной работы красивыми, элегантными, неизмен-
ными абстракциями. Операционные системы превращают уродство в красоту (рис. 1.2).

Следует отметить, что реальными «заказчиками» операционных систем являются 
прикладные программы (разумеется, не без помощи прикладных программистов). 
Именно они непосредственно работают с операционной системой и ее абстракциями. 
А конечные пользователи работают с абстракциями, предоставленными пользователь-
ским интерфейсом, — это или командная строка оболочки, или графический интерфейс.  
Абстракции пользовательского интерфейса могут быть похожими на абстракции,