Архитектура операционной системы LINUX.
Система LINUX представляет собой интерактивную программу, разработанную для одновременной поддержки нескольких процессов и нескольких пользователей. LINUX была разработана для опытных пользователей и программистов, поэтому ее основными свойствами являются: непротиворечивость, гибкость и мощь. Это означает, что в системе должно быть небольшое количество базовых элементов, которые можно комбинировать бесконечным числом способов, чтобы приспособить их для конкретного приложения. Кроме того, LINUX лишена избыточности, например, вместо команды сору можно написать ср. Одно из основных правил LINUX заключается в том, что каждая программа должна выполнять всего одну функцию, но делать это хорошо. Операционная система LINUX представляет собой иерархическую многоуровневую структуру (рис. 1). На нижнем уровне располагается аппаратное обеспечение, состоящее из центрального процессора, памяти, дисков, терминалов и других устройств. На вышележащем уровне находится операционная система, функция которой заключается в управлении аппаратным обеспечением и предоставлении всем программам интерфейса системных вызовов, которые позволяют программам создавать процессы, файлы и др. ресурсы и управлять ими. Программы обращаются к системным вызовам, помещая аргументы в регистры центрального процессора (иногда в стек) и выполняя команду эмулированного прерывания для переключения из пользовательского режима в режим ядра и передачи управления операционной системе LINUX. На языке С нельзя написать команду эмулированного прерывания, поэтому процедуры написаны на ассемблере, но могут вызываться из программ, написанных на С. Процедуры представляют собой библиотечные функции, по одной на системный вызов.
Каждая такая процедура помещает аргументы в определенное место и выполняет команду эмулированного прерывания TRAP. Чтобы обратиться к системному вызову read, программа, написанная на языке С должна вызвать библиотечную процедуру,read. Стандарт POSIX определяет библиотечные процедуры, соответствующие системным вызовам, их параметры, их действия и результат выполнения этих действий. LINUX содержит большое количество стандартных программ, некоторые из них описываются стандартом POSIX 1003.2: компиляторы, редакторы, программы обработки текста и утилиты для работы с файлами. Рис. 1 Уровни операционной системы LINUX Именно эти программы и запускаются пользователем с терминала. Таким образом, речь идет о трех интерфейсах в операционной системе LINUX: интерфейсе системных вызовов, интерфейсе библиотечных функций и интерфейсе, образованным набором стандартных обслуживающих программ. Ядро операционной системы LINUX состоит из нескольких уровней (рис. 2). Нижний уровень ядра состоит из драйверов устройств и процедуры диспетчеризации процессов. драйверы системы LINUX подразделяются на два класса: драйверы символьных устройств и драйверы блочных устройств. Основное различие между ним заключается в том, что на блочных устройствах разрешается операция поиска, а на символьных нет. Технически сетевые устройства представляют собой символьные устройства, но обрабатываются по-иному, поэтому они выделены в отдельный класс. Диспетчеризация процессов производится при возникновении прерывания. При этом низкоуровневая программа останавливает выполнение работающего процесса, сохраняет его состояние в таблице процессов ядра и запускает соответствующий драйвер. Диспетчеризация процессов производится также, когда ядро завершает свою работу и наступает момент запуска процесса пользователя. Программа диспетчеризации процессов написана на ассемблере и представляет собой отдельную от процедуры планирования программу.
Символьные устройства могут использоваться двумя способами. Некоторым программам (например, текстовым редакторам vi и emacs), требуется нажатая клавиша без обработки. Для этого служит ввод-вывод с необработанного терминала (телетайпа). Другое программное обеспечение, например оболочка shell, принимает на входе уже готовую текстовую строку, позволяя пользователю редактировать ее, пока не будет нажата клавиша Enter. Такое программное обеспечение пользуется вводом с терминала в обработанном виде и дисциплинами линии связи. Рис. 2. Структура ядра операционной системы LINUX.
Сетевое программное обеспечение часто бывает модульным, с поддержкой множества различных устройств и протоколов. Уровень выше сетевых драйверов выполняет функции маршрутизации, гарантируя, что правильный пакет направляется правильному устройству или блоку управления протоколами. Большинство систем LINUX содержат в своем ядре полноценный маршрутизатор Интернета. Над уровнем маршрутизации располагается стек протоколов (включая протоколы IР и ТСР). Над сетевыми протоколами располагается интерфейс сокетов, позволяющий программам создавать сокеты[1] для отдельных сетей и протоколов. Для использования сокетов пользовательские программы получают дескрипторы файлов. Над дисковыми драйверами располагаются буферный кэш и страничный кэш файловой системы. В ранних системах LINUX буферный кэш представлял собой фиксированную область памяти, а остальная память использовалась для страниц пользователя. В современных системах границы не существует, и любая страница памяти может использоваться для выполнения поставленной задачи. Над буферным кэшем располагаются файловые системы. Большинством систем LINUX поддерживают несколько файловых систем, включая быструю файловую систему Беркли, журнальную файловую систему, а также различные виды файловых систем System V. Файловые системы совместно используют общий буферный кэш. Выше файловых систем помещается именование файлов, управление каталогами, управление жесткими и символьными связями, а также другие свойства файловой системы, одинаковые для всех файловых систем.
Над страничным кэшем располагается система виртуальной памяти, содержащая логические алгоритмы работы со страницами. Выше находится программа отображения файлов на виртуальную память и высокоуровневая программа управления страничными прерываниями, которая определяет действия при их возникновении. Вначале она проверяет допустимость обращения к памяти. При положительном ответе определяет местонахождение требуемой страницы и способ ее получения. Над диспетчером располагается планировщик процессов, выбирающий процесс, который должен быть запущен следующим. Если потоками управляет ядро, то управление потоками является также функцией ядра. В некоторых системах LINUX управление потоками вынесено в пространство пользователя. Над планировщиком процессов расположена программа для обработки сигналов и отправки их в требуемом направлении, а также программа, занимающаяся созданием и завершением процессов. Верхний уровень представляет собой интерфейс системы. Слева располагается интерфейс системных вызовов, который принимает все системные вызовы и направляет их одному из модулей низших уровней в зависимости от природы системного вызова. Правая часть верхнего уровня представляет собой вход для аппаратных и эмулированных прерываний, включая сигналы, страничные прерывания, разнообразные исключительные ситуации процессора и прерывания ввода-вывода.
Лабораторная работа №2
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|