Спонсор: Microsoft
Санкт-Петербургский государственный университет
Опубликован: 13.11.2010 | Доступ: свободный | Студентов: 6726 / 1527 | Оценка: 4.64 / 4.23 | Длительность: 45:08:00
ISBN: 978-5-9963-0495-0
Лекция 26:

Обзор архитектуры и возможностей системы Linux: управление памятью, ресурсами, файловые системы, драйверы устройств, сети, безопасность

< Лекция 25 || Лекция 26: 1234 || Лекция 27 >

Ввод и вывод в Linux

Система файлов Linux, ориентированная на устройства, осуществляет доступ к дисковой памяти с помошью двух кэшей:

  • Данные хранятся в кэше страниц, который объединен с системой виртуальной памяти;
  • Метаданные хранятся в буферном кэше, причем каждый кэш индексируется блоком диска.

Linux разбивает устройства на три класса:

Блочные устройства допускают произвольный доступ к полностью независимым блокам данных фиксированного размера.

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

Сетевые устройства взаимодействуют с сетевой системой ядра.

Модульная структура драйверов устройств в Linux изображена на рис. 26.5.

Модульная структура драйверов устройств.

увеличить изображение
Рис. 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 мы считаем весьма многообещающими.

< Лекция 25 || Лекция 26: 1234 || Лекция 27 >
Гульжан Мурсакимова
Гульжан Мурсакимова
Василий Четвертаков
Василий Четвертаков