Обзор архитектуры и возможностей системы Linux: управление памятью, ресурсами, файловые системы, драйверы устройств, сети, безопасность
Ввод и вывод в Linux
Система файлов Linux, ориентированная на устройства, осуществляет доступ к дисковой памяти с помошью двух кэшей:
- Данные хранятся в кэше страниц, который объединен с системой виртуальной памяти;
- Метаданные хранятся в буферном кэше, причем каждый кэш индексируется блоком диска.
Linux разбивает устройства на три класса:
Блочные устройства допускают произвольный доступ к полностью независимым блокам данных фиксированного размера.
Символьные устройства включают большую часть всех других устройств; они не нуждаются в поддержке функциональности обычных файлов.
Сетевые устройства взаимодействуют с сетевой системой ядра.
Модульная структура драйверов устройств в Linux изображена на рис. 26.5.
Блочные устройства обеспечивают основной интерфейс ко всем дисковым устройствам в системе. Блочный буферный кэш служит для двух основных целей:
- Как буферный пул для активного ввода-вывода
- Как кэш для завершенного ввода-вывода.
Менеджер запросов управляет чтением и записью содержимого буферов с помощью драйвера блочного устройства.
Символьные устройства. Драйвер символьного устройства не поддерживает произвольный доступ к фиксированным блокам данных.
Драйвер символьного устройства регистрирует набор функций, реализующих разнообразные требуемые операции ввода-вывода.
Ядро не выполняет почти никакой предварительной обработки запроса на чтение или запись в файл символьного устройства, но просто передает данный запрос драйверу устройства.
Основное исключение из этого правила – это особый набор драйверов символьных устройств, которые реализуют доступ к терминальным устройствам ( TTY ); для них ядро поддерживает стандартный интерфейс.
Взаимодействие процессов в Linux
Как и UNIX, Linux информирует процессы о наступлении событий с помощью сигналов.
Существует ограниченный набор сигналов, и они не могут нести какую-либо информацию: только факт, что сигнал имеет место, доступен процессу.
Ядро Linux не использует сигналы для коммуникации процессов, исполняемых в режиме ядра. Коммуникация внутри ядра осуществляется с помощью структур планировщика – states ( состояния ) и wait.queue (очередь ожидания).
Механизм конвейера (pipe) позволяет дочернему процессу наследовать коммуникационный канал от процесса-родителя. Данные, записываемые с одного конца конвейера, могут быть прочитаны на другом конце.
Общая память обеспечивает очень быстрый способ коммуникации; любые данные, записанные одним процессом в регион общей памяти, могут быть немедленно прочитаны любым другим процессом, который отобразил этот регион в свое адресное пространство.
Однако с целью синхронизации общая память должна использоваться в сочетании с каким-либо другим комуникационным механизмом.
Объект в общей памяти используется как файл откачки для регионов общей памяти, так же как файл может быть использован для откачки информации из региона, отображаемого в память.
Отображения в общую память перенаправляют отказы страниц в регион памяти, занятый разделяемым объектом.
Разделяемые объекты помнят свое содержимое, даже если в данный момент никакие процессы не отображают их в свои виртуальные пространства памяти.
Структура сети в Linux
Работа в сети – ключевая область функциональности в Linux.
Сетевая система Linux поддерживает основные Интернет-протоколы для коммуникаций UNIX - UNIX. Она также реализует протоколы, характерные для ОС, отличных от UNIX, в частности, протоколы, используемые в сетях PC, таких как Appletalk и IPX.
Сетевая система Linux реализована в виде трех уровней абстракции:
- Сокетный интерфейс
- Драйверы протоколов
- Драйверы сетевых устройств.
Наиболее важный набор сетевых протоколов в Linux – это набор протоколов Интернета.
Сетевая система Linux обеспечивает маршрутизацию между различными машинами на любом участке сети. На верхнем уровне протокола маршрутизации поддерживаются UDP-, TCP- и ICMP-протоколы.
Безопасность в Linux
В системе Linux реализованы подключаемые аутентификационные модули (pluggable authentication modules - PAM основаны на общей библиотеке, которая может быть использована любыми компонентами, где требуется аутентифицировать пользователя).
Управление доступом в системах типа UNIX, включая и Linux, осуществляется с помощью уникальных числовых идентификаторов пользователя и группы ( uid и gid ).
Управление доступом выполняется путем присваивания объектам маски защиты, которая указывает, какие операции (чтение, запись, исполнение) доступны для владельца, группы и всех остальных пользователей.
Linux дополняет стандартный механизм UNIX ( setuid ) двумя способами:
- Реализует этот механизм по спецификации POSIX, что позволяет каждому процессу многократно освобождать и вновь получать свой действующий uid.
- Добавлена характеристика процесса, которая предоставляет лишь подмножество полномочий, согласно действующему uid.
Linux обеспечивает механизм, который позволяет клиенту выборочно передавать доступ к отдельному файлу некоторому серверному процессу, без предоставления ему каких-либо других привилегий.
Развитие и использование Linux
Система Linux, как активно используемая и изучаемая, используется также для известных разработок. Например, все большую популярность приобретает ОС Google Android – ОС для мобильных устройств на основе ядра Linux (разработка фирмы Google).
Кроме того, в России на основе Linux разработана отечественная ОС для школьников - Альт- Линукс.
В целом, перспективы Linux мы считаем весьма многообещающими.