Глава 1. Введение. Концепция операционных систем
Скачать 0.54 Mb.
|
1.5.6 Управление системой ввода / вывода Одна из целей операционной системы - скрыть особенности специальных программных устройств от пользователя. Например, в UNIX особенности устройств ввода / вывода скрыты от основной части самой операционной системы подсистемой ввода / вывода. Подсистема ввода / вывода состоит из нескольких компонентов: Компонент управления памятью, который включает в себя буферизацию, кэширование и перемотку внешней памяти Общий интерфейс драйвера устройства Драйверы для определенных аппаратных устройств Только драйвер устройства знает особенности конкретного устройства, которому оно предназначено. Ранее в этой главе мы обсуждали, как используются обработчики прерываний и драйверы устройств при построении эффективных подсистем ввода / вывода. В главе 12 мы обсуждаем, как подсистема ввода / вывода для других компонентов системы управляет устройствами, передает данные и обнаруживает завершение ввода / вывода. 1.6 Безопасность и защита Если компьютерная система имеет несколько пользователей и допускает одновременное выполнение нескольких процессов, то доступ к данным должен регулироваться. Цель - механизм, обеспечивающий безопасность файлов, сегментов памяти, ЦП и других ресурсов, могут работать только с теми процессами, которые получили надлежащую авторизацию от операционной системы. Например, аппаратная адресация памяти гарантирует, что процесс может выполняться только в пределах своего собственного адресного пространства. Таймер гарантирует, что ни один процесс не сможет получить контроль над процессором, в конечном итоге отказавшись от управления. Устройство управления регистрирует все возможные приемники, обеспечивая защиту целостности различных периферийных устройств. Защита, таким образом, представляет собой любой механизм для контроля доступа процессов или пользователей к ресурсам, определенным компьютерной системой. Этот механизм должен обеспечивать средства, позволяющие определить контроль, который должен быть введен, и для обеспечения контроля. Защита может повысить надежность путем обнаружения ошибок на интерфейсах между компонентными подсистемами. Раннее обнаружение ошибок интерфейса часто может предотвратить загрязнение исправной подсистемы другой подсистемой, которая работает со сбоями. Кроме того, незащищенный ресурс не может защитить от использования (или неиспользования) авторизованным или некомпетентным пользователем. Система, ориентированная на защиту, обеспечивает аналогичные различия между авторизованным и неавторизованным использованием, как мы обсуждаем в главе 17. Система может иметь адекватную защиту, но все же может быть подвержена сбоям и допускает неправильный доступ. Например, если похищается пользователь, у которого есть информация для аутентификации (ее средства идентификации себя в системе), тогда его данные могут быть скопированы или удалены, даже если защита файлов и памяти работает. Задача безопасности - защищать систему от внешних и внутренних атак. Такие атаки распространяются по огромному диапазону и включают в себя вирусы и черви, атаки типа «отказ в обслуживании» (которые используют все ресурсы системы и, таким образом, не допускают законных пользователей в систему), кражу личных данных и кражу услуг (несанкционированное использование системы). Предотвращение некоторых из этих атак считается функцией операционной системы в некоторых системах, в то время как другие системы оставляют это политике или дополнительному программному обеспечению. Из-за вызывающего тревогу роста числа инцидентов безопасности функции безопасности операционной системы являются быстрорастущей областью исследований и внедрения. Мы обсуждаем безопасность в главе 16. Защита и безопасность требуют, чтобы система была доступной для всех ее пользователей. Большинство операционных систем поддерживают список имен пользователей и связанный с ними идентификатор пользователя (идентификаторы пользователей). На языке Windows это идентификатор безопасности (security ID - SID). Эти числовые идентификаторы являются уникальными, по одному на пользователя. Когда пользователь входит в систему, этап проверки подлинности определяет соответствующий идентификатор пользователя. Этот идентификатор пользователя связан со всеми процессами и потоками пользователя. Когда идентификатор должен быть доступен для чтения пользователям, он преобразуется обратно в имя пользователя через список имен пользователей. В некоторых обстоятельствах мы хотим различать группы пользователей, а не отдельных пользователей. Например, собственная система файлов UNIX может разрешить запуск операций на этом файле, тогда как выбранным пользователям может быть разрешено только читать файл. Для этого нам нужно определить имя группы и набор пользователей, принадлежащих к этой группе. Функциональность группы может быть реализована в виде общесистемного списка имен групп и идентификаторов групп. Пользователь может быть в одной или нескольких группах, в зависимости от проектных решений операционной системы. Идентификаторы группы пользователей также включены в каждый связанный процесс и поток. При обычном использовании системы достаточно идентификатора пользователя и идентификатора группы для пользователя. Однако пользователю иногда необходимо повысить привилегии, чтобы получить дополнительные разрешения для действия. Пользователю может потребоваться доступ к устройству, которое, например, ограничено. Операционные системы предоставляют различные методы для повышения привилегий. Например, в UNIX этот атрибут программы вызывает программу с идентификатором пользователя, а не с идентификатором текущего пользователя. Процесс запускается с эффективным UID до тех пор, пока не отключится дополнительный привилегированный пользователь. 1.7 Виртуализация Виртуализация - это технология, которая позволяет абстрагировать аппаратные средства одного компьютера (ЦП, память, дисководы, сетевые карты и т. д.) в нескольких различных средах выполнения, создавая иллюзию того, что каждая отдельная среда работает на своем собственном частном компьютере. Эти среды можно рассматривать как разные отдельные операционные системы (например, Windows и UNIX), которые могут работать одновременно и могут взаимодействовать друг с другом. Пользователь виртуальной машины может переключаться между различными операционными системами таким же образом, как пользователь может переключаться между различными процессами, запущенными одновременно в одной операционной системе. Виртуализация низкооперативной системы для приложений в других операционных системах, на первый взгляд, кажется, что для такой функциональности нет особых причин. Но индустрия виртуализации обширна и растет, что свидетельствует о ее полезности и важности. Вообще говоря, виртуализация программного обеспечения является одним из элементов класса, который также включает эмуляцию. Эмуляция, которая включает моделирование компьютерного оборудования в программном обеспечении, обычно используется, когда тип исходного процессора отличается от целевого типа процессора. Например, когда Apple переключилась с процессора IBM Power на процессор Intel x86 для своих настольных и портативных компьютеров, она включила средство эмуляции под названием «Rosetta», которое позволяло приложениям, скомпилированным для IBM CPU запускаться на Intel CPU. Эта концепция может быть расширена, чтобы разрешить писать всю операционную систему, написанную для одной платформы работать на другой. Тем не менее, эмуляция имеет высокую цену. Инструкции каждого уровня машины, изначально выполняемые в исходной системе, должны быть переведены в эквивалентную функцию в целевой системе, что часто приводит к нескольким целевым инструкциям. Если исходный и целевой процессоры имеют одинаковые уровни производительности, эмулируемый код может выполняться намного медленнее, чем собственный код. В отличие от виртуализации, которая работает в другой операционной системе, и также встроенной в этот ЦП, операционная система изначально компилируется для конкретной архитектуры ЦП. Виртуализация впервые появилась на мэйнфреймах IBM как метод для одновременного выполнения задач несколькими пользователями. Запуск нескольких виртуальных машин позволил (и все еще позволяет) многим пользователям запускать задачи в системе, созданной для одного пользователя. Позже, в ответ на проблемы с Microsoft Windows на процессоре Intel x86, VMware создала новую технологию виртуализации в форме приложения, работающего в Windows. Это приложение запускало одну или несколько гостевых копий Windows или других собственных операционных систем x86, каждая из которых запускала свои собственные приложения. (См. Рисунок 1.16.) Windows имеет операционную систему, а приложение VMware - виртуальный менеджер машины (VMM). VMM запускает работающие системы, управляет их использованием ресурсов и защищает каждого гостя от других. Несмотря на то, что современные работающие системы вполне способны к запуску нескольких приложений надежно, использование виртуализации продолжается. На рабочих столах и настольных компьютерах VMM позволяет пользователю установить несколько операционных систем для исследования или использования приложений, написанных для работающих систем, не связанных с собственным хостом. Например, ноутбук Apple, работающий под управлением macOS на процессоре x86, может запустить гостевую систему Windows 10, чтобы разрешить выполнение приложений Windows. Компании, разрабатывающие программное обеспечение для нескольких операционных систем, могут использовать виртуализацию для запуска всех этих операционных систем на одном физическом сервере для разработки, тестирования и отладки. В центрах обработки данных виртуализация становится обычным методом управления вычислительными средами и управления ими. VMM, такие как VMware ESX и Citrix XenServer, больше не работают в хост-операционных системах, а скорее является хост-операционными системами, предоставляющими услуги и управление ресурсами для процессов виртуальных машин. С этим текстом мы предоставляем виртуальную машину Linux, которая позволяет вам запускать Linux, а также инструменты разработки, которые мы предоставляем, в вашей персональной системе независимо от операционной системы вашего хоста. Полную информацию о возможностях и реализации виртуализации можно найти в главе 18. 1.8 Распределенные системы Распределенная система - это совокупность физически отдельных, возможно, неоднородных компьютерных систем, которые объединены в сеть, чтобы предоставить пользователям доступ к различным ресурсам, которые поддерживает система. Доступ к общему ресурсу увеличивает скорость вычислений, функциональность, доступность данных и надежность. Некоторые операционные системы общего доступа к сети, например, для доступа к сети, сведения о сети содержатся в драйвере устройства сетевого интерфейса. Другие заставляют пользователей специально вызывать сетевые функции. Обычно системы содержат сочетание двух режимов - например, FTP и NFS. Протоколы, которые создают распределенную систему, могут сильно повлиять на полезность и популярность этой системы. Проще говоря, сеть - это канал связи между двумя или более системами. Распределенные системы зависят от сети для их функциональности. Сети различаются используемыми протоколами, расстояниями между узлами и транспортными средами. Большинство операционных систем поддерживают TCP / IP, в том числе и общего назначения. Некоторые системы поддерживают собственные протоколы для удовлетворения своих потребностей. Для операционной системы необходимо, чтобы сетевой протокол имел интерфейсное устройство - например, сетевой адаптер - с драйвером устройства для управления им, а также программное обеспечение для обработки данных. Эти понятия обсуждаются в этой книге. Сети характеризуются на основе расстояний между их узлами. Локальная сеть (а local-area network - LAN) соединяет компьютеры в комнате, здании или кампусе. Глобальная сеть (wide-area network - WAN) обычно связывает здания, города или страны. Глобальная компания, например, может иметь WAN для подключения офисов по всему миру. Эти сети могут работать по одному или нескольким протоколам. Продолжающееся появление новых технологий порождает новые формы сетей. Например, сеть метрополии (a metropolitan-area network - MAN) может связать строительство в городе. Устройства BlueTooth и протокол 802.11 используют беспроводную технологию для связи на расстоянии нескольких футов, по сути создавая персональную сеть (personal-area network - PAN) между телефоном и головным устройством смартфона и компьютером. Средства массовой информации для доставки своей информации также используют сети различной конфигурации. Они включают в себя медные провода, оптоволоконные каналы и беспроводные передачи между спутниками, микроволновыми антеннами и радиоприемниками. Когда вычислительные устройства подключены к сотовым телефонам, они создают сеть. Даже очень ближняя инфракрасная связь может использоваться для работы в сети. На зачаточном уровне, когда компьютеры общаются, они используют или создают сеть. Эти сети также различаются по своей производительности и надежности Некоторые операционные системы развили понятие сетей и распределенных систем дальше, чем понятие обеспечения сетевого подключения. Сетевая операционная система - это операционная система, которая обеспечивает такие функции, как общий доступ к файлам по сети, а также схему связи, которая позволяет различным процессам на разных компьютерах обмениваться сообщениями. Компьютер, на котором работает сетевая операционная система, действует автономно от всех других компьютеров в сети, хотя он знает о сети и способен связываться с другими сетевыми компьютерами. Распределенная операционная система обеспечивает менее автономную среду. Различные компьютеры взаимодействуют достаточно близко, чтобы создать иллюзию того, что только одна операционная система контролирует сеть. Мы рассмотрим компьютерные сети и распределенные системы в главе 19. 1.9. Структуры данных ядра Мы переходим к теме, которая является центральной для реализации операционной системы: как данные структурируются в системе. В этом разделе мы кратко опишем несколько фундаментальных структур данных, широко используемых в операционных системах. Читатели, которым требуется дополнительная информация о структурах, а также другие, должны обратиться к библиографии в конце главы. 1.9.1 Списки, стеки и очереди Массив - это простая структура данных, в которой каждый элемент доступен напрямую. Например, основная память построена как массив. Если элемент данных был больше, чем один байт, то несколько элементов могут быть выделены для элемента, и элемент рассматривается как «номер элемента × размер элемента». Но как насчет хранения одного элемента, который может изменить размер? И что для удаления может измениться относительное положение основных элементов? В таких ситуациях массивы уступают место другим структурам данных. После того, как массивы, списки принадлежат наиболее фундаментальным структурам данных в компьютерных науках, к каждому миниатюрному массиву можно обращаться напрямую, эти элементы в любом случае должны быть доступны в конкретном порядке. Связанные списки имеют несколько типов: В односвязном списке каждый элемент указывает на своего преемника, как показано на рисунке 1.17. В двусвязном списке данный элемент может отсылать его к своему предшественнику или к его преемнику, как показано на рисунке 1.18. В циклически связанном списке последний элемент в списке относится к первому элементу, а не к нулю, как показано на рисунке 1.19. Связанные списки вмещают элементы разных размеров и позволяют легко вставлять и удалять элементы. Одним потенциальным недостатком использования списка является то, что производительность для извлечения указанного элемента в списке размером n является линейной (O (n)), так как это требует потенциального обхода всех элементов связи в последовательном регистре. Списки иногда используются непосредственно через алгоритмы ядра. Часто, тем не менее, они используются для построения более мощных структур данных, таких как стеки и очереди. Стек - это последовательно упорядоченная структура данных, которая использует принцип «последний пришел, первый вышел» (LIFO) для определения и удаления элементов, то есть последний элемент, помещенный в стек, является первым удаленным элементом. Операции вставки и удаления элементов из стека называются push и pop, соответственно. Операционная система часто использует стек при вызове функций. Параметры, локальные переменные и адрес возврата помещаются в стек при вызове функции; возвращение из вызова функции выталкивает эти элементы из стека. Очередь, напротив, представляет собой последовательно упорядоченную структуру данных, которая использует принцип «первым вошел - первым вышел» (FIFO): элементы удаляются из очереди в том порядке, в котором они были вставлены. Есть много повседневных примеров очередей, в том числе покупатели, ожидающие в очереди в магазине, и автомобили, ожидающие в очереди на светофоре. Очереди также довольно распространены в операционных системах: задания, отправляемые на принтер, обычно печатаются, например, в том порядке, в котором они были отправлены. Как мы увидим в главе 5, задачи, ожидающие запуска на доступном ЦП, часто организованы в очереди. 1.9.2 Деревья представляют собой структуру, которую можно использовать для представления данных иерархически. Значения данных в древовидной структуре связаны через отношения родитель-потомок. В общем дереве родитель может иметь неограниченное количество детей. В двоичном дереве родитель может иметь не более двух дочерних элементов, которые мы называем левым дочерним элементом и правым дочерним элементом. Двоичное дерево поиска дополнительно требует упорядочения между двумя дочерними элементами родительского элемента, в котором левый дочерний элемент <= правый дочерний элемент. На рисунке 1.20 приведен пример дерева двоичного поиска. Когда мы ищем элемент в двоичном дереве поиска, производительность в худшем случае составляет O (n) (рассмотрим, как это может произойти). Чтобы исправить эту ситуацию, мы можем использовать алгоритм для создания сбалансированного бинарного дерева поиска. Здесь дерево, не содержащее n элементов, имеет не более lgn уровней, что обеспечивает производительность O (lgn) в худшем случае. В разделе 5.7.1 мы увидим, что Linux использует сбалансированное двоичное дерево поиска (известное как красно-черное дерево) как часть своего алгоритма планирования ЦП. |