Саҳифаи шахсӣ. Бо сабаби ба корҳои илмӣ машғул шудан, сайт муваққатан бемавод мемонад.
+992(918)
Душанбе - Шанбе аз 10:00 то 18:00
Файлхо
23.09.2013
Синий экран Windows
23.09.2013

https://www.dropbox.com/s/icysumjh5j1nb6i/%D0%A1%D0%B8%D0%BD%D0%B8%D0%B9%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%20%D0%A5%D0%A0.pdf?m

 

https://www.dropbox.com/s/icysumjh5j1nb6i/%D0%A1%D0%B8%D0%BD%D0%B8%D0%B9%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%20%D0%A5%D0%A0.pdf

Корхои лаборатории №1  то №4 - https://www.dropbox.com/sh/m3bm2umcqi2rs4f/Am1aF8iT1P

Лексияхо - https://www.dropbox.com/sh/jqe2ngh3d0g42pd/EWPSaXzJEf

Лекция №4

Лекция 4. Понятия операционной системы. Процессы. Адресные пространства. Файлы. Ввод-вывод данных. Безопасность. Оболочка. (2-часа)

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

Большинство операционных систем используют определенные основные понятия

и абстракции, такие как процессы, адресные пространства и файлы, которые играют

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

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

К подробностям каждого из них мы еще вернемся в следующих главах. Для 

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

преимущественно из UNIX. Как правило, аналогичные примеры можно найти

и в других операционных системах, a Windows Vista мы подробно рассмотрим

в главе 11.

1.5.1. Процессы

Ключевым понятием во всех операционных системах является процесс. Процессом,

по существу, является программа во время её выполнения. С каждым процессом

связано его адресное пространство — список адресов ячеек памяти от нуля и до

некоторого максимума, откуда процесс может считывать и куда записывает данные.

Адресное пространство содержит выполняемую программу, данные этой 

программы и ее стек. Кроме этого, с каждым процессом связан набор ресурсов, который

обычно включает регистры (в том числе счетчик команд и указатель стека), список

открытых файлов, необработанные предупреждения, список связанных процессов

и всю остальную информацию, необходимую в процессе работы программы. Таким

образом, процесс — это контейнер, в котором содержится вся информация, 

необходимая для работы программы.

Более подробно понятие процесса будет рассмотрено в главе 2, а сейчас, для того

чтобы выработать интуитивное представление о процессе, рассмотрим систему,

работающую в мультипрограммном режиме. Пользователь может запустить 

программу редактирования видео и задать ей конвертирование одночасового 

видеофайла в какой-нибудь определенный формат (что займет несколько часов работы),

а затем переключиться на блуждания по Интернету. При этом может заработать

фоновый процесс, который периодически «просыпается» для проверки входящей

электронной почты. И у нас уже будет (как минимум) три активных процесса:

видеоредактор, веб-браузер и программа получения (клиент) электронной почты.

Периодически операционная система будет принимать решения остановить работу

одного процесса и запустить выполнение другого, например, потому, что первый

исчерпал свою долю процессорного времени в предыдущую секунду или две.

Если процесс приостанавливается таким образом, позже он должен 

возобновиться именно в том состоянии, в котором был остановлен. Это означает, что на 

период приостановки вся информация о процессе должна быть явным образом где-то

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

несколько файлов. С каждым из этих файлов связан указатель на текущую позицию

(то есть номер байта или записи, которая должна быть считана следующей). Когда

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

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

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

в таблице операционной системы, которая называется таблицей процессов и 

представляет собой массив (или связанный список) структур, по одной на каждый из

существующих на данный момент процессов.

Таким образом, процесс (в том числе и приостановленный) состоит из 

собственного адресного пространства, которое обычно называют образом памяти, и записи

в таблице процессов, с содержимым его регистров, а также другой информацией,

необходимой для последующего возобновления процесса.

Главными системными вызовами, используемыми при управлении процессами,

являются вызовы, связанные с созданием и завершением процессов. Рассмотрим

простой пример. Процесс, называемый интерпретатором команд, или оболочкой,

считывает команды с терминала. Пользователь только что набрал команду, 

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

запускающий компилятор. Когда этот процесс завершит компиляцию, он произведет

системный вызов для завершения собственного существования.

Если процесс способен создавать несколько других процессов (называющихся

дочерними процессами), а эти процессы в свою очередь могут создавать 

собственные дочерние процессы, то перед нами предстает дерево процессов, подобное

изображенному на рис. 1.13. Связанные процессы, совместно работающие над

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

с другом и в синхронизации своих действий. Такая связь называется 

межпроцессным взаимодействием и будет подробно рассмотрена в главе 2.

 

 

 

 

 

 

 

 

 

 

 

Рис. 1.13. Дерево процессов. Процесс А создал два дочерних процесса, В и С.

Процесс В создал три дочерних процесса, D, Е и F

Другие системные вызовы, предназначенные для управления процессом, 

позволяют запросить выделение дополнительной памяти (или освобождение не-

задействованной), организовать ожидание завершения дочернего процесса или

загрузку какой-нибудь другой программы поверх своей.

Временами возникает потребность в передаче информации запущенному 

процессу, который не находится в состоянии ожидания этой информации. Можно

привести в пример процесс, который обменивается информацией с другим 

процессом, запущенным на другом компьютере, и посылает удаленному процессу

сообщение по сети. Чтобы обезопаситься от возможной утраты сообщения или

ответа на него, отправитель может запросить свою собственную операционную

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

он мог повторно отправить сообщение, если ранее не получит подтверждения его

получения. После установки такого таймера программа может продолжить 

выполнение другой работы.

Когда истечет заданный интервал времени, операционная система посылает

процессу сигнал тревоги. Этот сигнал заставляет процесс приостановить 

выполняемую работу, сохранить в стеке состояние своих регистров и запустить 

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

передать предположительно утраченное сообщение. Когда обработчик сигнала

завершит свою работу, запущенный процесс возобновится в том самом состоянии,

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

аналогами аппаратных прерываний. Они могут генерироваться в различных ситуациях,

а не только по истечении времени, установленного в таймере. Многие аппаратные

прерывания (например, выполнение недопустимой команды или обращение по

неверному адресу) также преобразуются в сигналы процессу, при выполнении

которого произошла ошибка.

Каждому пользователю, которому разрешено работать с системой, системным

администратором присваивается идентификатор пользователя — UID (User IDen-

tification). Каждый запущенный процесс имеет UID того пользователя, который его

запустил. Дочерние процессы имеют такой же UID, что и у родительского процесса.

Пользователи могут входить в какую-нибудь группу, каждая из которых имеет

собственный идентификатор группы — GID (Group IDentification).

Пользователь с особым значением UID, называемый в UNIX 

«суперпользователем» (superuser), имеет особые полномочия, позволяющие пренебрегать многими

правилами защиты. В крупных компьютерных системах только системный 

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

но многие обычные пользователи (особенно студенты) прикладывают немалые

усилия, пытаясь отыскать бреши в системе, которые позволили бы им стать  

суперпользователем без пароля.( Что, согласно УК РФ, является уголовным преступлением. За исключением действий

с согласия владельца данной вычислительной системы (например, при проверке систем 

защиты или выполнении соответствующих лабораторных работ по этой теме). — Примеч. ред.)

Мы будем подробно рассматривать процессы, связи между ними и 

сопутствующие вопросы в главе 2.

1.5.2. Адресные пространства

Каждый компьютер обладает определенным объемом оперативной памяти, 

используемой для хранения исполняемых программ. В самых простых операционных 

системах в памяти присутствует только одна программа. Для запуска второй 

программы сначала нужно удалить первую, а затем загрузить в память вторую на её место.

Более изощренные операционные системы позволяют одновременно находиться

в памяти нескольким программам. Чтобы исключить взаимные помехи (и помехи

работе операционной системы), нужен какой-то защитный механизм. Несмотря

на то что этот механизм должен входить в состав оборудования, управляется он

операционной системой.

Вышеупомянутая точка зрения связана с вопросами управления и защиты

оперативной памяти компьютера. Другой, но не менее важный вопрос, связанный

с памятью, — это управление адресным пространством процессов. Обычно каждому

процессу отводится под использование некоторый непрерывный набор адресов, как

правило, с нуля и до некоторого максимума. В простейшем случае максимальный

объем адресного пространства, выделяемого процессу, меньше объема оперативной

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

его размещения в оперативной памяти будет достаточно места.

При этом на многих компьютерах используется 32- или 64-разрядная 

адресация, позволяющая иметь адресное пространство размером в 232 или 264 байт 

соответственно. Что произойдет, если адресное пространство процесса превышает

объем оперативной памяти, установленной на компьютере, а процессу требуется

использовать все свое пространство целиком? На первых компьютерах такой 

процесс неизменно терпел крах. В наше время, как уже ранее упоминалось, существует

технология виртуальной памяти, согласно которой операционная система хранит

часть адресного пространства в оперативной памяти, а часть — на диске, по 

необходимости меняя их фрагменты местами. По сути, операционная система создает

абстракцию адресного пространства в виде набора адресов, на которые может 

ссылаться процесс. Адресное пространство отделено от физической памяти машины

и может быть как больше, так и меньше ее по объему. Управление адресными 

пространствами и физической памятью является важной частью работы операционной

системы, поэтому данной теме посвящена вся третья глава.

1.5.3. Файлы

Другим ключевым понятием, поддерживаемым практически всеми 

операционными системами, является файловая система. Как отмечалось ранее, основная

функция операционной системы — скрыть специфику дисков и других устройств

ввода-вывода и предоставить программисту удобную и понятную абстрактную

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

для создания, удаления, чтения и записи файлов понадобятся системные вызовы.

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

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

предусмотрены системные вызовы.

Чтобы предоставить место для хранения файлов, многие операционные системы

используют понятие каталога как способа объединения файлов в группы. 

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

(для программ, необходимых в рамках данного курса), каталог для электронной

почты и еще один — для своей домашней веб-страницы. Для создания и удаления

каталогов нужны системные вызовы. Они также нужны для помещения в каталог

существующего файла и удаления его оттуда. Элементами каталога могут быть

либо файлы, либо другие каталоги. Эта модель стала прообразом иерархической

структуры файловой системы, один из вариантов которой показан на рис. 1.14.

 

 

Иерархии файлов, как и иерархии процессов, организованы в виде деревьев,

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

(обычно не более трех уровней), а иерархии файлов обычно имеют глубину в 

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

существования, в большинстве своем не более нескольких минут, а иерархия 

каталогов может существовать годами. Определение принадлежности и меры защиты

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

процесс может управлять дочерним процессом или даже обращаться к нему, но

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

не только их владельцу, но и более широкой группе пользователей.

Каждый файл, принадлежащий иерархии каталогов, может быть обозначен

своим полным именем, с указанием пути к файлу, начиная с вершины иерархии —

корневого каталога. Этот абсолютный путь состоит из списка каталогов, которые

нужно пройти от корневого каталога, чтобы добраться до файла, где в качестве

разделителей компонентов служат символы косой черты (слэша). На рис. 1.14

путь к файлу CS101 будет иметь вид /Faculty/Prof.Brown/Courses/CS101. Первая

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

начинается в корневом каталоге. Следует заметить, в MS-DOS и Windows в качестве

разделителя вместо прямой косой черты (/) используется обратная (\), поэтому

показанный выше путь к файлу должен быть записан в следующем виде: \Faculty\ Prof.Brown\Courses\CS101. На страницах этой книги при указании путей к файлам

будет в основном использоваться соглашение, действующее в UNIX.

В любой момент времени у каждого процесса есть текущий рабочий каталог,

относительно которого рассматриваются пути файлов, не начинающиеся с косой

черты. Например, на рис. 1.14, если /Faculty/Prof.Brown будет рабочим каталогом,

то при использовании пути Courses/CS101 будет получен тот же самый файл, что

и при указании рассмотренного выше абсолютного пути. Процесс может изменить

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

новый рабочий каталог.

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

он должен быть открыт. На этом этапе также происходит проверка прав доступа.

Если доступ разрешен, система возвращает целое число, называемое дескриптором

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

то возвращается код ошибки.

Другое важное понятие в UNIX — смонтированная файловая система. 

Практически все персональные компьютеры оснащены одним и более приводами

оптических дисков, в которые могут вставляться компакт-диски или диски DVD.

У компьютеров, как правило, есть USB-порты, к которым могут быть подключена

USB-память (фактически это твердотельные устройства, заменяющие дисковые

накопители), а некоторые компьютеры имеют приводы гибких дисков или 

подключенные к ним внешние жесткие диски. Чтобы предоставить удобный способ работы

с этими съемными носителями информации, UNIX позволяет файловой системе на

компакт-дисках или дисках DVD подключаться к основному дереву. Рассмотрим

ситуацию, показанную на рис. 1.15, а. Перед вызовом команды mount корневая

файловая система на жестком диске и вторая файловая система на компакт-диске

существуют отдельно и не связаны друг с другом.

Однако файлы на компакт-диске нельзя использовать, поскольку отсутствует

способ определения для них полных имен. UNIX не позволяет указывать в начале

полного имени номер или имя устройства, поскольку это провело бы к жесткой

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

Вместо этого системный вызов mount позволяет подключить файловую систему

на компакт-диске к корневой файловой системе в том месте, где этого потребует

программа. На рис. 1.15, б файловая система на компакт-диске была подключена

к каталогу Ь, открыв доступ к файлам /b/х и /b/у. Если в каталоге b содержались

какие-нибудь файлы, то пока к нему подключена файловая система компакт-диска,

эти файлы будут недоступны, поскольку путь /Ь стал ссылкой на корневой каталог

компакт-диска. (Потеря доступа к этим файлам — во многом надуманная проблема:

файловые системы практически всегда подключаются к пустым каталогам.) Если

система оснащена несколькими жесткими дисками, то все они могут быть 

подключены к единому дереву аналогичным образом.

Еще одним важным понятием в UNIX является специальный файл. 

Специальные файлы служат для того, чтобы устройства ввода-вывода были похожи на

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

те же системные вызовы, которые применяются для чтения и записи файлов.

Существуют два вида специальных файлов: блочные специальные файлы и 

символьные специальные файлы. Блочные специальные файлы используются для

моделирования устройств, содержащих набор блоков с произвольной адресацией,

таких как диски. Открывая блочный специальный файл и считывая, скажем, блок 4,

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

независимо от структуры имеющейся у него файловой системы. Аналогичным образом

символьные специальные файлы используются для моделирования принтеров,

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

принятому соглашению, специальные файлы хранятся в каталоге /dev. Например,

путь /dev/lp может относиться к принтеру (который когда-то назывался строчным

принтером — line printer).

 

 

Последним понятием в этом обзоре будут каналы, которые имеют отношение

как к процессам, так и к файлам. Канал — это разновидность псевдофайла, которым,

как показано на рис. 1.16, можно воспользоваться для соединения двух процессов.

Если процессам А и В необходимо обменяться данными с помощью канала, то они

должны установить его заранее. Когда процессу А нужно отправить данные 

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

Фактически реализация канала очень похожа на реализацию файла. Процесс В

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

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

в UNIX очень похож на обычные операции записи и чтения файла. Более того,

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

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

 

 

1.5.4. Ввод-вывод данных

У всех компьютеров имеются физические устройства для получения входной

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

если пользователи не смогут ему поставить задачу и не смогут получить 

результаты по завершении заданной работы? Существует масса разнообразных устройств

ввода-вывода: клавиатуры, мониторы, принтеры и т. д. Управление всеми этими

устройствами возлагается на операционную систему

Поэтому у каждой операционной системы для управления такими устройствами

существует своя подсистема ввода-вывода. Некоторые программы ввода-вывода не

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

применения со многими или со всеми устройствами ввода-вывода. Другая часть программ,

например драйверы устройств, предназначена для определенных устройств ввода-

вывода. Программное обеспечение подсистемы ввода-вывода будет рассмотрено в

главе 5.

1.5.5. Безопасность

Компьютеры содержат большой объем информации, которую пользователям часто

нужно защитить и сохранить ее конфиденциальность. Возможно, это электронная

почта, бизнес-планы, налоговые декларации и многое другое. Управление 

безопасностью системы также возлагается на операционную систему: например, она

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

Чтобы понять сам замысел возможной организации работы системы 

безопасности, обратимся в качестве простого примера к системе UNIX. Файлам в UNIX

присваивается 9-разрядный двоичный код защиты. Этот код состоит из трехбитных

полей. Одно поле — для владельца, второе — для представителей группы, в которую

он входит (пользователи разделяются на группы системным администратором),

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

чтения, бит, определяющий доступ для записи, и бит, определяющий доступ для

выполнения. Эти три бита называются rwx-битами (read, write, execute). 

Например, код защиты rwxr-x--x означает, что владельцу доступны чтение, запись или

выполнение файла, остальным представителям его группы разрешается чтение или

выполнение файла (но не запись), а всем остальным разрешено выполнение файла

(но не чтение или запись). Для каталога х означает разрешение на поиск. Дефис

(минус) означает, что соответствующее разрешение отсутствует.

Кроме защиты файлов, существует множество других аспектов безопасности.

Один из них — это защита системы от нежелательных вторжений, как с участием,

так и без участия людей (например, путем вирусных атак). Различные вопросы,

связанные с обеспечением безопасности, будут рассматриваться в главе 9.

1.5.6. Оболочка

Операционная система представляет собой программу, выполняющую системные

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

своей важности и приносимой пользе. Рискуя внести некоторую путаницу, в этом

разделе мы коротко рассмотрим и командный интерпретатор UNIX, называемый

оболочкой — shell. He являясь частью операционной системы, оболочка нашла

широкое применение как средство доступа ко многим ее функциям и служит

хорошим примером использования системных вызовов. Когда не применяется

графический пользовательский интерфейс, она также является основным 

интерфейсом между пользователем, сидящим за своим терминалом, и операционной

системой. Существует множество оболочек, включая sh, csh, ksh и bash. Все они

поддерживают рассматриваемые далее функции, происходящие из исходной 

оболочки (sh).

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

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

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

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

пользователь наберет на клавиатуре

date

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

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

дочернего процесса оболочка снова выведет приглашение и попытается прочитать

следующую введенную строку.

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

в файл, например,

date >file

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

sort <filel >file2

Эта команда вызывает программу сортировки — sort, входные данные для 

которой берутся из файла filel, а выходные данные отправляются в файл file2.

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

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

следующая команда

cat filel file2 file3 | sort >/dev/lp

вызывает программу cat для объединения трех файлов и отправки выходных 

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

Выходные данные программы sort перенаправляются в файл /dev/lp, которым обычно

обозначается принтер.

Если пользователь после команды введет знак &, оболочка не станет ожидать ее

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

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

приступит к сортировке как к фоновому заданию, позволяя пользователю во

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

тересных свойств, рассмотреть которые нам не позволяет объем книги. Но в 

большинстве книг по UNIX оболочка рассматривается достаточно подробно (например,

(Kernighan and Pike, 1984; Kochan and Wood, 1990; Medinets, 1999; Newham and

Rosenblatt, 1998; Robbins, 1999).

В наши дни на многих персональных компьютерах используется графический

пользовательский интерфейс. По сути, графический пользовательский 

интерфейс — это просто программа (или совокупность программ), работающая поверх

операционной системы наподобие оболочки. В системах Linux этот факт 

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

сред, реализующих графический пользовательский интерфейс: Gnome и KDE. Или

он может вообще не выбрать ни одну из них — воспользовавшись окном терминала

из XI1. В Windows также есть возможность заменить стандартный менеджер 

рабочего стола (Windows Explorer) какой-нибудь другой программой путем внесения

изменений в некоторые значения реестра, хотя этой возможностью практически

никто не пользуется.

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

После того как была опубликована книга Чарльза Дарвина «Происхождение 

видов», немецкий зоолог Эрнст Хэккель (Ernst Haeckel) сформулировал правило:

«Онтогенез повторяет филогенез». Сказав это, он имел в виду, что развитие 

зародыша (онтогенез) повторяет эволюцию видов (филогенез). Другими словами,

человеческая яйцеклетка с момента оплодотворения до того, как стать ребенком,

проходит через состояния рыбы, свиньи и т. д. Современные биологи считают 

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

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

что каждая новая разновидность (мейнфреймы, мини-компьютеры, персональные

компьютеры, КПК, встроенные компьютеры, смарт-карты и т. д.) проходит путь

развития своих предшественников, как в аппаратном, так и в программном 

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

индустрии и во многих других областях является технологически обусловленным

процессом. Древние римляне испытывали недостаток в автомобилях не потому,

что они слишком любили пешие прогулки, а потому, что они не знали, как эти

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

миллионы людей веками испытывали скрытое желание иметь свой компьютер,

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

производства. Мы часто забываем, какое сильное влияние оказывает технология

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

над этим вопросом.

Достаточно часто технологические изменения приводят к тому, что какая-то

идея устаревает и быстро выходит из употребления. Но другие технологические

изменения способны снова вернуть ее к жизни. Это особенно характерно для тех

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

различных компонентов системы. Например, когда быстродействие центрального про- тересных свойств, рассмотреть которые нам не позволяет объем книги. Но в 

большинстве книг по UNIX оболочка рассматривается достаточно подробно (например,

(Kernighan and Pike, 1984; Kochan and Wood, 1990; Medinets, 1999; Newham and

Rosenblatt, 1998; Robbins, 1999).

В наши дни на многих персональных компьютерах используется графический

пользовательский интерфейс. По сути, графический пользовательский 

интерфейс — это просто программа (или совокупность программ), работающая поверх

операционной системы наподобие оболочки. В системах Linux этот факт 

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

сред, реализующих графический пользовательский интерфейс: Gnome и KDE. Или

он может вообще не выбрать ни одну из них — воспользовавшись окном терминала

из XI1. В Windows также есть возможность заменить стандартный менеджер 

рабочего стола (Windows Explorer) какой-нибудь другой программой путем внесения

изменений в некоторые значения реестра, хотя этой возможностью практически

никто не пользуется.

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

После того как была опубликована книга Чарльза Дарвина «Происхождение 

видов», немецкий зоолог Эрнст Хэккель (Ernst Haeckel) сформулировал правило:

«Онтогенез повторяет филогенез». Сказав это, он имел в виду, что развитие 

зародыша (онтогенез) повторяет эволюцию видов (филогенез). Другими словами,

человеческая яйцеклетка с момента оплодотворения до того, как стать ребенком,

проходит через состояния рыбы, свиньи и т. д. Современные биологи считают 

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

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

что каждая новая разновидность (мейнфреймы, мини-компьютеры, персональные

компьютеры, КПК, встроенные компьютеры, смарт-карты и т. д.) проходит путь

развития своих предшественников, как в аппаратном, так и в программном 

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

индустрии и во многих других областях является технологически обусловленным

процессом. Древние римляне испытывали недостаток в автомобилях не потому,

что они слишком любили пешие прогулки, а потому, что они не знали, как эти

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

миллионы людей веками испытывали скрытое желание иметь свой компьютер,

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

производства. Мы часто забываем, какое сильное влияние оказывает технология

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

над этим вопросом.

Достаточно часто технологические изменения приводят к тому, что какая-то

идея устаревает и быстро выходит из употребления. Но другие технологические

изменения способны снова вернуть ее к жизни. Это особенно характерно для тех

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

различных компонентов системы. Например, когда быстродействие центрального про- 1.5. Понятия операционной системы 73

цессора значительно превышает скорость работы памяти, становится актуальным

использование кэш-памяти, чтобы ускорить работу «медленной» памяти. Если

в один прекрасный момент новая технология памяти сделает ее намного быстрее

центральных процессоров, кэш-память исчезнет. А если новая технология 

производства процессоров позволит им в очередной раз стать быстрее памяти, то 

кэшпамять появится снова. В биологии виды исчезают навсегда, но в компьютерном

мире иногда что-нибудь исчезает всего лишь на несколько лет.

Вследствие такого непостоянства в этой книге мы будем время от времени 

рассматривать «устаревшие» понятия, то есть идеи, не являющиеся оптимальными для

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

изменения могут вернуть к жизни некоторые из так называемых «устаревших понятий».

Поэтому важно разобраться в том, почему понятие считается устаревшим и какие

изменения в окружающем мире могут вернуть ему актуальность.

Чтобы пояснить эту мысль, давайте рассмотрим простой пример. Первые

компьютеры имели аппаратно-реализованные наборы команд. Команды 

выполнялись непосредственно аппаратурой и не могли быть изменены. Затем настали

времена микропрограммирования (впервые нашедшего широкое применение на

машинах IBM 360), в котором интерпретатор переносил «аппаратные команды»

в программное обеспечение. Выполнение аппаратных команд стало устаревшей,

недостаточно гибкой технологией. Когда были изобретены RISC-компьютеры,

микропрограммирование (то есть интерпретируемое выполнение) стало 

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

мы наблюдаем возрождение интерпретации в виде Java-апплетов, посылаемых по

Интернету и интерпретируемых по прибытии. Скорость выполнения не всегда

является решающим аргументом при развитии тенденции к доминированию

сетевых задержек. Мы видим, что маятник уже несколько раз качался между 

непосредственным выполнением и интерпретацией, и он может продолжить свои

колебания в будущем.

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

обеспечения и их неоднократное влияние на программное обеспечение.