Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт фев 23, 2018 2:02 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 282 сообщения ]  На страницу Пред. 1 2 3 4 5 619 След.
Автор Сообщение
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Вт апр 14, 2015 3:14 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1611
Pathoswithin писал(а):
Читал, но не нашёл там вопроса про редактирование ядра, по этому прочитал "Q4. I want to build the entire system." и видимо неправильно понял:

Если в Q1 и Q2 вместо "one program" было бы "one program, driver or the kernel" и дополнительно был бы пункт "Q. I want to replace one program, driver or the kernel in the system image with my own version" с ответом, это сняло бы вопрос? Если да, то я добавлю, когда будет время.

Pathoswithin писал(а):
К тому же столкнулся с проблемой: похоже windows ещё на этапе загрузчика исправляет ошибки в файловой системе, и после перезагрузки в hex редакторе всё без изменений

Больше похоже на то, что windows в hibernate вместо полного выключения. Или на то, что запись не сработала.

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Вт апр 14, 2015 5:05 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1197
Лучше написать "I have modified kernel, driver or program source code, and want to test changes". А ещё неплохо бы на видном месте написать, что такое SVN. Я, например, в open source впервые.

У меня windows установлена на fat32, для тестирования создаю ntfs раздел, колибри запускаю через mtldr. Результат работы виден во всех файловых менеджерах, но исчезает после перезагрузки, в том числе без загрузки windows. Загрузчик работает с файловой системой, а значит обнаруживает ошибки в корневом каталоге и может попытатся их исправить, в данном случае это легко. Лучше всего было бы смотреть в hexview, но как я понял, функция чтения раздела у вас уже отсутствует.


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Вт апр 14, 2015 5:53 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1611
Pathoswithin писал(а):
Результат работы виден во всех файловых менеджерах, но исчезает после перезагрузки, в том числе без загрузки windows.

Скорее всего, данные записались в дисковый кэш, но кэш не записался на диск. disk_sync вызываешь?

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Вт апр 14, 2015 7:46 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1197
disk_sync? Я даже не знаю, что это такое! У вас где-то описаны внутренние вызовы ядра? Я использую fs_write64_sys. Как я понял, старые вызовы использовали кэш, а новым то он зачем? Или давайте прямо - вы знаете чем я занимаюсь... Чего ещё я не знаю?


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Вт апр 14, 2015 8:26 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1611
Pathoswithin писал(а):
У вас где-то описаны внутренние вызовы ядра?
Увы, с этим плохо.

fs_write64_sys пишет в дисковый кэш. Пока кэш не переполнится, записанные данные остаются только в памяти. disk_sync записывает все изменённые данные из кэша на диск. disk_sync по возможности объединяет операции записи - если изменены несколько подряд идущих секторов, они будут записаны одной операцией, это существенно ускоряет работу. Поэтому disk_sync лучше вызывать в конце операции. В коде FAT, например, в конце каждой функции записи есть вызов update_disk, которая, в частности, вызывает disk_sync.

Pathoswithin писал(а):
Чего ещё я не знаю?

Из неочевидного: несколько потоков могут одновременно вызвать функции файловой системы, в том числе для одного и того же раздела, и глобальных блокировок нет, файловая система должна сама заботиться о том, чтобы разные потоки друг другу не мешали. В свою очередь, функции fs_{read,write}* готовы к тому, что их будут вызывать параллельно из разных потоков. Сейчас все файловые системы держат для каждого раздела отдельный мьютекс, все функции файловой системы начинаются с mutex_lock на этом мьютексе и заканчиваются mutex_unlock - осталось от времени, когда глобальная блокировка была, далеко от идеала, но работает. Read-write глобальных переменных лучше избегать совсем, но если очень надо, для них нужно будет заводить отдельный мьютекс.

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Ср апр 15, 2015 12:19 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1197
У меня есть указатель на структуру NTFS PARTITION под мьютексом. Глобальных переменных нельзя, а структуру изменять можно? И разве не должен дисковый кэш записываться перед выключением системы?


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Ср апр 15, 2015 10:12 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1611
Pathoswithin писал(а):
У меня есть указатель на структуру NTFS PARTITION под мьютексом. Глобальных переменных нельзя, а структуру изменять можно?
Да, для этого мьютекс и берётся. Под PARTITION-специфичным мьютексом не может быть двух потоков, обращающихся к одному и тому же разделу, но вполне могут быть несколько потоков, обрабатывающих разные разделы или диски, - пока нет записи в глобальные read-write переменные, они друг другу не мешают.

Pathoswithin писал(а):
И разве не должен дисковый кэш записываться перед выключением системы?
Только перед выключением - нет, потому что а) пользователь может отключить флешки и внешние диски и без выключения системы и б) иногда бывают аварийные ситуации вроде внезапного отключения электричества. Запись кэша сразу после каждого вызова файловой системы - тоже неидеальный вариант, но чего-то более умного никто не написал.

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Чт апр 16, 2015 7:55 pm 
Не в сети
Just Flooding
Аватара пользователя

Зарегистрирован: Чт дек 11, 2014 1:31 am
Сообщения: 173
CleverMouse писал(а):
[...]
а) пользователь может отключить флешки и внешние диски и без выключения системы; и
б) иногда бывают аварийные ситуации вроде внезапного отключения электричества.
Запись кэша сразу после каждого вызова файловой системы - тоже неидеальный вариант, но чего-то более умного никто не написал.
А ни чего более умного и быть не может, процесс записи зависит от наличия электрического тока в медных жилах условного зверя:
  • хочешь выключить, записывай;
  • ИБП послал сообщение о выключении через 30 сек, записывай;
  • юзверь сообщил системе о безопасном извлечении USB, записывай и давай сообщение;
  • юзверь выдернул не сообщив системе об извлечении USB\SCSI\eSATA, его проблемы;
  • простой системы, запиши чтобы не нервничать;
  • приложение просит освободить кэш и записать, запиши сразу...


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Чт апр 16, 2015 11:13 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1197
А обрабатывать исключения у вас можно? Например дописать буфер при ошибке доступа к памяти?

kiv писал(а):
[*] юзверь сообщил системе о безопасном извлечении USB, записывай и давай сообщение;
[*] юзверь выдернул не сообщив системе об извлечении USB\SCSI\eSATA, его проблемы;
[*] простой системы, запиши чтобы не нервничать;
Кстати, да. В windows тоже есть отложенная запись. В идеале кэш должен не терпеть до последнего, а скорее осуществлять сглаживающую функцию. То есть записывать сразу, но во время записи продолжать принимать запросы.


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Пт апр 17, 2015 12:59 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3936
Pathoswithin
А при каких условиях возникнет эта ошибка ?


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Пт апр 17, 2015 7:54 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1197
Ну например мне нужно просмотреть битмап чтобы найти место для файла. У раздела на 2 Тб битмап будет 64Мб. Многовато чтобы изначально хранить в памяти. Просматривать нужно сравнивая каждый dword с -1, так ещё и счётчик буфера проверять. Можно конечно использовать repz scasd и убить двух зайцев, но он сначала сравнивает, а потом увеличивает di, и приходится его уменьшать, что тоже может быть существенно. Короче, спросил на всякий случай.


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Пт апр 17, 2015 9:34 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3936
Значит надо смотреть по частям. Ядро рассматривает страничные ошибки в верхних 2Гб как фатальные.


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Вт апр 21, 2015 5:31 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1197
А как вообще с расширением памяти? В windows при выделении страниц можно указывать желаемый виртуальный адрес, можно резервировать адреса. Мне для битмапа нужен целый кусок памяти. Хранить всё время - многовато, считывать каждый раз - долго. Нужна буферизация по требованию.


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Вт апр 21, 2015 9:09 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3936
64 Мб зарезервировать можно. Памятью придётся управлять вручную.
alloc_kernel_space stdcall, size:dword
резервируем диапазон адресов.
alloc_pages stdcall, count:dword выделяем count страниц. Страницы физически непрерывны, количество желательно кратно восьми.
commit_pages: выполняет маппинг.
; eax= page base + page flags
; ebx= linear address
; ecx= count

release_pages чистит таблицы страниц и возвращает страницы в пул свободных.
; eax= linear memory address
; ecx= count


Вернуться к началу
 Заголовок сообщения: Re: NTFS
СообщениеДобавлено: Ср апр 22, 2015 12:51 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1197
alloc_kernel_space - Размер в чём? Возвращает начальный адрес?
alloc_pages - Количество по 4 кб? Насколько желательно по 8? Что возвращает?
commit_pages - подробней про eax


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 282 сообщения ]  На страницу Пред. 1 2 3 4 5 619 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB