Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Подскажите по типам драйверов и расположении в иерархии.  (Прочитано 21824 раз)
0 Пользователей и 1 Гость смотрят эту тему.
exploys
Интересующийся

ru
Offline Offline

« : 08-06-2011 18:50 » 

Подскажите по типам драйверов и расположении в иерархии.
Интересует Windows. В будущем Linux.
Делаю RAM диск с сжатием. Отведенное ОЗУ фиксировано, а объем устройства плавает в зависимости от

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

это Kernel mode drivers (драйверы режима ядра) -> уровень промежуточный (intermediate) драйвера

виртуальных дисков.
Возникает несколько вопросов:
1. Как быть с динамически меняющимся размером блоков или их количеством в зависимости от сжатия?
2. Какой тип драйвера имеет доступ и управление к таблице занятых кластеров/блоков?
3. Какой тип драйвера имеет доступ и управление к таблице бэд секторов и какие виды секторов помимо

bad и good бывают?

Правильно ли я представляю себе иерархию драйверов?

Драйвер файловой системы (Kernel mode drivers (high-level))
  ^ |
  |  V
Буферный кэш-пул
  ^ |
  |  V
Драйвер логического диска (виртуального) (Kernel mode drivers (intermediate-level))
  ^ |
  |  V
Драйвер физического диска (устройства) (Kernel mode drivers (low-level))
  ^ |
  |  V
Физический диск (устройство)

Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 08-06-2011 20:15 » 

не совсем понял, какая связь между драйвером виртуального диском и бэд-секторами?
вы собираетесь ошибки диска эмулировать?)
или вам вплоть до физического уровня надо ВСЕ сделать?

может быть в качестве учебного примера вам подойдет RamDisk и ряд вопросов снимется?)

архитектура - вроде похоже на правду. хотя насчет кэша не уверен... вы какой кэш имели в виду?
чуть подробнее наверное можно попробовать поискать тут:
Storage Driver Architecture или на примере PCI IDE Controller  целиком стек.
и в разделе Installable File System
« Последнее редактирование: 08-06-2011 20:18 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
exploys
Интересующийся

ru
Offline Offline

« Ответ #2 : 08-06-2011 22:19 » 

Так ну ща попробуем с RamDisk-ом Улыбаюсь

Бэд блоки чисто для понимания.
Буферный пул имеется ввиду - кэш ОС.
И самое интересное если я сделаю такой же RAM но с сжатием то как поведёт себя файловая система изза того что размер диска то увеличивается то уменьшается?

Добавлено через 12 минут и 25 секунд:
На счет того, что DDK надо использовать, а в частности WDF (Kernel Mode Driver Framework (KMDF) для вирт диска и User Mode Driver Framework (UMDF) если для ФС) знаю.
Просто есть неясные момент.
« Последнее редактирование: 08-06-2011 22:31 от exploys » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 09-06-2011 07:37 » 

не буду врать, я дисками я никогда особо не разбирался, но:
1. диспечер кеша (судя по тому, что его функции  CcXXX оперируют с объектами PFILE_OBJECT) должен находится где то над файловой системой либо рядом.
2. а кроме того, функции кеширования описаны в разделе  IFS. так что опять же...

ЗЫ сейчас если найду кому Руссиновича отдал... посмотрю, кажется в нем что то было на тему кеширования. и точно было где то на форуме.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
exploys
Интересующийся

ru
Offline Offline

« Ответ #4 : 09-06-2011 13:55 » 

Кстати, а под Linux иерархия драйверов выглядит примерно так же и какого уровня драйвера нужно писать для собственной файловой системы и собственного логического диска?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 09-06-2011 17:43 » 

с линуксом, увы, помочь не могу)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 09-06-2011 19:42 » 

exploys, логично, что драйвер конкретной ФС должен быть под драйвером VFS и над кешом.




Тут Linux Device Drivers третьей редакции:
https://club.shelek.ru/viewfiles.php?id=32

По части ФС:
http://inglorion.net/documents/tutorials/tutorfs/
http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/
« Последнее редактирование: 09-06-2011 19:49 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 10-06-2011 09:03 » 

RXL, видимо в линуксе кэшируются дисковые блоки, а в Windows - файлы. вот так нелогично у них получилось)
но плюсы/минусы наверное есть в обоих подходах...


* Windows_Cache.jpg (31.76 Кб - загружено 1591 раз.)
« Последнее редактирование: 10-06-2011 09:05 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 10-06-2011 10:56 » 

Блоки - это логично. Файлы - не логично. Потому, что файлы состоят из блоков, но не все блоки нужно кешировать. Думаю в NT как раз блоки файлов кешируются, а не файлы целиком.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 10-06-2011 11:48 » 

Ром, ну речь же не о том что файлы состоят из байт и килобайт)

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

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 10-06-2011 12:25 » 

А... Понятно.

В Линуксе (и во многих других unix-like) также можно читать устройства и содержимое файлов в обход кеша - direct IO.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 10-06-2011 14:19 » 

да и в Windows - можно.
 думаю что по функционалу современные ОСи мало чем отличаются)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 10-06-2011 15:27 » 

К примеру, в последней статье Макс писал, что у HP-UX нет direct IO. Значит не все. Архитектуры все таки разные.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 10-06-2011 16:09 » 

однако люди пишут что можно включить... правда разом для всего раздела. 
To enable direct IO on HPUX you need to set certain vxvfs mount
options: mincache=direct covosync=direct.

только... надо ли это?
но это уже оффтопик)
и тем более в этом я вообще не-в-зуб-ногой)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
exploys
Интересующийся

ru
Offline Offline

« Ответ #14 : 19-06-2011 20:25 » 

Ром, ну речь же не о том что файлы состоят из байт и килобайт)

речь о том что в линуксе по твоим словам - кэш диска ничего не знает о файловой системе и о назначении тех блоков которые он хранит.
а в винде запрос на чтение файла фактически поступает в Кэш, который догружает необходимые участки файла через драйвер файловой системы. то есть они более тесно связаны и трудно сказать кто выше кто ниже.
Тут видимо дело в том, что в Windows предполагается использовать одну файловую систему, а в Linux множество под VFS, в том числе через FUSE.
По этому если давать каждой ФС буферный пул, может получиться ненужная множественная повторная буферизация.
Если же буферный пул давать VFS, то это может быть не оптимально для файловых систем со сжатием. Лучше хранить в ОЗУ сжатые блоки, чем распакованные куски файлов. Тем более это нужно делать если ФС с шифрованием, держать шифрованные никаких проблем, а расшифрованные в памяти не есть гуд.

Кстати, а кто-нибудь делал и насколько легко реализуется собственная ФС под Windows?
Я так понимаю легкого механизма типа FUSE там нету, есть только виртуальный слой "устанавливаемой файловой системы" (Installable File System) и нужно использовать WDK Драйвер файловой системы (Kernel mode drivers (high-level))

Добавлено через 4 минуты и 52 секунды:
И ещё, в файловых системах NTFS, ext2/3, XFS, ZFS файлы всегда хранятся последовательным набором блоков на диске или односвязным списком блоков (один файл может быть фрагментирован) и где тогда хранятся метаданные о последовательности блоков, в конце каждого из этих блоков?
« Последнее редактирование: 19-06-2011 20:30 от exploys » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #15 : 19-06-2011 20:48 » 

exploys, NTFS закрытый стандарт, но документацию по нему найти можно. Но она вся написана путем обратного инжеринга.
Другие озвученные тобой файловые системы это отерытый стандарт. Можеш спокойно по ним найти официальные доки.
Вот например по ext2 http://www.opennet.ru/docs/RUS/ext2fs_lowlevel/
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 20-06-2011 06:33 » 

О Ext2/3 сказать могу: там тройная система. В самом inode хранятся указатели на 15 блоков: 13 для прямой адресации, один для косвенной и один для двойной косвенной. Сперва используется прямая адресация. Далее используется косвенная адресация через блок, хранящий указатели на блоки с данными. Потом вступает в действие двухуровневая косвенность: inode ссылается на блок, содержащий ссылки на другие блоки, которые, в свою очередь, ссылаются на блоки с данными. В Ext4 выделение несколько переделали - реализовали экстенты для более производительного управления.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
exploys
Интересующийся

ru
Offline Offline

« Ответ #17 : 27-10-2011 16:33 » 

Кстати, а кто-нибудь сам писал собственные файловые системы или устанавливал другие файловые системы под Windows?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 27-10-2011 17:06 » 

Что значит - устанавливал? Использовал? Тогда - да, я использовал ext2/ext3 под Виндой - IFS driver.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 27-10-2011 18:27 » 

Есть драйверы разных ФС из Linux: для ext2, ext3, Raiser-FS. На XP работали сносно. С тех давних пор на одной машине две операционки на разных дисках не держал.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines