Задачи и интерфейсы Unix-подобных систем

Задачи и интерфейсы Unix-подобных систем.

Задачи ОС Linux.

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

1) Принцип наименьшей неожиданности. Данная система реагирует на действия адекватным образом.

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

Интерфейс системы Linux.

POSIX (Portable Operation System Interface for Unix) – набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой. Данный стандарт создан для обеспечения совместимости различных UNIX-подобных операционных систем и переносимости прикладных программ на уровне исходного кода, но может быть использован и не для UNIX систем.

Схема системы Linux:

Режим пользователя:

Пользователь

Интерфейс пользователя

Стандартные обслуживающие программы

Интерфейс библиотечных функций

Библиотечные функции

Режим ядра:

Интерфейс системных вызовов

ОС Linux

Аппаратура

Функция ОС Unix заключается в управлении аппаратным обеспечением и предоставлении всем программам интерфейса системных вызовов. Эти системные вызовы позволяют программам пользователя создавать процессы, файлы и прочие ресурсы, а так же управлять ими. Рассмотрим следующие 3 интерфейса:

Интерфейс системных вызовов, интерфейс библиотечных функций.

Программы делают системные вызовы, помещая аргументы в регистры и выполняя команду эмулированного прерывания для переключения из пользовательского режима в режим ядра. Поскольку на языке C невозможно написать команду эмулированного прерывания, то этим занимается библиотека, в которой есть по одной процедуре на системный вызов. Эти процедуры написаны на ассемблере, но они могут вызываться из языка C. Каждая такая процедура сначала помещает аргументы в нужное место, а затем выполняет команду эмулированного прерывания. В стандарте POSIX определен именно интерфейс библиотечных функций, а не интерфейс системных вызовов. Иначе говоря, стандарт POSIX определяет, какие библиотечные процедуры должна предоставлять соответствующая его требованиям система, каковы их параметры, что они должны делать и какие результаты возвращать.

Интерфейс пользователя.

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

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

Графические интерфейсы пользователя в Linux поддерживает оконная система X Windowing System (X Window, X 11, X). Она представляет обмен и протоколы отображения для управления окнами на растровых дисплеях unix-подобных систем. X-сервер является главным компонентом, который управляет такими устройствами, как монитор, мышь, клавиатура и т.д. и отвечает за перенаправление ввода от клиентских программ к операционной системе.

Структура ядра ОС Linux.

Системный интерфейс
Компонент Ввода-вывода Компонент управления памятью Компонент управления процессами
Виртуальная файловая система Виртуальная память Обработка сигналов
Файловая система Сокеты Терминалы
Обобщенный уровень блочных устройств Сетевые протоколы Дисциплины линий связи Механизм замещения страниц Создание и завершение процессов и потоков
Диспетчер блочных устройств Драйверы сетевых устройств Драйверы символьных устройств Кэш страниц Планирование процессов
Диспетчер прерываний
Аппаратура

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

Ядро Linux можно разделить на 3 части:

Компонент ввода-вывода.

Компонент управления памятью

Компонент управления процессами

Компонент ввода-вывода:

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

Уровень выше сетевых драйверов выполняет функции маршрутизации, обеспечивая отправку правильного пакета к правильному устройству или к блоку обработки протокола. Над сетью располагается интерфейс сокетов, позволяющий программам создавать сокет.

Над дисковыми драйверами располагается планировщик ввода-вывода, который отвечает за упорядочивание и выдачу запросов над дисковой операцией. ОС Lixux имеет несколько одновременно существующих файловых систем. Обобщенный уровень блоков призван скрыть различия реализаций файловой системы в зависимости от аппаратных устройств.

Компонент управления памятью:

В задачи управления памятью входят:

- Обслуживание отображения виртуальной памяти на физическую

- Поддержка кэша страниц, к которым недавно выполнялось обращение

- Поставка в память новых страниц с кодом и данными

Компонент управления процессами:

Основная задача этого компонента – создание и завершение процесса

Планировщик процессов решает каким процессам запускаться в данный момент, а каким приостанавливаться и завершаться. Компонент обработки сигналов обрабатывает поступающие процессам управляющие сигналы.

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

Интерфейс системных вызовов ядра – все системные вызовы поступают сюда и вызывают эмулированное прерывание, которое переключает исполнение из пользовательского режима в защищенный и передает управление одному из компонентов ядра.

Планирование в ОС Linux.

Операционная система linux алгоритмом планирования различает 3 класса потоков (планирование linux происходит только на основе потоков, а не процессов) :

1. потоки реального времени, обслуживаемые по алгоритму fifo. данные потоки имеют наивысший приоритет и могут вытесняться только потоками того же типа.

2. потоки реального времени, обслуживаемые в порядке циклической очереди. данный тип потоков подобен предыдущему с тем отличием, что он имеет квант времени, т.е. данные потоки могут вытесняться по таймеру.

3. потоки разделения времени.

потоки реального времени имеют приоритеты 1 - 99, остальые - 100-139.

остальные потоки планируются в соответствии с приоритетами и алгоритмом циклической очереди.

Планировщик linux использует ключевую структуру данных, которая называется "очередь исполнения" (runqueue). Эта очередь связана с процессором и поддерживает 2 массива: active & expired. Каждый из этих массивов состоит из заголовков 140 списков.

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

Если задача блокируется до истечения её кванта времени, то после события она помещается обратно в исходный активный массив, а её квант времени уменьшается на количество уже использованного времени процессора. Когда ни в одном из активных массивов больше нет задач, то планировщик меняет указатели для активного массива и массива задач, закончивших функционирование.

Разным уровням приоритетов, присваивается различный квант времени: чем больше приоритет, тем больший квант времени получает данный поток для приоритета 100 - 800млс, для приоритета 139 выделяется 5млс.

Приимущества данного подхода:

а) данный способ планирования гарантирует, что потоки с более низким приоритетом будут выполнены;

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

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

Статический приоритет является постоянным для данной задачи и назначается по умолчанию в начале работы. Динамический приоритет назначается и изменяется во время работы в соответствии с политикой планирования.

Загрузка в ОС Linux

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

Начальный код ядра написан на ассемблере. И является машинно-зависимым. Данный код выполняет следующие действия:

а) настраивает стэк ядра;

б) определяет тип центрального процессора;

в) вычисляет количество имеющейся оперативной памяти;

г) инициализирует прерывания;

д) разрешает работу блока управления памятью;

е) вызывает процедуру main. (написана на языке C).

Процедура main проделывает работу по инициализации остальной части операционной системы. В первую очередь выделяется память под буфер сообщений. В данный буфер записываются сообщения о ходе инициализации системы. Далее выделяется память для структур данных ядра. Большенство структур имеет фиксированный размер. Однако существуют такие, которые зависят от размера оперативной памяти (кэш страниц,таблица страниц). Далее операционная система начинает определение конфигурации компьютера. Для этого OS считывает файлы конфигурации, в которых сообщаются возможные устройства ввода\вывода, и проверяет, какие из них присутствуют на самом деле. Если устройство присутствует, оно добавляется в таблицу подключенных устройств. Иначе, устройство игнорируется.

После завершения конфигурации всего аппаратного обеспечения нужно настроить стек и загрузить процесс 0 (с самым высоким приоритетов). Процесс - продолжает инициализацию:

а) программирование таймера;

б) монтирование корневой файловой системы;

в) создание процесса 1 (init);

г) создание процесса 2 (page deamon).

Процесс init проверяет свои флаги, в зависимости от которых он запускает систему в однопользовательском или многопользовательском режиме.

Однопользовательский режим - в этом случае init создает процесс исполняющий оболочку и ждет, когда тот завершит свою работу.

Многопользовательский режим - в этом случае init создает процесс rc, который проверяет противоречивость файловой системы. Далее считывается файл ttys, в котором перечисляются терминалы и некоторые их свойства. для каждого из разрешенных терминалов он создает копию самого себя и запускает программу getty. Эта программа устанавливает для каждой линии скорость и прочие свойства, а также выводит сообщение для приглашения в систему (login:). Далее она считывает данные логина с клавиатуры, запускает программу login и завершает свою работу. Login запращивает у пользователя пароль, сравнивает с зашифрованным паролем. Если пароль верен, то логин запускает оболочку, если нет, то процесс запроса повторяется.

Подкачка в ОС Linux.

Единицей управления памятью в linux является страница. и почти весь компонент управления памятью работает с точностью до страницы. основная идея подкачки страниц очень проста и тесна связана с алгоритмом PFRA (page frame algorithm)

идея подкачки в linux:

процессу не обязательно находиться целиком в памяти, для того, чтобы выполняться.

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

если пользовательская структура страниц не находится в памяти, то процесс не может выполняться до тех пор, пока таблица страниц и необходимые страницы не будут загружены в память.

подкачка частично реализована ядром и частично процессом. называется Page Daemon. его приоритет равен 2.

Работа данного процесса можно представить следующим образом:

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

Операционная система linux является системой с подкачкой страниц по требованию без упреждающей подкачки.

Текстовые сегменты и отображаемые на адресное пространства файлы подгружаются из соответствующих им файлов на диске. Все остальное подгружается либо в раздел подкачки, либо один из файлов подкачки. Файлы подкачки могут добавляться и удаляться динамически и у каждого свой приоритет.

подкачка страниц из отдельного раздела диска, доступ к которому осуществляется как к отдельному устройству, не содержащему файловую систему, более эффективно по нескольким причинам:

1. не требуются отображения блоков файлов в блоки диска. (Не нужен лишний перевод из физического уровня в логический)

2. физическая запись может иметь любой размер, а не только размер блока файлов.

3. страница всегда пишется на диск в виде единого непрерывного участка. (В файле подкачки это может быть не так)

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

Реестр ОС Windows Vista.

Задачи и интерфейсы Unix-подобных систем - №1 - открытая онлайн библиотека

Структура пространства имен

Задачи и интерфейсы Unix-подобных систем - №2 - открытая онлайн библиотека

«Object Types» – типы объектов;

«ArcName» - Имена разделов обнаруженных начальным загрузчиком.

· «??» - данный каталог содержит имена всех устройств в стиле MS-DOS;

· «DosDevices» – данный каталог является символической ссылкой на каталог «??»;

· «Device» - здесь находятся все обнаруженные устройства (в виде объектов);

· «Driver» - объекты, которые соответствуют всем загруженным драйверам;

· «ObjectTypes» - типы объектов;

· «ArcName» - имена разделов, обнаруженных начальным загрузчиком.

Задания, процессы, потоки, волокна в OC WINDOWS Vista.

1. Процессы в ОС Vista являются контейнерами для ресурсов и потоков. Потоки это абстракция ядра для планирования процессов. Каждый поток имеет два стека: один стек в режиме ядра, второй – в режиме пользователя. Процессы и потоки представляют собой объекты. В OS Windows Vista cуществует структура job (задание). Данная структура была создана, чтобы группировать процесс.

2. В ОС Vista существует структура с заданием. Данные структуры были созданы для того чтобы группировать процессы.

Задачи и интерфейсы Unix-подобных систем - №3 - открытая онлайн библиотека Основной функцией структуры задания, является применение ограничений к содержащемуся в них потокам на использование ресурсов. Если какой-либо поток, находящийся в данном задании создает новый процесс, то данный процесс будет принадлежать также к этому заданию. Один процесс принадлежит одному заданию.

Любой процесс начинается с одного потока. Поток является единицей планирование в ОС Windows Vista.

В ОС Windows Vista существуют такие структуры как волокна(fibers). Волокна создаются и планируются в режиме пользователя. Основное преимущество волокон заключается в том, что они не используют переключения между режимом пользователя и режимом ядра.

Планирование в OC WINDOWS Vista. Система приоритетов.

В системе Windows Vista используется приоритетный алгоритм планирования. Существуют два понятия: базовый приоритет и текущий приоритет. Базовый приоритет устанавливается по умолчанию при создании процесса/потока. Текущий приоритет изменяется динамически во время работы системы. В системе всего существует 32 уровня приоритетов (от 0 до 31). От 1 до 15 – пользовательские потоки. От 16 до 31 – системные потоки. Процесс с приоритетом «0» - это поток обнуления страниц.

Также существует понятие класс приоритетов и относительный приоритет.

Класс – задает приоритет для процесса и всех потоков, находящихся в нём. Допустимые значения:

Real-time

High

Above normal

Normal

Idle

Класс устанавливается для процесса, но влияет на приоритеты потоков.

Относительный приоритет. Допустимые значения:

Time critical

Highest

Above normal

Normal

Below normal

Lowest

Idle

Базовый алгоритм планированиям ОС Vista поддерживает массив с 32 элементами. Элементы массива соответствуют приоритетам от 0 до 31. Каждому элементу массива соответствует список процессов соответствующего приоритета. Планировщик просматривает этот массив, начиная с самого высокого приоритета и ищет не пустой список потоков. Как только будет найден данный список, выбирается первый в очереди поток и выполняется в течение одного кванта времени. Если выбранный поток не успел выполниться, то он ставится в конец очереди своего приоритета. То есть на каком-либо уровне приоритетов потоки планируются циклически. В дополнении к базовым алгоритмам планирования используются механизм динамического изменения текущего приоритета.

Планирование в OC WINDOWS Vista. Условия изменения приоритетов.

Условие повышения приоритета:

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

- во втором случае: поток ждал изменение семафора, мьютекса, события и после данного события его приоритет повышается(на один или два уровня).

Условия понижения приоритета:

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

Файловая система FAT. Таблица размещения файлов.

FAT – карта области данных. Область данных разбивается на кластеры.

Кластер – это один или несколько смежных секторов области данных. С другой стороны, это минимальная адресуемая единица дисковой памяти, выделяемая файлом. Т.е. файл или каталог занимает целое количество кластеров.

Для создания и записи на диск нового файла ОС отводит несколько свободных кластеров диска. Эти кластеры необязательно должны следовать друг за другом. Для каждого файла хранится список всех номеров кластеров, которые предоставлены данному файлу.

Разбиение области данных на кластеры вместо использования секторов позволяет:

- уменьшить размер таблицы FAT:

- уменьшить фрагментацию файлов;

- сокращение длины цепочек фалов;

Однако, слишком большой размер кластеров ведет к неэффективному использованию области данных, особенно в случае, большого количества маленьких файлов. Каждый элемент таблицы FAT соответствует одному кластеру диска и характеризует его состояние:

- свободен

- занят

- сбойный

Если кластер распределен к какому-либо файлу, то соответствующий элемент таблицы FAT содержит номер следующего кластера FAT. Последний кластер файла отмечается числом в диапазоне от 0xff8h до 0xfffh (FAT16) (0xfff8h до 0xffffh (FAT32)). Если кластер является свободным, то он содержит нулевое значение (0х000h(FAT16), 0х0000h(FAT32)). Кластер, непригодный для использования, отмечается числом 0xff7h(FAT16) , 0xfff7h(FAT32). Таким образом, таблица FAT кластеры, принадлежащие одному файлу, связываются в цепочки. Таблица FAT хранится сразу после загрузочной записи логического диска, ее точное расположение описано в специальном поле в загрузочном секторе, она храниться в двух идентичных экземплярах, которые следуют друг за другом и при разрушении первой копии используется вторая.

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

Основной недостаток FAT состоит в том, что при создании файла работает следующее правило, выделяется первый свободный кластере, что ведет к фрагментации диска и сложным цепочка файлов. За счет этого происходит замедление работы с файлами.

Задачи и интерфейсы Unix-подобных систем.

Задачи ОС Linux.

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

1) Принцип наименьшей неожиданности. Данная система реагирует на действия адекватным образом.

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

Интерфейс системы Linux.

POSIX (Portable Operation System Interface for Unix) – набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой. Данный стандарт создан для обеспечения совместимости различных UNIX-подобных операционных систем и переносимости прикладных программ на уровне исходного кода, но может быть использован и не для UNIX систем.

Схема системы Linux:

Режим пользователя:

Пользователь

Интерфейс пользователя

Стандартные обслуживающие программы

Интерфейс библиотечных функций

Библиотечные функции

Режим ядра:

Интерфейс системных вызовов

ОС Linux

Аппаратура

Функция ОС Unix заключается в управлении аппаратным обеспечением и предоставлении всем программам интерфейса системных вызовов. Эти системные вызовы позволяют программам пользователя создавать процессы, файлы и прочие ресурсы, а так же управлять ими. Рассмотрим следующие 3 интерфейса:

Интерфейс системных вызовов, интерфейс библиотечных функций.

Программы делают системные вызовы, помещая аргументы в регистры и выполняя команду эмулированного прерывания для переключения из пользовательского режима в режим ядра. Поскольку на языке C невозможно написать команду эмулированного прерывания, то этим занимается библиотека, в которой есть по одной процедуре на системный вызов. Эти процедуры написаны на ассемблере, но они могут вызываться из языка C. Каждая такая процедура сначала помещает аргументы в нужное место, а затем выполняет команду эмулированного прерывания. В стандарте POSIX определен именно интерфейс библиотечных функций, а не интерфейс системных вызовов. Иначе говоря, стандарт POSIX определяет, какие библиотечные процедуры должна предоставлять соответствующая его требованиям система, каковы их параметры, что они должны делать и какие результаты возвращать.

Интерфейс пользователя.

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

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

Графические интерфейсы пользователя в Linux поддерживает оконная система X Windowing System (X Window, X 11, X). Она представляет обмен и протоколы отображения для управления окнами на растровых дисплеях unix-подобных систем. X-сервер является главным компонентом, который управляет такими устройствами, как монитор, мышь, клавиатура и т.д. и отвечает за перенаправление ввода от клиентских программ к операционной системе.

Структура ядра ОС Linux.

Системный интерфейс
Компонент Ввода-вывода Компонент управления памятью Компонент управления процессами
Виртуальная файловая система Виртуальная память Обработка сигналов
Файловая система Сокеты Терминалы
Обобщенный уровень блочных устройств Сетевые протоколы Дисциплины линий связи Механизм замещения страниц Создание и завершение процессов и потоков
Диспетчер блочных устройств Драйверы сетевых устройств Драйверы символьных устройств Кэш страниц Планирование процессов
Диспетчер прерываний
Аппаратура

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

Ядро Linux можно разделить на 3 части:

Компонент ввода-вывода.

Компонент управления памятью

Компонент управления процессами

Компонент ввода-вывода:

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

Уровень выше сетевых драйверов выполняет функции маршрутизации, обеспечивая отправку правильного пакета к правильному устройству или к блоку обработки протокола. Над сетью располагается интерфейс сокетов, позволяющий программам создавать сокет.

Над дисковыми драйверами располагается планировщик ввода-вывода, который отвечает за упорядочивание и выдачу запросов над дисковой операцией. ОС Lixux имеет несколько одновременно существующих файловых систем. Обобщенный уровень блоков призван скрыть различия реализаций файловой системы в зависимости от аппаратных устройств.

Компонент управления памятью:

В задачи управления памятью входят:

- Обслуживание отображения виртуальной памяти на физическую

- Поддержка кэша страниц, к которым недавно выполнялось обращение

- Поставка в память новых страниц с кодом и данными

Компонент управления процессами:

Основная задача этого компонента – создание и завершение процесса

Планировщик процессов решает каким процессам запускаться в данный момент, а каким приостанавливаться и завершаться. Компонент обработки сигналов обрабатывает поступающие процессам управляющие сигналы.

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

Интерфейс системных вызовов ядра – все системные вызовы поступают сюда и вызывают эмулированное прерывание, которое переключает исполнение из пользовательского режима в защищенный и передает управление одному из компонентов ядра.