Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Dec 12, 2019 3:51 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 22 posts ]  Go to page 1 2 Next
Author Message
PostPosted: Fri Sep 07, 2012 7:05 pm 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
Это одна из тем общим результатом которых будет сравнение текущего состояния (ночные сборки, авторская версия 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:


Top
   
PostPosted: Fri Sep 07, 2012 7:07 pm 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
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 (в дальнейшем эту возможность планируется удалить полностью).


Top
   
PostPosted: Fri Sep 07, 2012 7:20 pm 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
Некоторые примечания:

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

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

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

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

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


Top
   
PostPosted: Fri Sep 07, 2012 7:24 pm 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
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).


Top
   
PostPosted: Fri Sep 07, 2012 7:31 pm 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
Некоторые примечания:

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

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

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

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

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

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


Top
   
PostPosted: Fri Sep 07, 2012 10:42 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Обзор по изменениям в функциях очень понравился.

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

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

NTFS точно была, она уже давно.

_________________
Через тернии к звездам


Top
   
PostPosted: Fri Sep 07, 2012 10:47 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Задокументирую как только допишу прозрачность.


Top
   
PostPosted: Sat Sep 08, 2012 11:38 am 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
Кстати в DOCPACK (т.е. - в дистрибутиве) не задокументированы также:
Функция 62 :
подфункция 11 - инициализировать доступ к MMIO
подфункция 12 - получить линейный адрес MMIO-блока
специальная подподфункция 12-DA - получить линейный адрес статического DMA-буфера
подфункция 13 - освободить линейные адреса MMIO

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


Top
   
PostPosted: Sat Sep 08, 2012 12:37 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1359
62.11,12 и 13 хорошо документированы на Вики.

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

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


Top
   
PostPosted: Sat Sep 08, 2012 1:05 pm 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
NTFS действительно есть уже в 0.7.7.0.

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

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

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

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


Top
   
PostPosted: Mon Sep 10, 2012 11:06 am 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
Тут была идея "Функция возвращающая текст для панели задач." - что-то не нахожу:
- не вижу?
- не реализована ?
- не документирована ?

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

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

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


Top
   
PostPosted: Mon Sep 10, 2012 11:10 am 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
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


Top
   
PostPosted: Mon Sep 10, 2012 11:17 am 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
Интерфейс драйверов гораздо хуже документирован, нежели системные функции, однако восполнить этот пробел не является задачей сравнения (поэтому я намеренно не привожу дополнительную информацию, вроде fascall, stdcall и сигнатуры функции). Однако отсутствие достаточно полной документации заметно осложняет процесс сравнения.

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


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

Не реализована. Я посчитал не самым актуальным направлением и еще я до октября-ноября буду занят строительными работами по дому.


Top
   
PostPosted: Mon Sep 10, 2012 7:29 pm 
Offline

Joined: Wed Sep 15, 2010 7:22 pm
Posts: 101
Цитата: "Я добавил в бранч kolibri-acpi определение числа процессоров - переменная [cpu_count] и запуск одного ядра - функция start_ap. Каждому процессору присваивается номер начиная с нуля для загрузочного. В таблице smpt сохраняется apic id процессора под номером N. Всего таблица рассчитана на 16 процессоров.
start_ap запускает процессор N и переводит в режим ядра.
"

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

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 22 posts ]  Go to page 1 2 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited