2010-11-21 4 views
1

Возможно ли создать блок-устройство Linux (2.6) (например, устройство петли) с нечетным размером? Я не мог этого добиться. losetup, похоже, округляет до 512 байт. Устройства ubd устройств User-mode Linux ubd, похоже, округляют до 512 байт. В struct request у нас есть sector_t __sector для смещения блока для операций чтения/записи.Блочное устройство Linux с нечетным (даже не) размером

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

ответ

1

№. Блок-уровень Linux 2.6 не понимает ничего меньшего, чем 512 байт. Все, что меньше (особенно не для 2), потребует серьезной перезаписи большого количества кода.

1

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

Способ обойти это, как вы упомянули, использовать ориентированное на персонаж устройство или абстракцию. Это центральное место в модели устройств Unix: все это серия октетов, за исключением вещей, которые могут быть виртуализированы только как одна.

+0

Я в порядке с гранулярностью блоков, но с этим мы все еще можем иметь нечетный размер устройства: просто сделайте последний блок меньше остальных. Однако акцент на моем вопросе не философский: меня интересует реализация Linux kernel 2.6. – pts

+0

Это именно то, что я имел в виду под «более дорогостоящим вычислением». Окружающий каждый доступ с помощью «это последний частичный блок?» предикаты являются дорогостоящими при применении к каждой операции ввода-вывода. – msw

 Смежные вопросы

  • Нет связанных вопросов^_^