Page 3 of 5

Re: Динамическое определение дисковых устройств

Posted: Fri Sep 02, 2011 7:33 pm
by Mario
ilya wrote:А знаете у всех современых устройств есть прерывания, таймауты ваще не должны использоватся
Интересно является ли современным любой DVD привод, который трамвай ваще сломался ваще не генерирует прерывания при нажатии кнопки выдвижения лотка с диском.
ilya wrote:2 клавы - 2 драйвера клавы
Угу, 640 Кб хватит всем.

Re: Динамическое определение дисковых устройств

Posted: Fri Sep 02, 2011 8:29 pm
by ilya
Интересно является ли современным любой DVD привод, который трамвай ваще сломался ваще не генерирует прерывания при нажатии кнопки выдвижения лотка с диском.
нет не является потому как причина по которой он не вытесняется USB это невозможность порчи информации на диске без явно видимых следов и возможности замены информации.

Я пожалуй перефразирую мой предыдущий пост - А знаете у всех современых устройств есть прерывания и пропаганда таймаутов ваще не должна осуществлятся.

Re: Динамическое определение дисковых устройств

Posted: Fri Sep 02, 2011 8:37 pm
by Mario
ilya wrote:А знаете у всех современых устройств есть прерывания и пропаганда таймаутов ваще не должна осуществлятся.
Все равно не канает. От одного желания чтобы все было правильно с устройствами так не становится. Есть события которые приходится отлавливать именно с использованием периодических опросов. USB клавиатура и CD\DVD (я подозреваю что и Blu-Ray - наследственность она вещь трудно истребимая) приводы явное тому доказательство.

Re: Динамическое определение дисковых устройств

Posted: Fri Sep 02, 2011 9:21 pm
by ilya
Serge wrote:3. Я считаю что имя диску должно назначать ядро, а не драйвер. Иначе непонятно как избежать коллизии имён.
Я впринципе согласен, только не имя а ID
У меня вопрос. Есть ф-ция AddDisk которую исполняет драйвер - каким образом ядро узнает что добавленый диск уникален?

Re: Динамическое определение дисковых устройств

Posted: Wed Sep 07, 2011 7:24 pm
by Mario
Перенес часть сообщение в тему "Ночные" сборки KolibriOS

Re: Динамическое определение дисковых устройств

Posted: Fri Sep 23, 2011 3:46 pm
by Serge
Как продвигается разработка ?
Начал делать драйвер для ahci, примонтировал диск, на этом всё и закончилось.

Re: Динамическое определение дисковых устройств

Posted: Fri Sep 23, 2011 9:38 pm
by CleverMouse
В связи с работами по настройке нового сервера - никак. Сейчас вроде сервер наконец настроен.

Re: Динамическое определение дисковых устройств

Posted: Tue Apr 10, 2012 4:25 am
by Стас
На данный момент с устройствами хранения данных работают два контроллера AHCI и EHCI, для них нужно думать динамическое определение дисков, т.к. их можно менять во время работы. Файловые менеджеры должны получать от системы инфу о смене диска, система должна записать новый диск в общий массив с дисками или убрать от туда диск если например флешку вытащили. Причём диски не физические а логические. А программа проверять массив и обновлять экран.
Я в массив с дисками записываю тип в котором инфа о диске и туда же функции для работы с этим диском, благо в фасме для запуска функции нужен только её адрес и регистры забить нужной инфой. В массиве с логическими дисками идёт в основном инфа о файловой системе и адрес его физического диска.

Массива с физическими дисками у меня нету, я сраза при его появлении читаю первый сектор, смотрю его логические диски и читаю их первый сектор с инфой о файловой системе, создаю объект 'диск' и записываю туда инфу о файловой системе и ещё адрес функции чтения, записи сектора. У флешек и дисков функции чтения разные но я делаю одинаковые входные параметры и результат. На запись о диске у меня 128 байт, первый байт его тип файловой системы, а если он = 0, то это значит что дисков больше нету, если = 1 то запись пуста. Прохожу по дискам и добавляю их на экран по сообщению изменении в дисках.

Re: Динамическое определение дисковых устройств

Posted: Tue Apr 10, 2012 10:04 am
by art_zh
Стас
Было бы интереснее лицезреть сам код, а не одни только комментарии к нему.

Re: Динамическое определение дисковых устройств

Posted: Tue Apr 10, 2012 12:04 pm
by Стас
Сам код чтения логических дисков(fat, ntfs) с физического и их записи в массив вам не пригодятся, у вас другие записи о дисках(не знаю какие), а например функции для контроллера AHCI EHCI(инициализация и чтения с них секторов) могу дать.

Re: Динамическое определение дисковых устройств

Posted: Mon Apr 23, 2012 12:38 pm
by CleverMouse
Тем временем ревизия r2643 заканчивает первый этап плана. Заодно я нашла и исправила баг с разбалансированным стеком в get_free_FAT, появившийся в r74, из-за которого ядро падало при попытке добавления новых данных на полностью заполненный жёсткий диск.

Специально для нетерпеливых, жаждущих немедленного профита: r2644 содержит исходники драйвера, который по команде от управляющего приложения добавляет или удаляет временный диск указанного размера в памяти. В файловой системе диск появляется как /tmp#/1, где # - цифра от 0 до 9, назначаемая при создании. Скомпилированный драйвер и два консольных приложения для создания и удаления я прилагаю к посту. Все желающие могут заняться написанием GUI с рюшечками, команды драйвера описаны в самом начале исходников драйвера, за взаимодействие с драйвером отвечают системные функции 68.16 и 68.17.

Re: Динамическое определение дисковых устройств

Posted: Fri Apr 27, 2012 2:43 pm
by Mario
Начиная с r.2643-2644 производится фиктивная запись файлов на разделы FAT32. Предположительно записываются сектора с данными, а сектора с со служебной информацией FAT остаются не записанными. Следовательно записанный файл доступен только до перезагрузки. Шиндовс не видит эти файлы, Колибри после перезагрузки тоже.

Re: Динамическое определение дисковых устройств

Posted: Fri Apr 27, 2012 7:42 pm
by CleverMouse
Да, именно так. Я не учла в r2643, что в заготовке для
Дополнительная мера для повышения скорости работы — это сделать так чтобы служебные данные раздела и данные директорий - которые бывают нужны часто, а обновляются редко не выбивались из кэша новыми данными. Для этого планировалось разделить кэш на две неравны части — одну меньшую часть для служебных данных, другую большую часть для данных считываемых файлов.
старая процедура записи кэша сохраняла только одну из двух частей, так что её нужно вызывать дважды. r2653 чинит проблему.

Re: Динамическое определение дисковых устройств

Posted: Mon Jul 01, 2013 7:34 pm
by CleverMouse
r3742: я перевела на новую схему оставшиеся файловые системы жёстких дисков NTFS и EXT2, а также драйвера жёстких дисков /hd* и /bd*. Могут появиться глюки. FAT12 в двух экземплярах, рамдиск, дискеты и CD пока остаются на старой, нерасширяемой схеме.

Re: Динамическое определение дисковых устройств

Posted: Thu Nov 21, 2013 7:44 pm
by CleverMouse
r4273: я перевела на новую схему рамдиск, дискеты и объединила код FAT12 с остальными вариантами FAT. Могут появиться глюки. Жёсткие нерасширяемые зависимости остаются только у CD с собственным кэшем и iso-сколько-то-там-fs.
  • Рамдиск наконец-то получил возможность изменять размер. К сожалению, есть ещё одно наследие Menuet, мешающее полной функциональности: из-за фиксированной карты адресов память за пределами 1.44М уже используется под другие цели, поэтому рамдиск нельзя увеличить. Зато, если катастрофически не хватает памяти, теперь можно загружать рамдиск меньшего размера - лишняя зарезервированная память пойдёт в дело. Ядро определяет размер рамдиска по содержимому образа - размера файла образа оно не видит.
  • В качестве бесплатного бонуса на рамдиске может быть любая поддерживаемая файловая система. Хоть ntfs, если не нужна запись, хоть ext4. Хоть несколько разделов.
  • Сохранение рамдиска на дискету проверяет размер и сразу возвращает ошибку при несоответствии. Сохранение рамдиска в файл создаёт файл размера такого же, каков размер рамдиска. Размер дискеты полагается фиксированным 1440 Кб.
  • 58-й функции больше нет.
  • Дискеты используют тот же код кэша, что и жёсткие диски, так что автоматически кэшируется то, что нужно, с выбором размера кэша в зависимости от количества свободной памяти. Раньше для дискет кэшировались только корневой каталог и таблица FAT.
  • Политика обновления кэша дискеты такая же, как и раньше: если с момента последней операции прошло более 5 секунд, то ядро гасит мотор дисковода и считает кэш недействительным. В пределах 5 секунд перед каждой файловой операцией ядро дёргает бутсектор дискеты и сверяет метку с хранимой меткой; если они не совпадают, ядро считает кэш недействительным.
  • Вторая дискета, если есть, теперь называется /fd2/1 вместо /fd/2. /fd/2, как и для жёстких дисков, будет означать второй раздел, если кому-то в голову придёт крайне странная идея сделать MBR на дискете.
  • Я починила работу с дискетой в Bochs. Технические подробности: Bochs требует, чтобы после сброса и после команды RECALIBRATE система читала статус сброса и команды, это сбрасывает статус прерывания, без этого Bochs не хочет генерировать новые прерывания.