Page 30 of 31

Re: Новая модель ядра

Posted: Mon May 27, 2013 10:57 pm
by Mario_r4
Отвечу по тем пунктам где я виноват, что они вообще появились. Наверное мне не нужно было вообще делать, так как я делаю 90% говна.
Serge wrote: Изучение завалов поставило поставило несколько вопросов
Нужно ли массиву DRIVE_DATA 65536 байт ?
Не обязательно. Можно выделять динамически, добавляя по мере обнаружения новых разделов. Хочется? Вперед.
Serge wrote: Сколько на самом деле памяти требуют
...
BPSLine_calc_area equ (OS_BASE+0x02C4000) и
d_width_calc_area equ (OS_BASE+0x02CA000) ?
Размер выбран с запасом под максимальный режим экрана. Вроде 2400*1600, точно не помню. Можно выделять динамически, выбирая под текущий размер видеорежима. Хочется? Вперед.

Это не мое, но влезу - потому что я такой говнюк, который таки лезет везде. А еще я один из самых старых маразматиков в проекте.
Serge wrote:Нужен ли рестарт ядра, если usb клавиатура больше не эмулируется, да и сам рестарт работает не у всех ?
Перезапуск ядра без перезапуска компьютера был полезной фичей в некоторых случаях. Например для смены разрешения экрана - это быстрее чем добавлять BIOS и рестарт железа.

Re: Новая модель ядра

Posted: Mon May 27, 2013 11:54 pm
by Serge
Я не знаю ядро как свои пять пальцев, во всяком случае не все чего части, и у меня нет желания возиться сейчас с динамическим выделением памяти. Потому и спрашиваю у знающих, сколько нужно в байтах, пусть и с некоторым запасом.

Re: Новая модель ядра

Posted: Thu May 30, 2013 7:50 am
by Mario_r4
Serge
Ревизия 3558 поломала изменения сделанные в ревизии 3536. Теперь меню снова срабатывает через раз.

Re: Новая модель ядра

Posted: Thu May 30, 2013 8:26 am
by Serge
А теперь ?

Re: Новая модель ядра

Posted: Thu May 30, 2013 8:28 am
by Mario_r4
Serge wrote:А теперь ?
Ревизия 3576 исправила проблему. Спасибо.

Re: Новая модель ядра

Posted: Sun Sep 14, 2014 2:40 pm
by Serge
Многострадальное ядро kolibri-process готово к тестам.
Хотя Колибри поддерживает многопоточность, потоки одного процесса фактически независимы друг от друга. Каждый поток хранит свой набор данных, в том числе и разделяемых между потоками одного процесса. Это создаёт проблемы при изменении таких данных,например при операциях с памятью или загрузках DLL, потому что необходимо найти и модифицировать содержимое в структурах других потоков. Синхронизация доступа к данным так же проблематична. Kolibri-process решает эту проблему при помощи новой структуры PROC, хранящей общие переменные.

Code: Select all

struct  PROC
        list            LHEAD
        thr_list        LHEAD
        heap_lock       MUTEX
        heap_base       rd 1
        heap_top        rd 1
        mem_used        rd 1
        dlls_list_ptr   rd 1
        pdt_0_phys      rd 1
        pdt_1_phys      rd 1
        io_map_0        rd 1
        io_map_1        rd 1

        unused          rb 4096-$; reserved for handles
        pdt_0           rd 1024
ends
Каждая структура хранит указатели двусвязного списка дочерних потоков, мьютекс кучи приложения, указатель списка загруженных dll, физические адреса страничного каталога и карты разрешения ввода-вывода. В структуру APPDATA добавлены указатели двусвязного списка потоков и указатель на структуру родительского процесса. В результате изменений в ядре удалось упростить код, уменьшить его размер и ускорить некоторые системные вызовы.

Re: Новая модель ядра

Posted: Sun Sep 14, 2014 3:08 pm
by Mario_r4
Serge
А уже существующий код использующий многопоточность сильно переделывать придется при переходе на ядро kolibri-process?

Re: Новая модель ядра

Posted: Sun Sep 14, 2014 6:34 pm
by Serge
Mario_r4
Для приложений пока ничего не меняется. Потом добавлю мьютексы и другие примитивы для синхронизации.

Re: Новая модель ядра

Posted: Mon Sep 15, 2014 12:51 pm
by CleverMouse
Зачем io_map делать per-process, а не per-thread?

Re: Новая модель ядра

Posted: Mon Sep 15, 2014 4:00 pm
by Serge
Оставлять per-thread как-то не логично. Это же часть адресного пространства, значит должна быть общей для всех потоков в процессе.

Re: Новая модель ядра

Posted: Mon Sep 15, 2014 4:33 pm
by CleverMouse
Порты ввода-вывода - часть адресного пространства?

Re: Новая модель ядра

Posted: Mon Sep 15, 2014 4:40 pm
by Serge
На мой взгляд да, параллельная часть. Если поток получит доступ к mmio, его получат и остальные потоки в адресном пространстве. Почему с традиционными портами должно быть иначе ?

Re: Новая модель ядра

Posted: Tue Sep 16, 2014 9:00 am
by Serge
Как-то лениво народ реагирует. Ладно, лучший тест - ночная сборка. Через пару дней залью.

Re: Новая модель ядра

Posted: Thu Oct 30, 2014 3:52 pm
by Leency
Serge, спасибо. Вроде бы работает всё стабильно. Дымовой тест точно проходит :)

Re: Новая модель ядра

Posted: Sun Nov 02, 2014 9:46 pm
by Dragon
Да, карта ввода-вывода - это составная часть адресного пространства процесса, и к потокам не имеет никакого отношения.