Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Архитектура ОС Linux

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

Ядро Linux состоит из шести основных подсистем:

· управления процессами;

· взаимодействия между процессами;

· управления памятью;

· управления файловой системой;

· управления операциями ввода/вывода;

· сетевая подсистема.

Все шесть подсистем контролируют доступ к системным ресурсам (рис.6.6).

 


Рис.6.6. Архитектура Linux

 

Процессы в Linux могут выполняться в режиме ядра, либо пользовательском режиме. Пользовательские процессы выполняются в пользовательском режиме, поэтому доступ к службам ядра они получают через интерфейс системных вызовов. Когда от пользовательского процесса приходит разрешенный системный вызов (в пользовательском режиме), ядро обрабатывает системный вызов в режиме ядра от имени процесса. Если запрос некорректен (например, процесс пытается осуществить запись в файл, который не был открыт), ядро возвратит ошибку. Диспетчер процессов (process manager) является главной подсистемой, отвечающей за создание процессов, обеспечение доступа к процессору (процессорам) системы и удалению процессов из системы по завершению их работы.

Подсистема взаимодействия процессов (Interprocess communication, IPC) ядра позволяет процессам взаимодействовать друг с другом. Эта подсистема работает совместно с диспетчером процессов, обеспечивая совместный доступ к информации и передачу сообщений с помощью самых разнообразных методов.

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

Пользователи получают доступ и файлам и папкам, перемещаясь по дереву каталогов. Корень дерева каталогов называется корневым (root) каталогом. Из корневого каталога пользователи могут перейти к любой доступной файловой системе. Пользовательские процессы запрашивают данные файловой системы через интерфейс системных вызовов. Когда системе нужен доступ к файлу или папке дерева каталогов, взаимодействие осуществляется через интерфейс виртуальной файловой системы (virtual file system, VFS), обеспечивающий единый способ доступа ко всем файлам и каталогам, размещенным в неоднородных файловых системах (например, ext2 и NFS). Виртуальная файловая система передает запросы конкретной файловой системе, которая отвечает за схему размещении и место хранения данных.

Основываясь на модели UNIX, подсистема управления операциями ввода/вывода ОС Linux взаимодействует с устройствами, как с файлами, то есть использует те же механизмы доступа, что и при работе с файлами. Когда пользовательские процессы обмениваются данными с устройством, ядро передает запросы интерфейсу виртуальной файловой системы, которая перенаправляет их интерфейсу ввода/вывода. Интерфейс ввода/вывода передает запросы далее драйверам устройств, выполняющим операции ввода/вывода для системного оборудования.

В Linux существует сетевая подсистема, позволяющая процессам обмениваться данными с компьютерами по сети. Для отправки и приема пакетов сетевая подсистема использует сетевое оборудование системы, получая доступ к нему через интерфейс ввода/вывода. Эта подсистема позволяет приложениям и ядру инспектировать и модифицировать пакеты, проходящие по сетевым уровням системы с помощью интерфейса фильтрации пакетов. Данный интерфейс позволяет реализовать брандмауэры, маршрутизаторы и другие сетевые средства.

Пользователь взаимодействует с ядром при помощи специальной программной оболочки (shell) или с помощью прикладных программ, в которых предусмотрены средства передачи команд от пользователя в ядро. По существу, shell является одной из прикладных программ, предназначенной для интерпретации команд пользователя, которые передаются с клавиатуры (или мыши) из удобной для человека формы в ядро Linux. Команды преобразуются в коды, которые понимает ядро ОС. Оболочки shell бывают различные: командные или графические, например, KDE или GNOME. К известным оболочкам командного типа можно отнести: ash, bash, sh, ksh и другие, которые для управления системой предоставляют пользователю командную строку и развитую систему сообщений. Все они имеют встроенный интерпретатор команд пользователя и работают примерно одинаково.

Организация процессов и потоков (задач - в терминологии Linux). Диспетчер процессов хранит список всех задач в виде двух структур данных. Первая структура представляет собой кольцевой список, каждая запись которого содержит указатели на предыдущую и последующую задачу. Обращение к этой структуре происходит в том случае, когда ядру необходимо проанализировать все задачи, которые должны быть выполнены в системе. Второй структурой является хэш-таблица. При создании задачи ей присваивается уникальный идентификатор процесса (process identifier, PID). Идентификаторы процессов передаются хэш-функции для определения местоположения процесса в таблице процессов. Хэш-метод обеспечивает быстрый доступ к специфическим структурам данных задачи, если ядру известен ее PID.

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

Задача переходит в состояние running (выполнения) после ее передачи в процессор (см. рис. 6.7). При блокировке задача переходит в состояние sleeping (спячки), а при приостанове работы в состояние останова (stopped). Состояние zombie (зомби) показывает, что выполнение задачи прекратилось, однако она еще не была удалена из системы. Например, если процесс состоит из нескольких потоков, он будет пребывать в состоянии зомби, пока все потоки не получат уведомление о завершении работы основного процесса. Задача в состоянии dead (смерти) может быть спо-

 
 

 

 


Рис.6.7. Граф переходов состояний задач

 

койно удалена из системы. Состояния active (активный) и expired (неактивный) используются при планировании выполнения процесса, и поэтому они не сохраняются в переменной state.

При загрузке ядра обычно запускается процесс init, который использует ядро для создания всех остальных задач. Задачи создаются путем вызова системной функции clone.

Поддержка потоков в Linux также организована при помощи системного вызова процедуры clone, позволяющей вызывающему процессу задавать общий доступ к виртуальной памяти для потока, информацию о файловых системах, файловые дескрипторы и/или обработчики сигналов. При вызове процедуры clone из процесса ядра (т.е. процесса, выполняющего программный код ядра), создается поток ядра (kernel thread), отличающийся от остальных потоков тем, что он может обращаться непосредственно к адресному пространству ядра. В ядре в виде потоков реализованы несколько демонов. Демонами называются службы, пребывающие в спящем режиме до тех пор, пока ядро не разбудит их для выполнения таких задач, как сохранение страниц на вторичный носитель информации, планирование программных прерываний. Эти задачи обычно связаны с обслуживанием и потому выполняются регулярно.

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

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

Планировщик решает задачу бесконечного откладывания низкоприоритетных задач путем задания временных интервалов, называемых периодами дискретизации (epoch), в течение которых каждая задача из очереди выполнения должна быть запущена хотя бы раз. Планировщик поддерживает жесткое планирование реального времени, пытаясь минимизировать время, затрачиваемое задачей реального времени на ожидание отправки в процессор. Задача реального времени всегда помещается в активный список по истечении выделенного ей кванта времени. Кроме того, задачи реального времени всегда выполняются с более высоким приоритетом, чем обычные задачи, поэтому обычная задача никогда не сможет их вытеснить.

Масштабируемость

Вначале разработка ядра Linux была ориентирована на рынок настольных систем и серверов нижнего уровня. Но по мере реализации дополнительной функциональности, популярность Linux возрастала. Это подтолкнуло интерес к масштабированию и переносу операционной системы l.inux на более мощные системы (в том числе системы мэйнфрейм-типа) со стороны крупных компаний, таких как IBM и Hewlett-Packard, которые начали сотрудничать с независимыми разработчиками, чтобы добиться повышения конкурентоспособности Linux на рынке серверов верхнего уровня.

Такие компании как Red Hat, SuSE (www. suse. com) и Conectiva занялись выпуском дистрибутивов Linux, специально предназначенных для высокопроизводительных серверов, и предоставлением услуг по поддержке их дистрибутивов.

Производители оборудования со встроенными ОС также используют Linux для управления устройствами. Чтобы удовлетворить нужды подобных систем с ограниченной функциональностью, производители программного обеспечения в кооперации с независимыми разработчиками создали модифицированные версии ядра их и приложений, предназначенные для устройств со встроенными системами.

Linux поддерживает симметричную многопроцессорную обработку (SMP), кластеризацию, неоднородный доступ к памяти. При этом отмечено, что кластеры могут быть эквивалентны, либо превосходить по производительности системы SMP, но при этом стоимость аппаратного обеспечения обычно меньше.

Список текущих реализаций Linux можно найти на Web-узле по адресу: www.linux.org.

 

<== предыдущая лекция | следующая лекция ==>
ОС Linux | Индивидуальная фотография рабочего дня
Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 1362; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.