• Бонусы букмекерских контор

    Всевозможные бонусы букмекерских контор у нас на сайте.

    www.bettingzone.ru

  • Lelo elise

    Купить lelo в России. Lelo elise.

    www.sexfay.ru

  • Дизайн квартиры мы

    На выгодных условиях дизайн квартиры мы предлагаем по низким ценам. Качественно.

    dekorumus.ru





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


Блоки

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

В Linux размер блока должен быть степенью двойки, и он не должен превышать размер страничного кадра. Более того, он должен быть кратным размеру сектора, потому что каждый блок должен содержать целое количество секторов. Следовательно, в архитектуре 80 х 86 разрешены размеры блоков 512, 1024, 2048 и 4096 байтов.

Размер блока не является специфичным для блочного устройства. При создании дисковой файловой системы администратор может выбрать подходящий размер блока. Так, несколько разделов на одном диске могут использовать блоки разных размеров. Кроме того, каждая операция чтения или записи, выполненная напрямую над файлом блочного устройства, обращается непосредственно к устройству, в обход дисковой файловой системы. Ядро выполняет ее, используя блоки максимального размера (4096 байтов).

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

У каждого буфера есть дескриптор головы буфера”, имеющий тип buffer head. Этот дескриптор содержит всю информацию, необходимую ядру, чтобы знать, как обращаться с данным буфером. Таким образом, перед работой с каждым буфером ядро проверяет его голову”. Подробное описание всех полей буфера приведено в главе 15. Здесь же мы рассмотрим лишь несколько полей: bjpage, b_data, bjolocknr И b_bdev.

Поле b page содержит адрес дескриптора страницы для страничного кадра, в котором хранится буфер блока. Если страничный кадр находится в верхней памяти, поле b data содержит смещение буфера блока внутри страницы. В противном случае оно содержит начальный линейный адрес самого буфера блока. В поле bjolocknr хранится номер логического блока (то есть индекс блока в разделе диска). Наконец, поле b_bdev идентифицирует блочное устройство, использующее голову буфера

Предыдущая страница | 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. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...