0.7.7.0 и текущее состояние: (1) сравнение API ядра

Share your distros and discuss others'
  • 1.1. Общие сведения

    Как ночная сборка, так и версия N8 используют один вариант ядра (svn::\kolibri\kernel\trunk). Kolibri OS является операционной системой монолитной архитектуры с возможностью загружать драйверы в формате COFF в адресное пространство ядра (ring 0). Для загрузки драйверов требуется приложение, их загружающее (оно обычно также и обеспечивает интерфейс с этим драйвером). Возможностей выгружать драйверы нет.
    Ввиду своей архитектуры, в узком смысле Kolibri OS – это ядро (по аналогии с GNU/Linux). Все остальные программы, входящие в дистрибутив, являются спецификой дистрибутива.

    Новое ядро (по сравнению с ядром дистрибутива) обладает рядом новых возможностей (основные):
    (1) поддержка чтения файловых систем EXT2(+ EXT3/Ext4 ?) и NTFS;
    (2) поддержка APIC (что создаёт фундамент для поддержки USB, SMP, ...),
    (3) ряд новых функций программного интерфейса ядра (подробности см. ниже),
    (4) новая концепция работы с обработчиками аппаратных прерываний , (?:)позволяющая драйверам, в частности, устанавливать несколько функций к обработчику одного прерывания
    (5) поддержка TLS с адресацией через селектор fs; новый – расширенный заголовок исполняемого файла , связанный с TLS.

    В новом ядре начат процесс освобождения от устаревших функций программного интерфейса, в частности, удалена возможность получать сообщения приложению об аппаратных прерываниях, частично удалена возможность для приложений непосредственно обращаться к портам ввода вывода посредством команд процессора IN/OUT (в дальнейшем эту возможность планируется удалить полностью).
  • Некоторые примечания:

    (1) Это самый короткий, но технически самый сложный раздел, для написания которого я больше всего нуждаюсь в помощи :wink:

    (2) Здесь не планируется упоминать изменения, которые в дальнейшем будут отражены в следующих разделах (все они скрыты за фразой "(подробности см. ниже),").

    (3) Здесь планируется отмечать только принципиально значимые изменения (новшества).

    "Простое" улучшение кода и даже исправление ошибок отмечать не планируется.

    (4) Я бы не хотел "разбавлять" текст словами благодарности авторам- разработчикам :wink: Это можно сделать в виде приложения к конечной версии документа :)
  • 1.2. Программный интерфейс ядра.


    Функция 9 - информация о потоке выполнения.
    Добавлено новое поле : +71 = +0ч57: dword: маска событий

    Функция 15. - работа с фоновой графикой (изменено название; старое: Установить фон. )
    Добавлены новые подфункции:
    - подфункция 8 (Получить координаты последней отрисовки фона.)
    - подфункция 9 (Перерисовать прямоугольную часть фона)


    Функция 18 - системные настройки и информация (изменено название; старое: Системный сервис. )
    Добавлены новые подфункции:
    - подфункция 1 (сделать самым нижним окно потока);
    - подфункция 23 (минимизовать все окна)
    - подфункция 24 (установить пределы отрисовки)

    Функция 25 — записать область на слой фона. (новая, вместо зарезервированной — возвращающей -1; ещё раньше — это была функция: установить громкость SBPro. )

    Функция 34 — узнать кому принадлежит точка экрана (новая функция)

    Функция 41 - узнать владельца IRQ. Удалена!
    Функция 42 - работа с данными, полученными по IRQ. Удалена!

    Функция 43 - ввод/вывод в порт. Скорее всего должна быть объявлена устаревшей! (Ибо функция для резервирования портов (SysFn 46) уже объявлена устаревшей, а без предварительного резервирования портов, функция 43 неработоспособна.)

    Функция 44 - определить действия при поступлении IRQ. Удалена!
    Функция 45 - зарезервировать/освободить IRQ. Удалена!

    Функция 46 - зарезервировать/освободить группу портов ввода/вывода. Объявлена устаревшей!

    Функция 62 - пользовательский доступ к PCI. Добавлены новые подфункции:
    подфункция 11 - инициализировать доступ к MMIO
    подфункция 12 - получить линейный адрес MMIO-блока
    специальная подподфункция 12-DA - получить линейный адрес статического DMA-буфера
    подфункция 13 - освободить линейные адреса MMIO


    Функция 66 - работа с клавиатурой. Добавлены новые подфункции:
    подфункция 6 — заблокировать обычный вывод;
    подфункция 7 — разблокировать обычный вывод.

    Функция 68. Системный сервис. Добавлены новые подфункции:
    подфункция 21 — загрузить драйвер PE.

    Функция 73 - программный блиттер. Новая функция. Не документирована в дистрибутиве (DOCPACK).
  • Некоторые примечания:

    (1) Текст требует более скрупулёзной проверки :)

    (2) На мой взляд, некоторые функции должны быть также объявлены устаревшими, а может быть удалены:

    Функция 6 - прочитать файл с рамдиска.
    Функция 7 - вывести изображение в окно.
    Функция 64 - перераспределить память приложения.

    (3) Также, на мой взгляд, следует ещё раз обратить внимание на обращение к видео фрейм-буферу через селектор gs. (Может быть лучше просто добавить функцию, отображающую его в адресное пространство приложения. + (1) более стандартный способ доступа, + (2) в будущем возможность контролировать, например, единственность такого доступа в каждый данный момент)

    (4) Следует также обратить внимание на:

    Функция 26 (Получение параметров системы.) требует серьёзного рассмотрения на предмет устаревших подфункций.
    Функция 58 (- работа с файловой системой ) возможно требует некоторой переработки.
  • Обзор по изменениям в функциях очень понравился.

    По поводу примечаний:
    1) Ко всем и в часности Сержу: быть может нужно продокументировать 73 функцию?
    2) 58 функция оставлена ради совместимости - скорее всего она нужна для Quake и Pig.
    А вот для чего до сих пор нужна 6 функция - не знаю.

    Исправление серьёзных ошибок ядра я бы всё же отметил.
    Новое ядро (по сравнению с ядром дистрибутива) обладает рядом новых возможностей (основные):
    (1) поддержка чтения файловых систем EXT2(+ EXT3/Ext4 ?) и NTFS;
    NTFS точно была, она уже давно.
    Из хаоса в космос
  • Задокументирую как только допишу прозрачность.
  • Кстати в DOCPACK (т.е. - в дистрибутиве) не задокументированы также:
    Функция 62 :
    подфункция 11 - инициализировать доступ к MMIO
    подфункция 12 - получить линейный адрес MMIO-блока
    специальная подподфункция 12-DA - получить линейный адрес статического DMA-буфера
    подфункция 13 - освободить линейные адреса MMIO

    P.S. Насчёт NTFS - проверю (это трудно сделать на виртуальной машине, нужно проверять на реальной)
  • 62.11,12 и 13 хорошо документированы на Вики.

    73-я (кратко) тоже.

    62.12-DA к транку не относится.
  • NTFS действительно есть уже в 0.7.7.0.

    Цитата: "62.11,12 и 13 хорошо документированы на Вики. 73-я (кратко) тоже."

    Но отсутствие упоминания в DOCPACK всё же является недостатком ...

    Цитата: "62.12-DA к транку не относится."

    Спасибо! Исправлю ... (Как и NTFS )
  • Тут была идея "Функция возвращающая текст для панели задач." - что-то не нахожу:
    - не вижу?
    - не реализована ?
    - не документирована ?

    /* --------------------------------------------------------------------------------- */

    Следующие два моих сообщения будут содержать:
    - (1) a. по (1.3)
    - (1) b. по (1.3)

    (тем самым завершая этапы (1) a. , (1) b.)
  • 1.3. Интерфейс ядра для ring-0 драйверов.

    В отличие от системных функций (т.е. - программного интерфейса приложений), программный интерфейс драйверов документирован значительно хуже. Однако общие изменения (без учёта возможных изменений в интерфейсе самих функций) проследить достаточно просто - по файлу /core/exports.inc (таблица kernel_export:). (Следует однако заметить, что практически все функции присутствуют в файле core/peload.inc.)

    По сравнению с дистрибутивом 0.7.7.0 удалена только одна функция программного интерфейса драйверов:
    dd szGetIntHandler , get_int_handler
    В настоящее время закомментирована — удалена
    (однако сама функция
    proc get_int_handler stdcall, irq:dword
    присутствует, но в другом месте - в core/irq.inc)

    На настоящий момент добавлено 14 новых функций программного интерфейса драйверов:

    dd szMutexInit , mutex_init
    dd szMutexLock , mutex_lock
    dd szMutexUnlock , mutex_unlock
    Новые функции. (Линукс-подобные мьютексы ядра; все они находятся в core/sched.inc).

    dd szPciApi , pci_api_drv
    Было (переименована) : dd szPciApi , pci_api
    Находится в файле bus/pci/pci32.inc

    dd szSetKeyboardData , set_keyboard_data
    Новая функция. Находится в hid/keyboard.inc.

    dd szRegKeyboard , register_keyboard
    Новая функция. Находится в kernel.asm:

    dd szDelKeyboard , delete_keyboard
    Новая функция. Находится в hid/keyboard.inc

    dd szGetDisplay , get_display
    Новая функция. Находится в video/cursors.inc

    dd szSetScreen , set_screen
    Новая функция. Находится в kernel.asm


    dd szDiskAdd , disk_add
    Новая функция. Находится в blkdev/disk.inc


    dd szDiskDel , disk_del
    Новая функция. Находится в blkdev/disk.inc

    dd szDiskMediaChanged, disk_media_changed
    Новая функция. Находится в blkdev/disk.inc

    dd szTimerHS , timer_hs
    Новая функция. Находится в core/timers.inc

    dd szCancelTimerHS , cancel_timer_hs
    Новая функция. Находится в core/timers.inc
  • Интерфейс драйверов гораздо хуже документирован, нежели системные функции, однако восполнить этот пробел не является задачей сравнения (поэтому я намеренно не привожу дополнительную информацию, вроде fascall, stdcall и сигнатуры функции). Однако отсутствие достаточно полной документации заметно осложняет процесс сравнения.

    Я предполагаю (исходя из здравого смысла и отсутствия огромного количества споров по этому поводу на форуме), что те функции, которые сохранились с неизменным названием, сохранились и в контексте программного интерфейса.
  • FireWall wrote:Тут была идея "Функция возвращающая текст для панели задач." - что-то не нахожу:
    - не вижу?
    - не реализована ?
    - не документирована ?
    Не реализована. Я посчитал не самым актуальным направлением и еще я до октября-ноября буду занят строительными работами по дому.
  • Цитата: "Я добавил в бранч kolibri-acpi определение числа процессоров - переменная [cpu_count] и запуск одного ядра - функция start_ap. Каждому процессору присваивается номер начиная с нуля для загрузочного. В таблице smpt сохраняется apic id процессора под номером N. Всего таблица рассчитана на 16 процессоров.
    start_ap запускает процессор N и переводит в режим ядра.
    "

    Цитата: "Перенёс в транк. Данные выводятся на доску отладки.
    Число процессоров определяется по таблицам ACPI. Если ACPI нет, то cpu_count равно 0, но на доске будет "1 CPU detected", чтобы не смущать народ.
    "

    Serge! В транк перенесено только определение числа процессоров, или чуть больше?
  • Who is online

    Users browsing this forum: No registered users and 4 guests