Добавлен: 29.10.2018
Просмотров: 48156
Скачиваний: 190
656
Глава 8. Многопроцессорные системы
менные. Но там не рассматривалось, что произойдет, если удаленная процедура
выдаст системный вызов. Какие проблемы это может вызвать и что можно сделать
для их разрешения?
22. Когда в системе DSM возникает ошибка отсутствия страницы, нужно найти тре-
буемую страницу. Назовите два возможных метода ее поиска.
23. Рассмотрите примеры распределения процессоров, приведенные на рис. 8.24.
Предположим, что процесс H перемещен с узла 2 на узел 3. Чему теперь равен
суммарный внешний трафик?
24. Некоторые мультикомпьютеры позволяют работающим процессам мигрировать
с одного узла на другой. Достаточно ли для этого просто остановить процесс, со-
хранить его образ в памяти и переслать этот образ на другой узел? Назовите две
серьезные проблемы, которые следует решить, чтобы выполнить эту работу.
25. Почему в сети Ethernet существует ограничение на длину кабеля?
26. На рис. 8.26 третий и четвертый уровни на всех четырех машинах помечены как
связующее программное обеспечение и приложение. В чем их сходство и различие
для всех четырех платформ?
27. В
таблице на рис. 8.29 перечислены шесть типов служб. Какая служба больше всего
подходит каждому из следующих приложений:
а) видео по запросу, передаваемое через Интернет;
б) загрузка веб-страницы?
28. DNS-имена имеют иерархическую структуру, например
cs.uni.edu
или
sales
.
generallwidget.com
. Один из способов реализации DNS-имен может заключаться
в поддержании централизованной базы данных, но этот метод не применяется,
так как такая база данных будет получать слишком большой поток запросов.
Предложите свой метод реализации базы данных DNS, которую можно будет
поддерживать на практике.
29. При рассмотрении метода обработки браузером URL-указателей утверждалось,
что соединения устанавливаются через порт 80. Почему?
30. Когда браузер извлекает веб-страницу, он сначала устанавливает TCP-соединение,
чтобы получить текст страницы (на языке HTML). Затем он разрывает соединение
и изучает страницу. Если она содержит графические изображения или значки, он
снова создает отдельные TCP-соединения для извлечения каждого изображения.
Предложите две альтернативные схемы для улучшения производительности.
31. При использовании сеансовой семантики изменения файлов немедленно стано-
вятся видимыми процессу, инициировавшему эти изменения, и никогда не видны
процессам на других машинах. Тем не менее остается открытым вопрос о том,
должны ли эти изменения сразу же становиться видимыми другим процессам на
той же машине. Приведите аргументы в пользу обоих вариантов ответа.
32. В
чем
преимущества объектного доступа к данным перед совместно используемой
памятью в ситуации, когда нескольким процессам требуется доступ к данным?
33. При выполнении операции in для обнаружения кортежа в системе Linda линейный
поиск по всему пространству кортежей крайне неэффективен. Разработайте метод
организации пространства кортежей, который ускорит выполнение операций in.
Вопросы
657
34. Для
копирования буферов требуется время. Напишите программу на языке C, вы-
числяющую данное время для системы, к которой у вас есть доступ. Используйте
функции clock или times, чтобы определить, сколько времени занимает копирова-
ние длинного массива. Поэкспериментируйте с массивами разной длины, чтобы
отделить время копирования от времени издержек.
35. Напишите на языке C функции, которые могли бы использоваться в качестве кли-
ентской и серверной заглушек для выполнения RPC-вызова стандартной функции
printf, а также головной модуль для тестирования этих функций. Клиент и сервер
должны общаться при помощи структуры данных, которая может передаваться
по сети. Вы можете наложить разумные ограничения на длину строки формата
и число, типы и размеры переменных, которые будет принимать ваша клиентская
заглушка.
36. Напишите программу, реализующую рассмотренные ранее алгоритмы балан-
сирования нагрузки по инициативе отправителя и по инициативе получателя.
В качестве входных данных алгоритмы должны брать список недавно созданных
заданий, определяемых как (creating_processor, start_time, required_CPU_time),
где creating_processor — это номер центрального процессора, создавшего задание,
start_time — время создания задания, а required_CPU_time — количество време-
ни центрального процессора, требуемого для завершения задания (в секундах).
Предположим, что узел перегружается, если у него уже есть одно задание, а на
нем создается еще одно задание. Предположим, что узел недогружен, когда у него
нет заданий. Выведите на печать количество пробных сообщений, отправляемых
обоими алгоритмами при сильной и слабой загруженности. Также выведите на
печать максимальное и минимальное количество проверок, посланных и полу-
ченных любым хостом. Чтобы создать рабочую нагрузку, напишите два генератора
рабочей нагрузки. Первый должен имитировать тяжелую нагрузку, генерируя,
в среднем, N заданий каждые AJL секунд, где AJL — эта средняя продолжитель-
ность выполнения задания и N — количество процессоров. Продолжительности
выполнения заданий должны быть последовательностью из длинных и коротких
заданий, но средняя продолжительность задания должна быть равна AJL. Задания
должны создаваться (распределяться) всеми процессорами случайным образом.
Второй генератор должен имитировать слабую нагрузку, случайным образом
генерируя N/3 заданий каждые AJL секунд. Поэкспериментируйте с установками
остальных параметров для генераторов нагрузки и посмотрите, как это повлияет
на количество пробных сообщений.
37. Один из простейших способов реализации системы публикации-подписки — через
центрального посредника, получающего публикуемые статьи и распространяюще-
го эти статьи подписчикам. Напишите многопотоковое приложение, эмулирующее
систему публикации-подписки на основе использования посредника. Потоки из-
дателя и подписчика могут обмениваться с посредником данными через общую
память. Каждое сообщение должно начинаться с поля длины, за которым следует
указанное в нем число символов. Издатели отправляют посреднику сообщения,
где в первой строке сообщений содержится иерархическая строка темы с точками
в качестве разделителей, за которой следуют одна или более строк, содержащих
публикуемую статью. Подписчики отправляют посреднику сообщения из одной
строки, содержащей иерархическую строку заинтересованности, разделенную
точками, обозначающими статьи, которыми они интересуются. Строка заинтере-
658
Глава 8. Многопроцессорные системы
сованности может содержать групповой символ «*». Посредник должен ответить
отправкой всех (прошлых) статей, соответствующих интересам подписчика. Ста-
тьи в сообщении разделены строкой «BEGIN NEW ARTICLE». Подписчик должен
выводить на печать каждое получаемое сообщение наряду со своим идентифика-
тором подписчика (то есть его строки заинтересованности). Подписчик должен
продолжать получать любые вновь публикуемые статьи, соответствующие его
интересам. Потоки издателя и подписчика должны создаваться в динамическом
режиме из терминала путем набора «P» или «S» (для издателя или подписчика),
за которыми следует иерархическая строка темы или заинтересованности. Затем
издатели выдают приглашение на ввод статьи. Ввод одиночной строки, содержа-
щей «.», будет сигнализировать окончание статьи. (Этот проект может быть реа-
лизован также с использованием обмена данными между процессами через TCP.)
Гл а в а 9
.
Безопасность
У большинства компаний есть ценная информация, требующая надежной защиты.
Среди многих других данных эта информация может иметь разный характер: техни-
ческий (например, архитектура новой микросхемы или программное обеспечение),
коммерческий (например, исследования конкурентоспособности или маркетинговые
планы), финансовый (например, планы биржевых операций) или юридический (на-
пример, документы о потенциальном объединении или поглощении компаний). Ос-
новная часть такой информации хранится на компьютерах. На домашних компьютерах
также хранится все больше и больше ценной информации. Многие люди хранят свои
финансовые данные, включая налоговые декларации и номера кредитных карт на ком-
пьютерах. Любовные письма обрели цифровой формат. А жесткие диски в наше время
наполнены важными фотографиями, видеоклипами и фильмами.
По мере возрастания объемов информации, хранящейся на компьютерных системах,
возрастают и потребности в ее защите. Охрана этой информации от несанкциони-
рованного использования становится основной задачей всех операционных систем.
К сожалению, выполнение этой задачи постоянно усложняется из-за повсеместного
непротивления раздуванию системы (и сопутствующего роста количества ошибок).
В данной главе будут рассмотрены вопросы компьютерной безопасности примени-
тельно к операционным системам.
За последние несколько десятилетий вопросы безопасности операционных систем
претерпели радикальные изменения. До начала 1990-х годов компьютер был дома
лишь у немногих, в основном вычислительные работы проводились в компаниях,
университетах и других организациях на многопользовательских компьютерах — от
больших универсальных машин до мини-компьютеров. Почти все эти машины были
изолированы друг от друга и не подключены ни к каким сетям. Поэтому вопросы
безопасности сводились практически только к избавлению пользователей от чужого
вмешательства. Если и Трейси и Камилла были зарегистрированными пользователями
одного и того же компьютера, то ставилась задача гарантировать, что никто из них не
сможет читать или тайно изменять содержимое чужих файлов, но при этом разрешить
совместное использование таких файлов, если пользователи сами того пожелают. Были
разработаны усовершенствованные модели и механизмы, гарантирующие, что никто
не получит доступа, не соответствующего предоставленным правам.
Иногда эти модели и механизмы касались не отдельных пользователей, а их классов.
Например, на военных компьютерах на данные нужно было ставить метки «совершенно
секретно», «секретно», «для служебного пользования» или «без ограничений», чтобы
капралы не могли просматривать генеральские каталоги, кем бы ни были эти капралы
и эти генералы. В течение десятилетий все эти темы были основательно исследованы,
описаны и воплощены в реальных разработках.
Безоговорочно предполагалось, что после выбора и реализации модели программное
обеспечение практически не содержало ошибок и в своей работе придерживалось уста-
660
Глава 9. Безопасность
новленных правил. Обычно модели и программы не отличались особой сложностью,
поэтому они, как правило, соответствовали этому предположению. Таким образом, если
теоретически Трейси не разрешался просмотр какого-то конкретного файла, принад-
лежащего Камилле, то практически она не могла этого сделать.
С возрастанием роли персональных компьютеров, планшетных компьютеров, смартфо-
нов и Интернета ситуация изменилась. Например, у многих устройств имеется только
один пользователь, поэтому опасность того, что один пользователь сунет нос в файлы
другого пользователя, по большому счету, сошла на нет. Разумеется, это утверждение
не относится к общим серверам (возможно, составляющим облако).
Здесь существенный интерес представляет поддержание полной изолированности
пользователей. К тому же шпионаж еще бывает, например, в сети. Если Трейси под-
ключена к той же сети Wi-Fi, что и Камилла, она может перехватить все ее сетевые
данные. Что касается Wi-Fi, эта проблема не нова. Более 2000 лет назад Юлий Цезарь
столкнулся с точно такой же проблемой. Ему нужно было отправить сообщения своим
легионам и союзникам, но была вероятность, что эти сообщения будут перехвачены
врагами. Чтобы исключить возможность прочтения его распоряжений неприятелем,
Цезарь воспользовался шифром — заменил каждую букву в сообщении буквой на три
позиции левее нее в алфавите. Таким образом, «D» стала «A», «E» стала «B» и т. д. Хотя
сегодняшняя техника шифрования куда сложнее, принцип тот же: без знания ключа
враг не сможет прочитать сообщение.
К сожалению, это не всегда срабатывает, потому что сеть не единственное место, где
Трейси может шпионить за Камиллой. Если Трейси сможет взломать компьютер
Камиллы, ей удастся перехватить все исходящие сообщения до того, как они будут
зашифрованы, а входящие сообщения — после их расшифровки. Взломать чужой ком-
пьютер порой нелегко, но намного легче, чем должно было бы быть (и, как правило,
намного легче, чем взломать чей-нибудь 2048-битный шифровальный ключ). Причина
возникновения этой проблемы — дефекты в программном обеспечении, установленном
на компьютере Камиллы. К счастью для Трейси, все более разрастающиеся в объеме
операционные системы и приложения гарантируют присутствие в них дефектов. Когда
дефект влияет на безопасность, мы называем его уязвимостью (vulnerability). Когда
Трейси обнаруживает уязвимость в программе Камиллы, она должна снабдить эту
программу такими байтами, которые заставят дефект сработать. Вводимые данные,
позволяющие воспользоваться дефектом, обычно называются вредоносным кодом
(exploit). Зачастую удачно подобранный вредоносный код позволяет взломщикам
получить полный контроль над компьютером.
Иначе говоря, когда Камилла считает себя единственным пользователем компьютера,
она глубоко заблуждается — на самом деле она им пользуется не одна!
Взломщики, воспользовавшись вирусом или червем, могут запускать вредоносный код
сами, или же он может запускаться в автоматическом режиме. Разница между вирусом
и червем не всегда понятна. Многие соглашаются с тем, что вирусу для распростра-
нения нужны хотя бы какие-нибудь пользовательские действия. Например, чтобы
инфицировать машину, пользователь должен щелкнуть кнопкой мыши на вложении
в электронное письмо. В то же время черви попадают в систему без посторонней по-
мощи. Они будут распространяться независимо от действий пользователя. Возможно
также, что пользователь сам охотно устанавливает у себя код, применяемый взлом-
щиком. Например, взломщик может переупаковать популярную, но дорогостоящую
программу (вроде игры или текстового процессора) и предложить ее бесплатно через