Linux Kernel (Ядро линукса) (часть 2)


Представление дисков и разделов на диске

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

Диск представлен объектом gendiskПоле flags хранит информацию о диске. Самым важным флагом является genhd fl up. Если он установлен, значит, диск инициализирован и работает. Другой важный флаг, genhd fl removable, установлен у съемного диска, такого как гибкий диск или компакт-диск.
Поле fops объекта gendisk указывает на таблицу block_device_operations, которая содержит несколько специальных методов для необходимых операций блочного.

Жесткие диски обычно разбиты на логические разделы. Каждый файл блочного устройства может представлять либо целый диск, либо раздел на диске. Например, master-диск EIDE может быть представлен файлом устройства /dev/hda со старшим номером 3 и младшим номером 0. Первые два раздела этого диска представляются файлами /dev/hdal и /dev/hda2 со старшим номером 3 и младшими номерами 1 и 2. Вообще, разделы на диске характеризуются последовательными младшими номерами.

Если диск разбит на разделы, информация о них хранится в массиве структур hd struct, адрес которого содержится в поле part объекта gendisk. Массив индексирован по относительному индексу раздела на диске. Поля дескриптора hd struct

Когда ядро обнаруживает новый диск в системе (на этапе загрузки, или когда съемный носитель вставляется в дисковод, или когда внешний диск подсоединяется во время работы системы), оно вызывает функцию aiioc disko, которая выделяет и инициализирует новый объект gendisk и, если диск разбит на разделы, создает соответствующий массив дескрипторов hd struct. Затем ядро вызывает функцию add disko, чтобы вставить новый дескриптор gendisk в структуры общего слоя работы с блочными устройствами

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

Linux Kernel (Ядро линукса) (часть 1)

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

Linux Kernel (Ядро линукса) (часть 2)

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

Linux Kernel (Ядро линукса) (часть 3)

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