Это одна из тем общим результатом которых будет сравнение текущего состояния (ночные сборки, авторская версия 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)
0.7.7.0 и текущее состояние: (1) сравнение API ядра
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 (в дальнейшем эту возможность планируется удалить полностью).
Как ночная сборка, так и версия 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) Это самый короткий, но технически самый сложный раздел, для написания которого я больше всего нуждаюсь в помощи
(2) Здесь не планируется упоминать изменения, которые в дальнейшем будут отражены в следующих разделах (все они скрыты за фразой "(подробности см. ниже),").
(3) Здесь планируется отмечать только принципиально значимые изменения (новшества).
"Простое" улучшение кода и даже исправление ошибок отмечать не планируется.
(4) Я бы не хотел "разбавлять" текст словами благодарности авторам- разработчикам Это можно сделать в виде приложения к конечной версии документа
(1) Это самый короткий, но технически самый сложный раздел, для написания которого я больше всего нуждаюсь в помощи
(2) Здесь не планируется упоминать изменения, которые в дальнейшем будут отражены в следующих разделах (все они скрыты за фразой "(подробности см. ниже),").
(3) Здесь планируется отмечать только принципиально значимые изменения (новшества).
"Простое" улучшение кода и даже исправление ошибок отмечать не планируется.
(4) Я бы не хотел "разбавлять" текст словами благодарности авторам- разработчикам Это можно сделать в виде приложения к конечной версии документа
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).
Функция 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) Текст требует более скрупулёзной проверки
(2) На мой взляд, некоторые функции должны быть также объявлены устаревшими, а может быть удалены:
Функция 6 - прочитать файл с рамдиска.
Функция 7 - вывести изображение в окно.
Функция 64 - перераспределить память приложения.
(3) Также, на мой взгляд, следует ещё раз обратить внимание на обращение к видео фрейм-буферу через селектор gs. (Может быть лучше просто добавить функцию, отображающую его в адресное пространство приложения. + (1) более стандартный способ доступа, + (2) в будущем возможность контролировать, например, единственность такого доступа в каждый данный момент)
(4) Следует также обратить внимание на:
Функция 26 (Получение параметров системы.) требует серьёзного рассмотрения на предмет устаревших подфункций.
Функция 58 (- работа с файловой системой ) возможно требует некоторой переработки.
Обзор по изменениям в функциях очень понравился.
По поводу примечаний:
1) Ко всем и в часности Сержу: быть может нужно продокументировать 73 функцию?
2) 58 функция оставлена ради совместимости - скорее всего она нужна для Quake и Pig.
А вот для чего до сих пор нужна 6 функция - не знаю.
Исправление серьёзных ошибок ядра я бы всё же отметил.
По поводу примечаний:
1) Ко всем и в часности Сержу: быть может нужно продокументировать 73 функцию?
2) 58 функция оставлена ради совместимости - скорее всего она нужна для Quake и Pig.
А вот для чего до сих пор нужна 6 функция - не знаю.
Исправление серьёзных ошибок ядра я бы всё же отметил.
NTFS точно была, она уже давно.Новое ядро (по сравнению с ядром дистрибутива) обладает рядом новых возможностей (основные):
(1) поддержка чтения файловых систем EXT2(+ EXT3/Ext4 ?) и NTFS;
Из хаоса в космос
Задокументирую как только допишу прозрачность.
Кстати в DOCPACK (т.е. - в дистрибутиве) не задокументированы также:
Функция 62 :
подфункция 11 - инициализировать доступ к MMIO
подфункция 12 - получить линейный адрес MMIO-блока
специальная подподфункция 12-DA - получить линейный адрес статического DMA-буфера
подфункция 13 - освободить линейные адреса MMIO
P.S. Насчёт NTFS - проверю (это трудно сделать на виртуальной машине, нужно проверять на реальной)
Функция 62 :
подфункция 11 - инициализировать доступ к MMIO
подфункция 12 - получить линейный адрес MMIO-блока
специальная подподфункция 12-DA - получить линейный адрес статического DMA-буфера
подфункция 13 - освободить линейные адреса MMIO
P.S. Насчёт NTFS - проверю (это трудно сделать на виртуальной машине, нужно проверять на реальной)
62.11,12 и 13 хорошо документированы на Вики.
73-я (кратко) тоже.
62.12-DA к транку не относится.
73-я (кратко) тоже.
62.12-DA к транку не относится.
NTFS действительно есть уже в 0.7.7.0.
Цитата: "62.11,12 и 13 хорошо документированы на Вики. 73-я (кратко) тоже."
Но отсутствие упоминания в DOCPACK всё же является недостатком ...
Цитата: "62.12-DA к транку не относится."
Спасибо! Исправлю ... (Как и NTFS )
Цитата: "62.11,12 и 13 хорошо документированы на Вики. 73-я (кратко) тоже."
Но отсутствие упоминания в DOCPACK всё же является недостатком ...
Цитата: "62.12-DA к транку не относится."
Спасибо! Исправлю ... (Как и NTFS )
Тут была идея "Функция возвращающая текст для панели задач." - что-то не нахожу:
- не вижу?
- не реализована ?
- не документирована ?
/* --------------------------------------------------------------------------------- */
Следующие два моих сообщения будут содержать:
- (1) a. по (1.3)
- (1) b. по (1.3)
(тем самым завершая этапы (1) a. , (1) b.)
- не вижу?
- не реализована ?
- не документирована ?
/* --------------------------------------------------------------------------------- */
Следующие два моих сообщения будут содержать:
- (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
В отличие от системных функций (т.е. - программного интерфейса приложений), программный интерфейс драйверов документирован значительно хуже. Однако общие изменения (без учёта возможных изменений в интерфейсе самих функций) проследить достаточно просто - по файлу /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! В транк перенесено только определение числа процессоров, или чуть больше?
start_ap запускает процессор N и переводит в режим ядра."
Цитата: "Перенёс в транк. Данные выводятся на доску отладки.
Число процессоров определяется по таблицам ACPI. Если ACPI нет, то cpu_count равно 0, но на доске будет "1 CPU detected", чтобы не смущать народ."
Serge! В транк перенесено только определение числа процессоров, или чуть больше?
Who is online
Users browsing this forum: No registered users and 1 guest