Спонсор: 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 поддерживает таблицу функций для загрузки программ. Каждой функции предоставляется возможность попытаться загрузить заданный файл, когда выполняется системный вызов exec.

Регистрация многократно загружаемых программ позволяет Linux поддерживать как ELF-,так и a.out – форматы кода.

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

Двоичный файл формата ELF (Executable and Linkage Format) состоит из заголовка, за которым следуют несколько выравненных до страницы секций ; ELF-загрузчик читает заголовок и отображает секции файла в отдельные регионы виртуальной памяти.

Структура секций файла ELF для модуля ядра Linux показана в таблица 1.

Таблица 1. Структура секций файла ELF для модуля ядра Linux
.text инструкции
.fixup изменения времени исполнения
.init.text инструкции инициализации модуля
exit.text выходные инструкции модуля
.rodata.etrl.l строки только для чтения
.modinfо текст макросов модуля
_versions данные о версии модуля
.data инициализированные данные
.bss неинициализированные данные
other

Распределение памяти для ELF-программ в Linux изображено на рис. 26.2.

Распределение памяти для ELF-программ.

увеличить изображение
Рис. 26.2. Распределение памяти для ELF-программ.

Статическая и динамическая линковка.Программа, библиотечные функции которой встроены непосредственно в двоичный исполняемый код, статически линкуется со своими библиотеками.

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

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

Системы файлов Linux

С точки зрения пользователя файловая система Linux представляет собой иерархическое дерево директорий, подчиняющееся семантике UNIX.

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

Linux VFS спроектирована по объектно-ориентированным принципам и использует набор определений, задающий структуру файлов. Системные структуры inode-object и file-object представляют отдельные файлы. Объект file system object представляет файловую систему в целом. Существует уровень абстракции для манипулирования этими объектами.

Файловая система Ext2fs – основная файловая система Linux. Она использует механизм, сходный с UNIX BSD Fast File System (ffs) для поиска блоков данных, принадлежащих некоторому файлу.

Основные различия между ext2fs и ffs касаются их политик распределения дисковой памяти.

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

Система Ext2fs не использует фрагменты; она распределяет память более мелкими единицами. Размер блока по умолчанию в ext2fs -1Kb, хотя блоки в 2Kb и 4Kb также поддерживаются.

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

Структурная схема системы файлов Ext2fs показана в таблица 2.

Таблица 2. Структурная схема системы файлов Ext2fs в Linux
Суперблок (Superblock)
Описание группы блоков (Group Descriptors)
Битовая карта блоков (Block Bitmap)
Битовая карта индексных дескрипторов (Inode Bitmap)
Таблица индексных дескрипторов (Inode Table)
Данные (Data)

Группы блоков в Ext2fs.Все блоки ext2fs разделяются на группы блоков. Для каждой группы блоков создается отдельная запись в глобальной дескрипторной таблице, в этой записи хранятся основные параметры:

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

Битовая карта блоков — это структура, каждый бит которой показывает, отведён ли соответствующий ему блок какому-либо файлу. Если бит равен 1, то блок занят. Аналогичную функцию выполняет битовая карта индексных дескрипторов, показывая какие именно индексные дескрипторы заняты, а какие нет. Ядро Linux, используя число inode, содержащих каталоги, пытается равномерно распределить inode каталогов по группам, а inode файлов помещает, если это возможно, в группу с родительским каталогом.

Все оставшееся место, обозначенное в таблице как данные, отводится для хранения файлов.

Адресация файлов в Ext2fs.Система адресации данных — одна из самых существенных составных частей файловой системы. Именно система адресации позволяет находить нужный файл среди множества как пустых, так и занятых блоков на диске.

Файловая система ext2 использует следующую схему адресации блоков файла. Для хранения адреса файла выделено 15 полей, каждое из которых состоит из 4 байтов.

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

Таким образом, 13-й элемент адреса используется для косвенной адресации. При максимальном размере блока, равном 4096 байтов, 13-й элемент может содержать до 1024 номеров следующих кластеров данных файла. Если размер файла превышает 12+1024 блоков, то используется 14-е поле, в котором находится номер блока, содержащего 1024 номеров блоков, каждый из которых хранит 1024 номеров блоков данных файла. Здесь применяется уже двойная косвенная адресация. И, наконец, если файл включает более 12+1024+1048576 = 1049612 блоков, то используется последнее 15-е поле для тройной косвенной адресации.

Таким образом, описанная выше система адресации, позволяет при максимальном размере блока 4 Кб иметь файлы размера до 2 терабайт или больше.

Схема адресации файлов в системе Ext2fs изображена на рис. 26.3.

Адресация файлов в системе Ext2fs.

увеличить изображение
Рис. 26.3. Адресация файлов в системе Ext2fs.

Принципы размещения блоков в системе Ext2fs иллюстрируются на рис. 26.4.

Принципы размещения блоков в системе Ext2fs.

увеличить изображение
Рис. 26.4. Принципы размещения блоков в системе Ext2fs.

Файловая система Linux Proc.Файловая система proc не хранит данные; вместо этого, их содержимое вычисляется по требованию, в соответствии с пользовательскими запросами на ввод-вывод.

Система proc реализует структуру директорий и файлы, находящиеся внутри них; затем она определяет уникальный и сохраняемый номер inode для каждой директории и файлов, которые в ней содержатся. Она использует этот номер inode для идентификации, какая операция требуется, когда пользователь пытается обратиться к конкретному inode файла или выполнить поиск в конкретном inode директории.

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

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