Page 20 of 31

Posted: Mon Feb 26, 2007 5:47 pm
by mike.dld
Кто быстрее - гляньте на то, что сделал Trolly: http://meos32.7.forumer.com/viewtopic.php?t=165
Я занят настолько, что смотреть времени как-то нет :-\

Posted: Mon Feb 26, 2007 6:17 pm
by Serge
Мне не удалось скачать.

Posted: Mon Feb 26, 2007 6:20 pm
by Knott
Да, чиото ссылачка глючит.

Posted: Mon Feb 26, 2007 7:05 pm
by Heavyiron
удалено

Posted: Mon Feb 26, 2007 8:24 pm
by Serge
Посмотрел.
Он распотрошил kernel.asm так что от него осталось 3 Кб
При желании его можно совсем удалить, Ville сказать что файла нет и копирайт ставить некуда а вину свалить на trolly.
Если серьёзно то большая часть кода перекочевала в папку /bootstrap и вместо одного большого kernel.asm там 31 маленький файл. Самый короткий 72 байт. Сомневaюсь что это сделало код наглядней. И само деление уж слишком мелкое, например файл loadidt

Code: Select all

; LOAD IDT
        lidt   [cs:idtreg]
        cli

        mov    esi,boot_devices
        call   boot_log
        call   detect_devices
Это весь файл и таких файлов много.
Логика деления иногда нарушена. Можно поделить kernel на несколько файлов оставив в одном весь код загрузки и инициализации ядра, в другом все глобальные переменные и т.д но дробить так сильно не надо.

Поправка.
В /bootstrap попал код от B32 до ;Fly
то есть весь код инициализации ядра в защищённом режиме порезан теперь на мелкие кусочки.

Posted: Tue Feb 27, 2007 3:13 pm
by Serge
http://infinity-sound.narod.ru/infinity.7z

Ядро с новым распределением памяти под плоскую модель

; 0 -> 0x98AFFF kernel
; 0x0098B000 -> kernel heap
;
; 0x01FFFFFF heap min limit
; 0x7DBFFFFF heap max limit
; 0x7DC00000 -> 0x7FBFFFFF LFB 32Mb
; 0x7DC00000 -> 0x7E3FFFFF application available LFB 8Mb
; 0x7E400000 -> 0x7FBFFFFF kernel LFB part 24 Mb
; 0x7FC00000 -> 0x7FFFFFFF page tables 4Mb
; 0x80000000 -> 0xFFFFFFFF application 2Gb

+ Infinity 1.0
Подробнее в ветке про звук.

Posted: Thu Mar 01, 2007 9:09 am
by YELLOW
Подскажите, как лучше реализовать.
В моей программе используется диалог открытия файлов. Естественно он запускается отдельным потоком. Встал вопрос о том как узнать, что поток завершился. Есть 2 варианта:
1) Создать в основной программе переменную, которую поток перед завершением будет устанавливать, и проверять ее состояние в цикле.
2) Передавать потоку указатель на процедуру в основной программе, которую поток перед завершением будет выполнять.
Ваше мнение?

Posted: Thu Mar 01, 2007 1:07 pm
by Serge
YELLOW
А как ты передашь потоку указатель если у него нет параметров ?

Это зависит от фунции.
Первый вариант лучше потому что точно не будет проблем с синхронизацией доступа к данным. Системных мьютексов и критических секций нет.

Posted: Thu Mar 01, 2007 1:32 pm
by Mario79
YELLOW
ИМХО первый вариант проще реализовать, намного проще.

Posted: Thu Mar 01, 2007 1:47 pm
by mike.dld
Передать параметры новому потому можно через его стек ;)

Posted: Thu Mar 01, 2007 2:08 pm
by YELLOW
Я тоже склонялся к первому варианту. А передать параметры через стек действительно несложно: я в основной программе выделяю память из кучи для стека потока, потом записываю в ее конец параметры, а при старте потока выполняю pop. После завершения потока освобождаю память.

Posted: Thu Mar 01, 2007 2:08 pm
by Serge
mike.dld

Отличная идея. Если стек заполнить правильно то поток может выполнить return и управление передасться на код exit() которая его завершит. Для программ на ЯВУ в самый раз.

Posted: Fri Mar 09, 2007 11:13 pm
by andrew_programmer
С ядром ревизии 406 у меня не работает чтение жёсткого диска(точнее к нему нет доступа).Выдаётся ошибка 5.
Чтение жёсткого диска специально отключено или просто новое ядро с flat моделью памяти сырое ?

Posted: Sat Mar 10, 2007 12:18 am
by Serge
andrew_programmer

Откуда ты качал ядро ? Плоская ветка /branches/flat_kernel. Последнее ядро 405. Там включён ДМА доступ к диску.

Posted: Sat Mar 10, 2007 12:24 am
by andrew_programmer
Качал с kolibrios.org.Раздел download.С svn-ов не качаю, так как svn клиента нет.