Ядро Linux - Где в ядре блоки данных, физически записанные в определенные разделы диска?

Я изменяю ядро Linux и пытаюсь найти, где в исходных блоках данных ядра физически записаны в разделы диска, такие как ubd0. Где это происходит в источнике ядра? Фактический физический вызов записи? Я не могу найти это.Спасибо!

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

6
задан SpdStr 12 April 2010 в 02:36
поделиться

3 ответа

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

Я не уверен, где лучше всего зацепиться за выход из очереди. Возможно, elv_next_request () на старых ядрах или blk_start_request () на более новых.

0
ответ дан 17 December 2019 в 22:11
поделиться

Это зависит от конкретного драйвера и типа устройства. Для устройства SCSI команды SCSI поступают в драйвер устройства. Они генерируются на уровне SCSI и отправляются на устройство драйвером устройства, а затем на устройство.

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

Для правки взгляните на blktrace: http://linux.die.net/man/8/blktrace

Хорошо, еще один ответ; тебе это понравится больше. Это происходит в generic_make_request. Комментарии довольно описательны: http://lxr.linux.no/#linux+v2.6.32/block/blk-core.c#L1380

Биоструктура в этой функции, видно здесь: http://lxr.linux.no/#linux+v2.6.32/include/linux/bio.h#L58

показывает bio_vec, то есть список вещей собираюсь к устройству.

q-> make_request_fn (q, био); это фактический вызов указателя функции в самом устройстве.

http://lxr.linux.no/#linux+v2.6.32/include/linux/types.h # L126

Показывает, как индексы используются для записи в раздел. Обратите внимание, что это используется не только для записи.

1
ответ дан 17 December 2019 в 22:11
поделиться

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

Редактировать:

Посмотрите код планировщика ввода-вывода .

0
ответ дан 17 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: