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

Kernel architecture questions
  • Интересно является ли современным любой DVD привод, который трамвай ваще сломался ваще не генерирует прерывания при нажатии кнопки выдвижения лотка с диском.
    нет не является потому как причина по которой он не вытесняется USB это невозможность порчи информации на диске без явно видимых следов и возможности замены информации.

    Я пожалуй перефразирую мой предыдущий пост - А знаете у всех современых устройств есть прерывания и пропаганда таймаутов ваще не должна осуществлятся.
  • ilya wrote:А знаете у всех современых устройств есть прерывания и пропаганда таймаутов ваще не должна осуществлятся.
    Все равно не канает. От одного желания чтобы все было правильно с устройствами так не становится. Есть события которые приходится отлавливать именно с использованием периодических опросов. USB клавиатура и CD\DVD (я подозреваю что и Blu-Ray - наследственность она вещь трудно истребимая) приводы явное тому доказательство.
  • Serge wrote:3. Я считаю что имя диску должно назначать ядро, а не драйвер. Иначе непонятно как избежать коллизии имён.
    Я впринципе согласен, только не имя а ID
    У меня вопрос. Есть ф-ция AddDisk которую исполняет драйвер - каким образом ядро узнает что добавленый диск уникален?
  • Перенес часть сообщение в тему "Ночные" сборки KolibriOS
  • Как продвигается разработка ?
    Начал делать драйвер для ahci, примонтировал диск, на этом всё и закончилось.
  • В связи с работами по настройке нового сервера - никак. Сейчас вроде сервер наконец настроен.
    Сделаем мир лучше!
  • На данный момент с устройствами хранения данных работают два контроллера AHCI и EHCI, для них нужно думать динамическое определение дисков, т.к. их можно менять во время работы. Файловые менеджеры должны получать от системы инфу о смене диска, система должна записать новый диск в общий массив с дисками или убрать от туда диск если например флешку вытащили. Причём диски не физические а логические. А программа проверять массив и обновлять экран.
    Я в массив с дисками записываю тип в котором инфа о диске и туда же функции для работы с этим диском, благо в фасме для запуска функции нужен только её адрес и регистры забить нужной инфой. В массиве с логическими дисками идёт в основном инфа о файловой системе и адрес его физического диска.

    Массива с физическими дисками у меня нету, я сраза при его появлении читаю первый сектор, смотрю его логические диски и читаю их первый сектор с инфой о файловой системе, создаю объект 'диск' и записываю туда инфу о файловой системе и ещё адрес функции чтения, записи сектора. У флешек и дисков функции чтения разные но я делаю одинаковые входные параметры и результат. На запись о диске у меня 128 байт, первый байт его тип файловой системы, а если он = 0, то это значит что дисков больше нету, если = 1 то запись пуста. Прохожу по дискам и добавляю их на экран по сообщению изменении в дисках.
  • Стас
    Было бы интереснее лицезреть сам код, а не одни только комментарии к нему.
  • Сам код чтения логических дисков(fat, ntfs) с физического и их записи в массив вам не пригодятся, у вас другие записи о дисках(не знаю какие), а например функции для контроллера AHCI EHCI(инициализация и чтения с них секторов) могу дать.
  • Тем временем ревизия r2643 заканчивает первый этап плана. Заодно я нашла и исправила баг с разбалансированным стеком в get_free_FAT, появившийся в r74, из-за которого ядро падало при попытке добавления новых данных на полностью заполненный жёсткий диск.

    Специально для нетерпеливых, жаждущих немедленного профита: r2644 содержит исходники драйвера, который по команде от управляющего приложения добавляет или удаляет временный диск указанного размера в памяти. В файловой системе диск появляется как /tmp#/1, где # - цифра от 0 до 9, назначаемая при создании. Скомпилированный драйвер и два консольных приложения для создания и удаления я прилагаю к посту. Все желающие могут заняться написанием GUI с рюшечками, команды драйвера описаны в самом начале исходников драйвера, за взаимодействие с драйвером отвечают системные функции 68.16 и 68.17.
    Attachments
    Управляющие программы
    Downloaded 388 times
    tmpdisk.obj (978 Bytes)
    Драйвер
    Downloaded 381 times
    Сделаем мир лучше!
  • Начиная с r.2643-2644 производится фиктивная запись файлов на разделы FAT32. Предположительно записываются сектора с данными, а сектора с со служебной информацией FAT остаются не записанными. Следовательно записанный файл доступен только до перезагрузки. Шиндовс не видит эти файлы, Колибри после перезагрузки тоже.
  • Да, именно так. Я не учла в r2643, что в заготовке для
    Дополнительная мера для повышения скорости работы — это сделать так чтобы служебные данные раздела и данные директорий - которые бывают нужны часто, а обновляются редко не выбивались из кэша новыми данными. Для этого планировалось разделить кэш на две неравны части — одну меньшую часть для служебных данных, другую большую часть для данных считываемых файлов.
    старая процедура записи кэша сохраняла только одну из двух частей, так что её нужно вызывать дважды. r2653 чинит проблему.
    Сделаем мир лучше!
  • r3742: я перевела на новую схему оставшиеся файловые системы жёстких дисков NTFS и EXT2, а также драйвера жёстких дисков /hd* и /bd*. Могут появиться глюки. FAT12 в двух экземплярах, рамдиск, дискеты и CD пока остаются на старой, нерасширяемой схеме.
    Сделаем мир лучше!
  • 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 не хочет генерировать новые прерывания.
    Сделаем мир лучше!
  • Who is online

    Users browsing this forum: No registered users and 3 guests