Page 1 of 2

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

Posted: Fri Sep 07, 2012 7:05 pm
by FireWall
Это одна из тем общим результатом которых будет сравнение текущего состояния (ночные сборки, авторская версия N8) и стабильной версии Kolibri OS. Планируемый результат - документ в формате .odt.

Планируются также:
0.7.7.0 и ...(2) сравнение базовых прграмм
0.7.7.0 и ...(3) сравнение основных приложений
возможно также:
0.7.7.0 и ...(4) примеры, демо, ...

В данной теме рассматривается ядро Kolibri OS (ввиду монолитной архитектуры Kolibri OS, ядро - это собственно и есть операционная система).

Сравнение планируется выполнять в трёх частях (аспектах)
(1.1) Общие сведения.
(1.2) Программный интерфейс ядра (системные функции).
(1.3) Интерфейс драйверов.

Общий (примерный) план:

(1) По каждому аспекту:
а. выкладываю эскиз;
b. выкладываю собственные коментарии;
c. обсуждаем ошибки неточности, ... (примерно 15 дней);
d. с учётом обсуждения формируется соответсвующая часть в формате .odt (альфа-вкрсия);
e. обсуждается новая версия (до окончания этапа (1) ).
(2) Формируется (с учётом обсуждения) общий документ данного раздела в формате .odt (бета-вкрсия).

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

:wink:

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

Posted: Fri Sep 07, 2012 7:07 pm
by FireWall
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 (в дальнейшем эту возможность планируется удалить полностью).

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

Posted: Fri Sep 07, 2012 7:20 pm
by FireWall
Некоторые примечания:

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

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

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

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

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

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

Posted: Fri Sep 07, 2012 7:24 pm
by FireWall
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).

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

Posted: Fri Sep 07, 2012 7:31 pm
by FireWall
Некоторые примечания:

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

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

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

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

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

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

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

Posted: Fri Sep 07, 2012 10:42 pm
by Leency
Обзор по изменениям в функциях очень понравился.

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

Исправление серьёзных ошибок ядра я бы всё же отметил.
Новое ядро (по сравнению с ядром дистрибутива) обладает рядом новых возможностей (основные):
(1) поддержка чтения файловых систем EXT2(+ EXT3/Ext4 ?) и NTFS;
NTFS точно была, она уже давно.

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

Posted: Fri Sep 07, 2012 10:47 pm
by Serge
Задокументирую как только допишу прозрачность.

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

Posted: Sat Sep 08, 2012 11:38 am
by FireWall
Кстати в DOCPACK (т.е. - в дистрибутиве) не задокументированы также:
Функция 62 :
подфункция 11 - инициализировать доступ к MMIO
подфункция 12 - получить линейный адрес MMIO-блока
специальная подподфункция 12-DA - получить линейный адрес статического DMA-буфера
подфункция 13 - освободить линейные адреса MMIO

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

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

Posted: Sat Sep 08, 2012 12:37 pm
by art_zh
62.11,12 и 13 хорошо документированы на Вики.

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

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

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

Posted: Sat Sep 08, 2012 1:05 pm
by FireWall
NTFS действительно есть уже в 0.7.7.0.

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

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

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

Спасибо! Исправлю ... (Как и NTFS )

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

Posted: Mon Sep 10, 2012 11:06 am
by FireWall
Тут была идея "Функция возвращающая текст для панели задач." - что-то не нахожу:
- не вижу?
- не реализована ?
- не документирована ?

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

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

(тем самым завершая этапы (1) a. , (1) b.)

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

Posted: Mon Sep 10, 2012 11:10 am
by FireWall
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

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

Posted: Mon Sep 10, 2012 11:17 am
by FireWall
Интерфейс драйверов гораздо хуже документирован, нежели системные функции, однако восполнить этот пробел не является задачей сравнения (поэтому я намеренно не привожу дополнительную информацию, вроде fascall, stdcall и сигнатуры функции). Однако отсутствие достаточно полной документации заметно осложняет процесс сравнения.

Я предполагаю (исходя из здравого смысла и отсутствия огромного количества споров по этому поводу на форуме), что те функции, которые сохранились с неизменным названием, сохранились и в контексте программного интерфейса.

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

Posted: Mon Sep 10, 2012 2:41 pm
by Mario
FireWall wrote:Тут была идея "Функция возвращающая текст для панели задач." - что-то не нахожу:
- не вижу?
- не реализована ?
- не документирована ?
Не реализована. Я посчитал не самым актуальным направлением и еще я до октября-ноября буду занят строительными работами по дому.

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

Posted: Mon Sep 10, 2012 7:29 pm
by FireWall
Цитата: "Я добавил в бранч kolibri-acpi определение числа процессоров - переменная [cpu_count] и запуск одного ядра - функция start_ap. Каждому процессору присваивается номер начиная с нуля для загрузочного. В таблице smpt сохраняется apic id процессора под номером N. Всего таблица рассчитана на 16 процессоров.
start_ap запускает процессор N и переводит в режим ядра.
"

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

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