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

Kernel architecture questions
  • sempron2500 1750MHz/512PC3200 Hynix/nf2 U400 (epox 83da3l)/vesa 3.0/1024x768/32/mtrr вкл/vrr вкл
    Vrr не сработал
  • Vrr не сработал
    У меня vrr тоже не работает. Буду разбираться. Ошибку с HD я исправил, остался непонятный глюк с дискетой.

    Когда разберусь с багами сделfю драйвер для Nforce. Но его нужно будет тестить. Можешь помочь?
  • Правильно ли я понимаю, что
    а) старый менеджер памяти от Халявина полностью удалён?
    б) области памяти меньше страницы в этом ядре выделять нельзя?
    в) функции 69 (отладка) вообще нет?
    Можно ли портировать код загрузки COFF для приложений (3-кольца)?
  • diamond
    а) Да

    б) Да. kernel_alloc выделяет память страницами в ядре а user_alloc в памяти программы
    Еще надо сделать malloc работающий с локальными кучами и в ядре. Тогда можно будет создавать небольшие объекты ядра - дескрипторы файлов, события, очереди, списки и пр. А видеодрайвер сможет загружать в неиспользуюемую видеопамять шрифты, курсоры, картинки, иконки и т.д.

    в)Отладчику нужны read_process_memmory и write_process_memory. Когда я напишу эти функции то подключу его.

    Загрузчик COFF надо улучшить. Я делал его на скорую руку по старыми Си наброскам. Там нет проверок на ошибки и много чего еще. В этой версиии ядро работает как DLL (экспортирует функции) а драйверы их импортируют. Можно сделать два вида DLL - обычные и системные. Обычные - это односекционный COFF загружаются в любое свободное место в памяти приложения. Для системных будут резервироваться верхние 64 или 128 Мб адресов в памяти приложения. Секции кода и константных данных будут разделяться между всеми приложениями. Изменяемые данные будут локальными. Такая библиотека должна регестрироваться в ядре при первой загрузке.
  • Извиняюсь за задержку - не было доступа к нету. Теперь вроде ситуация с интернетом стабилизировалась и я готов помочь, чем смогу.
  • б) А менеджер памяти от Халявина поддерживает выделение блоков меньше страницы. Возможно, имеет смысл использовать его, заменив там функции выделения страниц?
    Ушёл к умным, знающим и культурным людям.
  • Халявин писал что его менеджер может выделить всего 24 блока памяти. Если его можно переписать то хорошо. В принципе подойдет любая качественная, стабильная и хорошо проверенная malloc. Например из glibc

    Heavyiron
    Спасибо. Я напишу когда будет что тестить.

    http://infinity-sound.narod.ru/060_rev_002.7z работа над ошибками и небольшой бонус.
  • Я имел ввиду 24 блока физической памяти - для драйверов, которым нужны непрерывные буферы размера больше страницы.
  • Исправил определение памятив 18.16 и 18.17

    Функция 18, подфункция 20 - получить информацию о подсистеме памяти

    eax = 68 - номер функции
    ebx = 20 - номер подфункции
    ecx = адрес структуры MEM_INFO

    Возвращаемое значение:
    нет

    Code: Select all

    struc MEM_INFO
    { .pages_count     dd ?  ;всего страниц памяти
      .pages_free      dd ?  ;доступно страниц
      .page_faults     dd ?  ;страничных ошибок
      .heap_size       dd ?  ;куча ядра, байт
      .heap_free       dd ?  ;доступно, байт
      .heap_blocks     dd ?  ;всего блоков памяти в куче ядра
      .free_blocks     dd ?  ;доступных блоков
      .largest_free    dd ?  ;зарезервировано
      .largest_used    dd ?  ;зарезервировано
    }
    http://infinity-sound.narod.ru/mem_info.7z - тестовая программа

    core/taskman.inc первая строка
    GREEDY_KERNEL equ 0

    если перекомпилировать ядро с
    GREEDY_KERNEL equ 1 то

    а) программам будет выделяться памяти не больше, чем они реально используют.
    б) ядро будет загружать программу независимо от количества памяти,
    указанного в заголовке. Если физической памяти не хватит, она зависнет и её надо закрыть через Alt+F4

    Такой режим работы позволяет экономить память на машинах с маленьким объёмом ОЗУ.
    Например программа trantest запрашивает 32Мб а достаточно 256Кб.
  • Новое ядро как-то неадекватно реагирует на исключения. В программе test при попытках cli, sti, mov [0x10000], byte 0 (первые 3 кнопки) ничего не происходит, а jmp 0x10000 подвешивает программу. Попытка открыть в gifview (например, Enter в kfar) нормальный с виду файл http://diamondz.land.ru/5.gif завешивает всю систему намертво. (В K0600 gifview на этом файле тихо умирает, в KlbrInWin перед смертью громко ругается на "Exception".)
  • Глюки исправил.
    Отредактировал sysfuncr.txt
    68.10 заменена на 18.20
    внесены изменения в описание фн. 64.1, 68.11, 68.16
  • Вот это скорость!
    Скоро выложу обновлённую версию документации у себя на домашней страничке.
  • Надо сделать описание kernel API. А то для многих функции ядра - тёмный лес
  • Теперь у нашей птички есть реактивный двигатель! :)
    Hardwere акселерация это мощно.

    У меня с запущенным MP3 player-ом уровень загрузки процессора всего 3%.

    А когда в Колибри будет ещё и ускорение 2D графики,то ......
  • Who is online

    Users browsing this forum: No registered users and 8 guests