Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Что такое операционная система
Теперь мы рассмотрим основные концепции операционных систем, основы использования и особенности Linux и то, как они между собой связаны. В этой главе описаны концепции, которые мы подробно рассмотрим в следующих главах. Если вы знакомы с этими концепциями, вы можете пропустить эту главу и сразу перейти к гл. 2, «Исследовательский инструментарий». Операционная система - это то, что превращает ваше аппаратное обеспечение в пригодный для использования компьютер. Он отвечает за распределение ресурсов, предос- Что такое операционная система тавляемых аппаратными компонентами вашей системы, и предоставляет возможность выполнять и разрабатывать прикладные программы. Если бы операционной системы не существовало, каждой программе пришлось бы включать в себя драйверы для всего оборудования, на котором ее можно использовать, что было бы лишней головной болью для программистов. Состав операционной системы зависит от ее типа. Linux - это UNIX-образный вариант монолитной системы. Когда мы говорим, что система монолитна, мы не обязательно имеем в виду, что она большая (тем не менее во многих случаях это утверждение справедливо). Скорее мы имеем в виду, что она состоит из одного модуля - единственного объектного файла. Структура операционной системы определяется большим количеством процедур, которые компилируются и линкуются в единое целое. То, как эти процедуры связаны, определяет внутреннюю структуру монолитной системы. В Linux мы имеем пространство ядра и пользовательское пространство как две отдельные части операционной системы. Пользователь общается с операционной системой через пользовательское пространство, где он может разрабатывать и/или выполнять программы. Пользовательское пространство не имеет доступа к ядру (и следовательно, к аппаратным ресурсам) напрямую, а только через системные вызовы - внешний слой процедур, реализованных в ядре. В пространстве ядра содержится функциональность по управлению аппаратными средствами. Внутри ядра системные вызовы вызывают другие процедуры, которые недоступны из пользовательского пространства, и некоторые другие дополнительные функции. Подпространство процедур, которые невидимы из пользовательского пространства, образуется функциями отдельных драйверов устройств и функциями подсистем ядра. Драйверы устройств также представляют собой строго определенные интерфейсы функций для системных вызовов или для доступа к подсистемам ядра. На рис. 1.1 показана структура Linux
Рис. 1.1. Диаграмма архитектуры Linux Глава 1 • Обзор Кроме этого, Linux динамически загружает кучу драйверов устройств, нейтрализующих главный недостаток, присущий монолитным операционным системам. Динамически загружаемые драйверы устройств позволяют системному программисту внедрять системный код в ядро без необходимости перекомпиляции ядра в образ ядра. Это занимает значительное время (зависящее от производительности компьютера) и вызывает перезагрузки, что значительно замедляет для системного программиста разработку. При динамической загрузке драйверов устройств системный программист может загружать и выгружать свои драйверы устройств в реальном времени без необходимости перекомпиляции всего ядра и остановки системы. На протяжении этой книги мы рассмотрим эти различные «части» Linux. Когда это возможно, мы будем использовать обзор сверху вниз начиная с простых пользовательских программ и далее проследим путь ее выполнения до системных вызовов и функций подсистем. Таким образом, вы сможете связать простую для понимания пользовательскую функциональность с компонентами ядра, ее реализующими. Организация ядра Linux поддерживает множество архитектур - это значит то, что его можно запускать на нескольких типах процессоров, включая alpha, arm, 1386, ia64, ppc, ppc64 и s390x. Пакет исходных кодов Linux включает поддержку всех этих архитектур. Основная часть кода написана на С и является аппаратно-независимой. Наиболее зависимая от аппаратуры часть кода написана на смеси С и ассемблера конкретной архитектуры. Сильно машинно-зависимые участки кода помещены в оболочку из нескольких системных вызовов, служащих интерфейсом. По мере чтения этой книги вы увидите архитектурно-зависимые части кода, связанные с инициализацией и загрузкой системы, обработкой векторов исключений, преобразованием адресов и вводом-выводом на устройства. Обзор ядра Linux Существуют различные компоненты ядра Linux. На протяжении этой книги мы будем использовать слова компоненты и подсистемы как взаимозаменяемые для обозначения категориальных и функциональных различий функций ядра. В следующем разделе мы обсудим некоторые из этих компонентов и как они реализованы в ядре Linux. Также мы рассмотрим некоторые ключевые особенности операционной системы, позволяющие понять, как эти вещи реализованы в ядре. Мы разделим компоненты на файловую системы, процессы, планировщик и драйверы устройств. Тем не менее этот список далеко не полон, а только коротко излагает содержание книги. 1.9 Обзор ядра Linux Пользовательский интерфейс Пользователи общаются с системой с помощью программ. Вначале пользователь регистрируется в системе через терминал или виртуальный терминал. В Linux программа, называемая mingetty для виртуальных терминалов или agetty для параллельных терминалов, следит за неактивными терминалами, ожидающими пользователей, чтобы сообщить, что они хотят зарегистрироваться в системе. Чтобы это сделать, они вводят имя своей учетной записи, и программа getty выполняет запрос к программе login, которая требует пароль, получает доступ к списку имен пользователей и паролей для аутентификации и позволяет им войти в систему в случае совпадения или выйти и завершить процесс, если совпадение не обнаружено. Программы getty каждый раз перезапускаются после завершения, что означает, что процесс перезапускается сразу после выхода. После аутентификации в системе пользователи получают возможность сообщить программе, что они хотят выполнить. Если пользователь успешно идентифицирован, программа login запускает оболочку (shell). Таким образом, технически не являющаяся частью операционной системы оболочка становится главным интерфейсом операционной системы. Оболочка - это командный интерпретатор, представляющий собой ожидающий процесс. Затем ожидающий процесс (который блокируется до тех пор, пока ему не будет возвращен пользовательский ввод) интерпретирует и выполняет то, что набрал пользователь. Оболочка- это одна из программ, которую можно найти на верхнем слое на рис. 1.1. Оболочка показывает командное приглашение (которое обычно конфигурируется, в зависимости от оболочки) и ожидает пользовательского ввода. Далее пользователь может обращаться к системным устройствам и программам, вводя их с помощью принятого в оболочке синтаксиса. Программы, которые может вызывать пользователь, - это исполняемые файлы, которые хранятся файловой системой. Выполнение этих требований инициализируется оболочкой, порождающей дочерний процесс. Затем дочерний процесс может получить доступ к системным вызовам. После возврата из системных вызовов и завершения дочернего процесса оболочка возвращается к ожиданию пользовательского ввода. Идентификация пользователя Пользователь регистрируется по уникальному имени своей учетной записи. Кроме этого, он ассоциируется с уникальным идентификатором пользователя user ID (UID). Ядро употребляет этот DID для проверки прав пользователя на доступ к файлам. После регистрации он получает доступ к своей домашней директории (home directory), внутри которой может создавать, модифицировать и удалять файлы. В многопользовательских системах, таких, как Linux, важно идентифицировать пользователя с правами доступа и/или ограничениями для предотвращения для пользователя возможности вмешиваться в деятельность других пользователей или получать доступ к их данным. Суперпользова- Глава 1 • Обзор тель - superuser, или root, - это особенный пользователь, не имеющий ограничений; его пользовательский UID - 0. Помимо этого, пользователь является членом одной или нескольких групп, каждая из которых имеет свой собственный групповой идентификатор (group ID, GED). При создании пользователя он автоматически становится членом группы с именем, идентичным его имени пользователя. Также пользователь может быть вручную «добавлен» в другие группы, определенные системным администратором. Файл или программа (исполнимый файл) ассоциируются с правами, распространяемыми на пользователей и группы. Каждый отдельный пользователь может определить, кто имеет доступ к файлам, а кто нет. При этом файл ассоциируется с определенным UID и определенным GID. Файлы и файловые системы Файловая система предоставляет методы для хранения и организации данных. Linux поддерживает концепцию файла как устройствонезависимой последовательности байтов. Благодаря абстрагированию пользователь может получить доступ к файлу в независимости от устройства (например, жесткий диск, дискета или компакт-диск), на котором он хранится. Файлы группируются в некоторые хранилища, называемые директориями. Так как директории могут быть вложенными (каждая из директорий может содержать другие директории), структура файловой системы представляет собой иерархическое дерево. Корень (root) дерева является самым верхним узлом, к которому принадлежат все остальные хранимые директории и файлы. Он обозначается обратной косой чертой (/). Файловая система хранится на разделе жесткого диска или другом устройстве хранения информации. Популярное:
|
Последнее изменение этой страницы: 2016-03-25; Просмотров: 728; Нарушение авторского права страницы