Добавлен: 29.10.2018
Просмотров: 47983
Скачиваний: 190
66
Глава 1. Введение
Мы будем подробно рассматривать процессы, связи между ними и сопутствующие
вопросы в главе 2.
1.5.2. Адресные пространства
Каждый компьютер обладает определенным объемом оперативной памяти, использу-
емой для хранения исполняемых программ. В самых простых операционных системах
в памяти присутствует только одна программа. Для запуска второй программы сначала
нужно удалить первую, а затем на ее место загрузить в память вторую.
Более изощренные операционные системы позволяют одновременно находиться в памя-
ти нескольким программам. Чтобы исключить взаимные помехи (и помехи работе опе-
рационной системы), нужен какой-то защитный механизм. Несмотря на то что этот ме-
ханизм должен входить в состав оборудования, управляется он операционной системой.
Вышеупомянутая точка зрения связана с вопросами управления и защиты оперативной
памяти компьютера. Другой, но не менее важный вопрос, связанный с памятью, — это
управление адресным пространством процессов. Обычно каждому процессу отводится
для использования некоторый непрерывный набор адресов, как правило, с нуля и до
некоторого максимума. В простейшем случае максимальный объем адресного про-
странства, выделяемого процессу, меньше объема оперативной памяти. Таким образом,
процесс может заполнить свое адресное пространство и для его размещения в опера-
тивной памяти будет достаточно места.
При этом на многих компьютерах используется 32- или 64-разрядная адресация, по-
зволяющая иметь адресное пространство размером 2
32
или 2
64
байт соответственно.
Что произойдет, если адресное пространство процесса превышает объем оперативной
памяти, установленной на компьютере, а процессу требуется использовать все свое
пространство целиком? На первых компьютерах такой процесс неизменно терпел крах.
В наше время, как уже упоминалось, существует технология виртуальной памяти, при
которой операционная система хранит часть адресного пространства в оперативной
памяти, а часть — на диске, по необходимости меняя их фрагменты местами. По сути,
операционная система создает абстракцию адресного пространства в виде набора
адресов, на которые может ссылаться процесс. Адресное пространство отделено от
физической памяти машины и может быть как больше, так и меньше нее. Управление
адресными пространствами и физической памятью является важной частью работы
операционной системы, поэтому данной теме посвящена вся глава 3.
1.5.3. Файлы
Другим ключевым понятием, поддерживаемым практически всеми операционными
системами, является файловая система. Как отмечалось ранее, основная функция
операционной системы — скрыть специфику дисков и других устройств ввода-вывода
и предоставить программисту удобную и понятную абстрактную модель, состоящую
из независимых от устройств файлов. Вполне очевидно, что для создания, удаления,
чтения и записи файлов понадобятся системные вызовы. Перед тем как файл будет
готов к чтению, он должен быть найден на диске и открыт, а после считывания — за-
крыт. Для проведения этих операций предусмотрены системные вызовы.
Чтобы предоставить место для хранения файлов, многие операционные системы персо-
нальных компьютеров используют каталог как способ объединения файлов в группы.
1.5. Понятия операционной системы
67
Например, у студента может быть по одному каталогу для каждого изучаемого курса
(для программ, необходимых в рамках данного курса), каталог для электронной почты
и еще один — для своей домашней веб-страницы. Для создания и удаления каталогов
нужны системные вызовы. Они также нужны для помещения в каталог существующе-
го файла и удаления его оттуда. Элементами каталога могут быть либо файлы, либо
другие каталоги. Эта модель стала прообразом иерархической структуры файловой
системы, один из вариантов которой показан на рис. 1.14.
Рис. 1.14. Файловая система факультета университета
Иерархии файлов, как и иерархии процессов, организованы в виде деревьев, но на этом
сходство заканчивается. Иерархии процессов не отличаются глубиной (обычно не
более трех уровней), а иерархии файлов обычно имеют глубину в четыре, пять и более
уровней. Иерархии процессов имеют короткий период существования, в большинстве
своем не более нескольких минут, а иерархия каталогов может существовать годами.
Определение принадлежности и меры защиты для процессов и файлов также имеют
различия. Обычно только родительский процесс может управлять дочерним про-
цессом или даже обращаться к нему, но практически всегда существуют механизмы,
позволяющие читать файлы и каталоги не только их владельцу, но и более широкой
группе пользователей.
Каждый файл, принадлежащий иерархии каталогов, может быть обозначен своим
полным именем
с указанием пути к файлу, начиная с вершины иерархии — корневого
каталога. Этот абсолютный путь состоит из списка каталогов, которые нужно пройти
от корневого каталога, чтобы добраться до файла, где в качестве разделителей компо-
68
Глава 1. Введение
нентов служат символы косой черты (слеша). На рис. 1.14 путь к файлу CS101 будет
иметь вид
/Faculty/Prof.Brown/Courses/CS101
. Первая косая черта является признаком
использования абсолютного пути, который начинается в корневом каталоге. Следует
заметить: в Windows в качестве разделителя вместо прямой косой черты (
/
) использует-
ся обратная (
\
), поэтому показанный выше путь к файлу должен быть записан в следу-
ющем виде:
\Faculty\Prof.Brown\Courses\CS101
. На страницах этой книги при указании
путей к файлам будет в основном использоваться соглашение, действующее в UNIX.
В любой момент времени у каждого процесса есть текущий рабочий каталог, отно-
сительно которого рассматриваются пути файлов, не начинающиеся с косой черты.
Например, на рис. 1.14, если
/Faculty/Prof.Brown
будет рабочим каталогом, то при ис-
пользовании пути
Courses/CS101
будет получен тот же самый файл, что и при указании
рассмотренного ранее абсолютного пути. Процесс может изменить свой рабочий ката-
лог, воспользовавшись системным вызовом, определяющим новый рабочий каталог.
Перед тем как с файлом можно будет работать в режиме записи или чтения, он должен
быть открыт. На этом этапе происходит также проверка прав доступа. Если доступ раз-
решен, система возвращает целое число, называемое дескриптором файла, который
используется в последующих операциях. Если доступ запрещен, то возвращается код
ошибки.
Другое важное понятие в UNIX — смонтированная файловая система. Большинство
настольных компьютеров оснащено одним и более приводами оптических дисков,
в которые могут вставляться компакт-диски, диски DVD и Blu-ray. У компьютеров, как
правило, есть USB-порты, к которым может быть подключена USB-память (фактиче-
ски это твердотельные устройства, заменяющие дисковые накопители), а некоторые
компьютеры имеют приводы гибких дисков или подключенные к ним внешние жесткие
диски. Чтобы предоставить удобный способ работы с этими съемными носителями
информации, UNIX позволяет файловой системе на оптическом диске подключаться
к основному дереву. Рассмотрим ситуацию, показанную на рис. 1.15, а. Перед вызовом
команды mount корневая файловая система на жестком диске и вторая файловая си-
стема на компакт-диске существуют отдельно и не связаны друг с другом.
Однако файлы на компакт-диске нельзя использовать, поскольку отсутствует способ
определения для них полных имен. UNIX не позволяет указывать в начале полного
имени номер или имя устройства, поскольку это привело бы к жесткой зависимости от
устройств, которой операционным системам лучше избегать. Вместо этого системный
вызов mount позволяет подключить файловую систему на компакт-диске к корневой
файловой системе в том месте, где этого потребует программа. На рис. 1.15, б файловая
система на компакт-диске была подключена к каталогу
b
, открыв доступ к файлам
/b/x
и
/b/y
. Если в каталоге
b
содержались какие-нибудь файлы, то пока к нему подключена
файловая система компакт-диска, эти файлы будут недоступны, поскольку путь
/b
стал
ссылкой на корневой каталог компакт-диска. (Потеря доступа к этим файлам — во
многом надуманная проблема: файловые системы практически всегда подключаются
к пустым каталогам.) Если система оснащена несколькими жесткими дисками, то все
они могут быть подключены к единому дереву аналогичным образом.
Еще одним важным понятием в UNIX является специальный файл. Специальные
файлы служат для того, чтобы устройства ввода-вывода были похожи на файлы. При
этом с ними можно проводить операции чтения и записи, используя те же системные
вызовы, которые применяются для чтения и записи файлов. Существуют два вида
специальных файлов: блочные специальные файлы и символьные специальные
1.5. Понятия операционной системы
69
файлы
. Блочные специальные файлы используются для моделирования устройств,
содержащих набор блоков с произвольной адресацией, таких как диски. Открывая
блочный специальный файл и считывая, скажем, блок 4, программа может напрямую
получить доступ к четвертому блоку устройства независимо от структуры имеющейся
у него файловой системы. Аналогичным образом символьные специальные файлы
используются для моделирования принтеров, модемов и других устройств, которые
принимают или выдают поток символов. В соответствии с принятым соглашением
специальные файлы хранятся в каталоге
/dev
. Например, путь
/dev/lp
может отно-
ситься к принтеру (который когда-то назывался строчным принтером — line printer).
Рис. 1.15. Файлы на компакт-диске: а — перед подключением недоступны;
б — после подключения становятся частью корневой файловой системы
Последним понятием в этом обзоре будут каналы, которые имеют отношение как
к процессам, так и к файлам. Канал — это разновидность псевдофайла, которым можно
воспользоваться для соединения двух процессов (рис. 1.16). Если процессам A и B необ-
ходимо обменяться данными с помощью канала, то они должны установить его заранее.
Когда процессу A нужно отправить данные процессу B, он осуществляет запись в канал,
как будто имеет дело с выходным файлом. Фактически реализация канала очень похо-
жа на реализацию файла. Процесс B может прочитать данные, осуществляя операцию
чтения из канала, как будто он имеет дело с входным файлом. Таким образом, обмен
данными между процессами в UNIX очень похож на обычные операции записи и чте-
ния файла. Более того, только сделав специальный системный вызов, процесс может
узнать, что запись выходных данных на самом деле производится не в файл, а в канал.
Рис. 1.16. Два процесса, соединенные каналом
Файловая система играет очень важную роль. Ей будет уделено значительно больше
внимания в главе 4, а также в главах 10 и 11.
1.5.4. Ввод-вывод данных
У всех компьютеров имеются физические устройства для получения входной и вы-
вода выходной информации. Действительно, какой будет прок от компьютера, если
пользователи не смогут поставить ему задачу и получить результаты по завершении
70
Глава 1. Введение
заданной работы? Существует масса разнообразных устройств ввода-вывода: клавиа-
туры, мониторы, принтеры и т. д. Управление всеми этими устройствами возлагается
на операционную систему.
Поэтому у каждой операционной системы для управления такими устройствами
существует своя подсистема ввода-вывода. Некоторые программы ввода-вывода не
зависят от конкретного устройства, то есть в равной мере подходят для применения
со многими или со всеми устройствами ввода-вывода. Другая часть программ, напри-
мер драйверы устройств, предназначена для определенных устройств ввода-вывода.
Программное обеспечение подсистемы ввода-вывода будет рассмотрено в главе 5.
1.5.5. Безопасность
Компьютеры содержат большой объем информации, и часто пользователям нужно
защитить ее и сохранить ее конфиденциальность. Возможно, это электронная почта,
бизнес-планы, налоговые декларации и многое другое. Управление безопасностью си-
стемы также возлагается на операционную систему: например, она должна обеспечить
доступ к файлам только пользователям, имеющим на это право.
Чтобы понять сам замысел возможной организации работы системы безопасности,
обратимся в качестве простого примера к системе UNIX. Файлам в UNIX присваи-
вается 9-разрядный двоичный код защиты. Этот код состоит из трехбитных полей.
Одно поле — для владельца, второе — для представителей группы, в которую он входит
(разделяет пользователей на группы системный администратор), третье — для всех
остальных. В каждом поле есть бит, определяющий доступ для чтения, бит, опреде-
ляющий доступ для записи, и бит, определяющий доступ для выполнения. Эти три
бита называются rwx-битами (read, write, execute). Например, код защиты rwxr-x--x
означает, что владельцу доступны чтение, запись или выполнение файла, остальным
представителям его группы разрешается чтение или выполнение файла (но не запись),
а всем остальным разрешено выполнение файла (но не чтение или запись). Для ката-
лога x означает разрешение на поиск. Дефис (минус) означает, что соответствующее
разрешение отсутствует.
Кроме защиты файлов существует множество других аспектов безопасности. Один
из них — это защита системы от нежелательных вторжений как с участием, так и без
участия людей (например, путем вирусных атак). Различные вопросы, связанные
с обес печением безопасности, будут рассматриваться в главе 9.
1.5.6. Оболочка
Операционная система представляет собой программу, выполняющую системные вызо-
вы. Редакторы, компиляторы, ассемблеры, компоновщики, утилиты и интерпретаторы
команд по определению не являются частью операционной системы при всей своей
важности и приносимой пользе. Рискуя внести некоторую путаницу, в этом разделе
мы коротко рассмотрим и командный интерпретатор UNIX, называемый оболочкой —
shell. Не являясь частью операционной системы, оболочка нашла широкое применение
как средство доступа ко многим ее функциям и служит хорошим примером исполь-
зования системных вызовов. Когда не применяется графический пользовательский
интерфейс, она также является основным интерфейсом между пользователем, сидящим
за своим терминалом, и операционной системой. Существует множество оболочек,