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

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

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

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

Добавлен: 29.10.2018

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

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

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

10.1. История UNIX и Linux   

791

связанной с дополнительными переключениями из режима пользователя в режим ядра. 
Однако производительность — это еще не все. На всех современных системах UNIX 
оконная система X Windows работает в режиме пользователя, в результате чего произ-
водительность несколько снижается, зато достигается большая модульность (в отличие 
от системы Windows, у которой весь графический интерфейс пользователя расположен 
в ядре). Среди других хорошо известных примеров микроядер того времени можно на-
звать Mach (Accetta et al., 1986) и Chorus (Rozier et al., 1988).

Уже через несколько месяцев после своего появления система MINIX стала чем-то вро-
де объекта культа — со своей группой новостей 

comp.os.minix

 и более чем 40 000 поль-

зователей. Очень многие пользователи стали сами писать команды и пользовательские 
программы, так что система MINIX быстро стала продуктом коллективного творчества 
большого количества пользователей по всему Интернету, послужив прототипом для 
других коллективных проектов, появившихся позднее. В 1997 году была выпущена вер-
сия 2.0 системы MINIX. Теперь базовая система включала в себя сетевое программное 
обеспечение, и ее размер вырос до 62 200 строк.

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

Кроме того, на MINIX 3.0 было перенесено более 650 популярных программ для UNIX, 
в том числе и оконная система X Window System (иногда называемая просто Х), раз-
личные компиляторы (в том числе gcc), текстовые процессоры, сетевое программное 
обеспечение, веб-браузеры и многое другое. В отличие от предыдущих версий (которые 
были в основном учебными), начиная с версии MINIX 3.0 система стала вполне при-
годной для использования (акцент сделан на высокую надежность). Конечная цель 
такова: никаких кнопок сброса (No more reset buttons).

Вышло третье издание книги «Operating Systems: Design and Implementation», описы-
вающее новую систему и приводящее в приложении ее исходные коды с подробным 
описанием (Tanenbaum and Woodhull, 2006). Система продолжает развиваться и имеет 
активное сообщество пользователей. Впоследствии она была портирована на процес-
сор ARM и сделалась доступной для встраиваемых систем. Чтобы бесплатно получить 
текущую версию, вы можете посетить сайт 

www.minix3.org

.

10.1.7. Linux

В ранние  годы разработки системы MINIX и обсуждения этой системы в Интернете 
многие люди просили (а часто требовали) все больше новых и более сложных функций, 
и на эти просьбы автор часто отвечал отказом (чтобы сохранить небольшой размер 
системы, которую студенты могли бы полностью освоить за один семестр). Эти по-
стоянные отказы раздражали многих пользователей. В те времена бесплатной системы 
FreeBSD еще не было. Наконец, через несколько лет финский студент Линус Торвальдс 
(Linus Torvalds) решил сам написать еще один клон системы UNIX, который он назвал 


background image

792  

 Глава 10. Изучение конкретных примеров: Unix, Linux и Android 

Linux 

. Это должна была быть полноценная производственная система, со многими 

изначально отсутствовавшими в системе MINIX функциями. Первая версия 0.01 опе-
рационной системы Linux была выпущена в 1991 году. Она была разработана и собрана 
на компьютере под управлением MINIX и заимствовала из системы MINIX множе-
ство идей, начиная со структуры дерева исходных кодов и заканчивая компоновкой 
файловой системы. Однако в отличие от микроядерной системы MINIX, Linux была 
монолитной системой, то есть вся операционная система размещалась в ядре. Размер 
исходного текста составил 9300 строк на языке C и 950 строк на ассемблере, что при-
близительно совпадало с версией MINIX как по размеру, так и по функциональности. 
Фактически это была переделка системы MINIX — единственной системы, исходный 
код которой имелся у Торвальдса.

Операционная система Linux быстро росла в размерах и впоследствии развилась 
в полноценный клон UNIX с виртуальной памятью, более сложной файловой системой 
и многими другими дополнительными функциями. Хотя изначально система Linux 
работала только на процессоре Intel 386 (и даже имела встроенный ассемблерный код 
386-го процессора в процедурах на языке C), она была быстро перенесена на другие 
платформы и теперь работает на широком спектре машин — так же, как и UNIX. Следу-
ет выделить одно отличие системы Linux от UNIX: она использует многие специальные 
возможности компилятора gcc, поэтому потребуется приложить немало усилий, чтобы 
откомпилировать ее стандартным ANSI C-компилятором. Теперь недальновидная идея 
о том, что gcc является невиданным доселе компилятором, превратилась в настоящую 
проблему, поскольку благодаря гибкости и качеству своего кода стремительно набирает 
популярность компилятор с открытым кодом LLVM, разработанный в университете 
Иллинойса. Так как LLVM не поддерживает все нестандартные расширения языка C, 
он не может компилировать ядро Linux без многочисленных поправок к ядру, предна-
значенных для замены кода, не отвечающего стандарту ANSI.

Следующим основным выпуском системы Linux была версия 1.0, появившаяся 
в 1994 году. Она состояла примерно из 165 000 строк кода и включала новую файло-
вую систему, отображение файлов на адресное пространство памяти и совместимое 
с BSD сетевое программное обеспечение с сокетами и TCP/IP . Она также включала 
многие новые драйверы устройств. В течение следующих двух лет выходили версии 
с незначительными исправлениями.

К этому времени операционная система Linux стала достаточно совместимой с UNIX, 
поэтому на нее было перенесено большое количество программного обеспечения для 
UNIX, что значительно увеличило ее полезность. Кроме того, операционная система 
Linux привлекла большое количество людей, которые начали работу над ее кодом 
и расширением (под общим руководством Торвальдса).

Следующий главный выпуск, версия 2.0, вышел в свет в 1996 году. Эта версия состояла 
примерно из 470 000 строк на языке C и 8000 строк ассемблерного кода. Она включала 
в себя поддержку 64-разрядной архитектуры, симметричной многозадачности, новых 
сетевых протоколов и прочих многочисленных функций. Значительную часть общей 
массы исходного кода составляла обширная коллекция драйверов устройств для по-
стоянно растущего количества поддерживаемых периферийных устройств. Следом за 
этой версией довольно часто выходили дополнительные выпуски.

Номер версии ядра Linux состоит из четырех чисел: A.B.C.D (например, 2.6.9.11). 
Первое число обозначает версию ядра. Второе число обозначает основную версию. До 
ядра 2.6 четные номера версии обозначали стабильную версию ядра, а нечетные — не-


background image

10.1. История UNIX и Linux   

793

стабильную (находящуюся в разработке). Начиная с версии ядра 2.6 это не так. Третье 
число обозначает номер ревизии (например, добавлена поддержка новых драйверов). 
Четвертое число обозначает исправление ошибок или заплатки системы безопасности. 
В июле 2011 года Линус Торвальдс анонсировал выпуск Linux 3.0, но не из-за каких-то 
существенных технических усовершенствований, а просто в честь 20-й годовщины раз-
работки ядра. По состоянию на 2013 год ядро Linux содержит около 16 млн строк кода.

В систему Linux была перенесена внушительная часть стандартного программного 
обеспечения UNIX, включая популярную оконную систему X Windows и большое 
количество сетевого программного обеспечения. Кроме того, специально для Linux 
было написано два различных конкурирующих графических интерфейса пользователя: 
GNOME и KDE. В общем, система Linux выросла в полноценный клон UNIX со всеми 
погремушками, какие только могут понадобиться любителю UNIX.

Необычной особенностью Linux является ее бизнес-модель: это бесплатное программное 
обеспечение. Его можно скачать с различных интернет-сайтов, например 

www.kernel.org

Система Linux поставляется вместе с лицензией, разработанной Ричардом Столманом, 
основателем Фонда бесплатных программ (Free Software Foundation). Несмотря на то 
что система Linux бесплатна, эта лицензия, называющаяся GPL ( GNU  Public License  — 
общедоступная лицензия GNU), по длине превосходит лицензию корпорации Microsoft 
для операционной системы Windows и указывает, что вы можете и чего не можете делать 
с кодом. Пользователи могут бесплатно использовать, копировать, модифицировать 
и распространять исходные коды и двоичные файлы. Основное ограничение касается 
отдельной продажи или распространения двоичного кода (выполненного на основе ядра 
Linux) без исходных текстов. Исходные коды (тексты) должны либо поставляться вместе 
с двоичными файлами, либо предоставляться по требованию.

Хотя Торвальдс до сих пор довольно внимательно контролирует ядро системы, большое 
количество программ пользовательского уровня было написано другими программи-
стами, многие из которых изначально перешли на Linux из сетевых сообществ MINIX, 
BSD и GNU. Однако по мере развития системы Linux все меньшая часть сообщества 
Linux желает ковыряться в исходном коде (свидетельством тому служат сотни книг, 
описывающих, как установить систему Linux и как ею пользоваться, и только не-
сколько книг, в которых обсуждается сам код или то, как он работает). Кроме того, 
многие пользователи Linux теперь предпочитают бесплатному скачиванию системы 
из Интернета покупку одного из CD-ROM-дистрибутивов, распространяемых много-
численными коммерческими компаниями. На веб-сайте 

www.linux.org

 перечислено 

более 100 компаний, продающих различные дистрибутивы Linux

1

. По мере того как 

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

Интересно отметить, что когда мода на Linux начала набирать обороты, она получила 
поддержку с неожиданной стороны — от корпорации AT&T. В 1992 году университет 
в Беркли, лишившись финансирования, решил прекратить разработку BSD UNIX на 
последней версии 4.4BSD (которая впоследствии послужила основой для FreeBSD). 
Поскольку эта версия по существу не содержала кода AT&T, университет в Беркли вы-

1

 Кроме того, информацию о дистрибутивах Linux и их распространителях можно найти 

на 

www.distrowatch.org

.

 — Примеч. ред.


background image

794  

 Глава 10. Изучение конкретных примеров: Unix, Linux и Android 

пустил это программное обеспечение с лицензией открытого исходного кода, которая 
позволяла всем делать все, что угодно, кроме одной вещи — подавать в суд на универси-
тет Калифорнии. Контролировавшее систему UNIX подразделение корпорации AT&T 
отреагировало немедленно — вы угадали, как, — подав в суд на университет Калифор-
нии. Оно также подало иск против компании BSDI, созданной разработчиками BSD 
UNIX для упаковки системы и продажи поддержки (примерно так сейчас поступают 
компании типа Red Hat с операционной системой Linux). Поскольку код AT&T прак-
тически не использовался, то судебное дело основывалось на нарушении авторского 
права и торговой марки, включая такие моменты, как телефонный номер 1-800-ITS-
UNIX компании BSDI. Хотя этот спор в конечном итоге удалось урегулировать в до-
судебном порядке, он не позволял выпустить на рынок FreeBSD в течение долгого 
периода — достаточного для того, чтобы система Linux успела упрочить свои позиции. 
Если бы судебного иска не было, то уже примерно в 1993 году началась бы серьезная 
борьба между двумя бесплатными версиями системы UNIX, распространяющимися 
с исходными кодами: царствующим чемпионом — системой BSD (зрелой и устойчивой 
системой с многочисленными приверженцами в академической среде еще с 1977 года) 
и энергичным молодым претендентом — системой Linux всего лишь двух лет от роду, 
но с уже растущим числом последователей среди индивидуальных пользователей. Кто 
знает, чем обернулась бы эта схватка двух бесплатных версий системы UNIX.

10.2. Обзор системы Linux

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

10.2.1. Задачи Linux

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


background image

10.2. Обзор системы Linux   

795

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

ls A*

означает вывод списка всех файлов, имя которых начинается с буквы «A», то  команда

rm A*

должна означать удаление всех файлов, имя которых начинается с буквы «A», а не 
одного файла, имя которого состоит из буквы «A» и звездочки. Эта характеристика 
иногда называется принципом наименьшей неожиданности (principle of least surprise).

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

Наконец, у большинства программистов есть сильная неприязнь к бесполезной избы-
точности. Зачем писать copy, когда вполне достаточно cp, чтобы однозначно выразить 
желаемое? Это же пустая трата драгоценного хакерского времени. Чтобы получить 
список всех строк, содержащих строку «ard», из файла 

f

, программист в операционной 

системе Linux вводит команду

grep ard f

Противоположный подход состоит в том, что программист сначала запускает про-
грамму grep (без аргументов), после чего программа grep приветствует программиста 
фразой: «Здравствуйте, я grep. Я ищу шаблоны в файлах. Пожалуйста, введите ваш 
шаблон». Получив шаблон, программа grep запрашивает имя файла. Затем она спра-
шивает, есть ли еще какие-либо файлы. Наконец, она выводит резюме того, что она 
собирается делать, и спрашивает, все ли верно. Хотя такой тип пользовательского 
интерфейса может быть удобен для начинающих пользователей, он бесконечно раз-
дражает опытных программистов. Им требуется слуга, а не нянька.

10.2.2. Интерфейсы системы Linux

Операционную систему Linux можно рассматривать как пирамиду (рис. 10.1). У осно-
вания пирамиды располагается аппаратное обеспечение, состоящее из центрального 
процессора, памяти, дисков, монитора и клавиатуры, а также других устройств. Опера-
ционная система работает на «голом железе». Ее функция заключается в управлении 
аппаратным обеспечением и предоставлении всем программам интерфейса системных 
вызовов. Эти системные вызовы позволяют программам пользователя создавать про-
цессы, файлы и прочие ресурсы, а также управлять ими.

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