По этой причине популярное программное обеспечение, работающее на компьютере IBM PC, часто опиралось на особенности его оборудования. Производители компьютеров, желавшие конкурировать с IBM, были вынуждены копировать эти особенности, в противном случае некоторые популярные программы на их компьютерах могли работать неэффективно или не работать вообще. Требования к оборудованию для таких программ часто включали пункт «IBM PC или 100%-совместимый компьютер».
В версию MS-DOS 2.0, выпущенную в марте 1983 года, была добавлена поддержка жестких дисков, в то время небольших (по сегодняшним меркам), однако их емкость стремительно увеличивалась. Чем больше емкость диска, тем больше файлов на нем можно хранить. А чем больше файлов может вместить диск, тем сложнее найти конкретный файл или использовать какой-либо метод их организации.
Решением этой проблемы в MS-DOS 2.0 стала иерархическая файловая система, которая была добавлена в уже существующую файловую систему с минимальным количеством изменений. Как вы помните, на диске есть область, называемая каталогом, который представляет собой список файлов и содержит информацию о том, где они хранятся. В иерархической файловой системе некоторые из этих файлов сами могут быть каталогами, то есть файлами, содержащими список других файлов. Некоторые из этих файлов также могут быть каталогами. Обычный каталог на диске называется корневым каталогом. Каталоги, содержащиеся в других каталогах, называются подкаталогами. Каталоги (иногда называемые папками) позволяют группировать связанные между собой файлы.
Иерархическая файловая система и некоторые другие функции MS-DOS 2.0 были позаимствованы из операционной системы UNIX, которая была разработана в начале 1970-х годов в Bell Telephone Laboratories. Ее основные авторы — Кен Томпсон (род. 1943) и Деннис Ритчи (1941–2011). UNIX изначально создавалась в качестве облегченной версии более ранней операционной системы Multics (Multiplexed Information and Computing Services), которую корпорация Bell Labs разрабатывала совместно с Массачусетским технологическим институтом и General Electric.
UNIX — излюбленная операционная система олдскульных программистов. В то время как большая часть операционных систем создается для конкретных компьютеров, UNIX разрабатывалась как переносимая операционная система, то есть способная адаптироваться под различные компьютеры.
Во времена разработки UNIX Bell Labs принадлежала компании American Telephone & Telegraph, поэтому на нее распространялись судебные постановления, призванные ограничить монопольное положение AT&T в телефонной отрасли. Первоначально AT&T было запрещено продавать UNIX; компания была вынуждена выдавать лицензии на ее использование другим организациям. Так что начиная с 1973 года такие лицензии были выданы многим университетам, корпорациям и правительственным организациям. В 1983 году AT&T наконец вернулась в компьютерный бизнес, выпустив собственную версию UNIX.
Именно поэтому единой модификации UNIX не существует. Есть различные версии под разными названиями, которые работают на различных компьютерах и продаются разными поставщиками. Многие люди внесли свой вклад в разработку UNIX. Те, кто добавляет новые элементы в данную систему, по-видимому, руководствуются преобладающей философией UNIX. Часть этой философии — широкое использование текстовых файлов. Многие служебные программы UNIX читают текстовые файлы, что-то с ними делают, а затем создают другой текстовый файл. Утилиты UNIX можно объединить в цепочки для выполнения разнообразных действий над этими текстовыми файлами.
UNIX изначально писалась для компьютеров, которые были слишком большими и дорогими для одного пользователя. С такими компьютерами могут одновременно взаимодействовать несколько пользователей благодаря технологии под названием «разделение времени». Ее суть следующая: к компьютеру подключается несколько дисплеев с клавиатурами, которые называются терминалами. Быстро переключаясь между всеми терминалами, операционная система может создать впечатление, будто компьютер одновременно обслуживает всех пользователей.
Операционная система, которая способна одновременно выполнять несколько программ, называется многозадачной. Очевидно, что сложность такой ОС значительно превышает сложность однозадачных CP/M и MS-DOS. Многозадачность усложняет файловую систему, поскольку несколько пользователей могут попытаться одновременно использовать одни и те же файлы. Кроме того, многозадачность влияет на то, как компьютер выделяет память различным программам, поэтому такой операционной системе требуется механизм управления памятью. Поскольку нескольким работающим одновременно программам необходимо больше памяти, существует вероятность, что у компьютера возникнет ее дефицит. Для решения этой проблемы в операционной системе можно реализовать технологию под названием виртуальная память: ненужные в данный момент блоки хранятся во временных файлах на диске, а затем возвращаются в память, когда в них возникает необходимость (для этого используется так называемый файл подкачки, хранящийся на жестком диске).
Наиболее интересными явлениями в мире UNIX в последние годы стали Фонд свободного программного обеспечения (Free Software Foundation, FSF) и проект GNU, основанные Ричардом Столлманом. Аббревиатура GNU является акронимом выражения GNU’s Not UNIX («GNU не UNIX»), что, разумеется, правда. Вместо этого программы, разработанные в рамках проекта GNU, являются совместимыми с операционной системой UNIX, однако распространяются так, что не могут стать чьей-либо собственностью. Благодаря проекту GNU появилось множество UNIX-совместимых служебных программ и инструментов, а также Linux — ядро операционной системы, совместимой с UNIX. Главный создатель ставшего в последние годы популярным ядра Linux — Линус Торвальдс, американский программист из Финляндии.
Однако главная тенденция в развитии ОС, зародившаяся в середине 1980-х, — это разработка таких крупных и сложных систем, как Apple Macintosh и Microsoft Windows, где графические пользовательские интерфейсы и широкие возможности видеосистем применяются для упрощения работы с приложениями. Эту тенденцию я опишу в главе 25.
Глава 23
Фиксированная точка, плавающая точка
В повседневной жизни мы легко оперируем целыми числами, дробями и процентами одновременно. Мы покупаем полдесятка яиц, заплатив налог в размере 8¼ процента из денег, полученных за 2¾ часа сверхурочной работы, оплаченной по тарифу, в полтора раза превышающему обычный. Большинство людей не испытывают трудностей при использовании таких величин. Услышав от статистиков о том, что «среднее американское домохозяйство состоит из 2,6 человека», мы не ужасаемся при мысли о связанных с этим повсеместных увечьях.
Тем не менее когда дело касается компьютерной памяти, переключение между целыми и дробными числами оказывается сложнее. Да, все данные хранятся в компьютерах в виде битов, то есть в виде двоичных чисел. Однако одни виды чисел выразить в битах гораздо легче, чем другие.
Сначала мы использовали биты для представления положительных целых или положительных натуральных чисел. Мы также узнали, как с помощью дополнения до двух можно отобразить отрицательные целые числа, чтобы упростить операцию сложения. В следующей таблице показано, какие диапазоны положительных и отрицательных целых чисел (отрицательные числа выражены с помощью дополнения до двух) можно хранить в ячейках памяти емкостью 8, 16 и 32 бит.