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

Kernel architecture questions
  • Мне не удалось скачать.
  • Да, чиото ссылачка глючит.
  • удалено
    Last edited by Heavyiron on Fri Oct 10, 2008 1:13 am, edited 1 time in total.
  • Посмотрел.
    Он распотрошил 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
    то есть весь код инициализации ядра в защищённом режиме порезан теперь на мелкие кусочки.
  • 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
    Подробнее в ветке про звук.
  • Подскажите, как лучше реализовать.
    В моей программе используется диалог открытия файлов. Естественно он запускается отдельным потоком. Встал вопрос о том как узнать, что поток завершился. Есть 2 варианта:
    1) Создать в основной программе переменную, которую поток перед завершением будет устанавливать, и проверять ее состояние в цикле.
    2) Передавать потоку указатель на процедуру в основной программе, которую поток перед завершением будет выполнять.
    Ваше мнение?
  • YELLOW
    А как ты передашь потоку указатель если у него нет параметров ?

    Это зависит от фунции.
    Первый вариант лучше потому что точно не будет проблем с синхронизацией доступа к данным. Системных мьютексов и критических секций нет.
  • YELLOW
    ИМХО первый вариант проще реализовать, намного проще.
  • Передать параметры новому потому можно через его стек ;)
  • Я тоже склонялся к первому варианту. А передать параметры через стек действительно несложно: я в основной программе выделяю память из кучи для стека потока, потом записываю в ее конец параметры, а при старте потока выполняю pop. После завершения потока освобождаю память.
  • mike.dld

    Отличная идея. Если стек заполнить правильно то поток может выполнить return и управление передасться на код exit() которая его завершит. Для программ на ЯВУ в самый раз.
  • С ядром ревизии 406 у меня не работает чтение жёсткого диска(точнее к нему нет доступа).Выдаётся ошибка 5.
    Чтение жёсткого диска специально отключено или просто новое ядро с flat моделью памяти сырое ?
  • andrew_programmer

    Откуда ты качал ядро ? Плоская ветка /branches/flat_kernel. Последнее ядро 405. Там включён ДМА доступ к диску.
  • Качал с kolibrios.org.Раздел download.С svn-ов не качаю, так как svn клиента нет.
  • Who is online

    Users browsing this forum: No registered users and 7 guests