Здравствуйте!
Установил KolibriOS. Опробовал. Заинтересовался.
Скачал мануал "Документация по программированию в KolibriOS". Стал изучать, но вопросов появилось очень много.
Потом нашёл SDK. Изучил примеры. Потом в wiki прочитал про функционирование ядра — стало чуть понятнее. Но, тем не менее, осталась куча вопросов, например, что происходит во время загрузки программы (что куда загружается, как создаётся поток), про память и стек (например, бэйсик для Menuet почему-то начинает программу с mov esp, %вершина стека% и определяет громадные значения для памяти приложения — как должно быть на самом деле и от чего зависит я не понял).
Постоянно перегружаться, чтобы проверить, совсем неудобно. Я узнал про эмулятор. Стало проще. Но он (не удивительно) или не полностью эмулирует, или не так как надо, или что-то не поддерживает. Поэтому всё равно приходится перегружаться, но с эмулятором гораздо меньше.
Потом я начал писать простенькие программки (просто, чтобы проверить, как работает та или иная функция и какой результат она выдаёт).
Недавно я написал 2 программки: одна выдаёт информацию о потоке с активным окном, а другая — о потоке, окно которого под указателем мыши.
Теперь ещё прибавилось вопросов:
в мануале написано "Обычные приложения размещаются в памяти по адресу 0x60400000" — когда я получаю информацию о потоке, то адрес процесса в памяти = 0, и приложение CPU тоже так показывает для всех потоков. Как должно быть на самом деле?
Далее, "11 байт: имя процесса..." — здесь эмулятор (если я не ошибся) ведёт себя не так, как Kolibri. А как на самом деле? То есть, если имя меньше 11 символов, то ставится завершающий 0 или заполняется пробелами? И всегда ли это происходит одинаково?
Ещё эмулятор про клиентские размеры выдавал какую-то чепуху.
Потом я загрузил Kolibri. Запустил свои программки. И узнал ещё чуть больше. Например (если это не моя ошибка), сам рабочий стол, поток ICON, со временем менял свой ID, а это, согласно мануалу, невозможно: "идентификаторы монотонно растут", "не изменяются со временем для заданного потока", "Идентификатор потока не может быть назначен другому потоку даже после завершения первого." Значит этот поток завершался, а вместо него запускался его "близнец"(ну или он же перезапускался просто).
А что происходит во время переключения потоков? В эмуляторе иногда показывало "OS/IDLE", в Kolibri не заметил такого. (я тут имею ввиду, тот промежуток, когда "от первого потока мы ушли уже, а второй ещё как бы не успел активироваться")
Теперь вопрос про основной цикл прораммы. Если нужно просто реагировать на события — то я использую функцию ожидания события.
Но как быть, если нужно и реагировать на события и кроме этого ещё постоянно что-то выполнять? Я решил переключаться на следующий поток (эмулятор опять сказал, что не знает такую функцию). Пусть система сама решит, какой следующий, и когда вернуться опять к этому (но пока, насколько я понял, для всех потоков время одинаковое). Или же, можно было ждать событие некоторое время. Как в этом случае было бы правильнее делать (ждать или переключаться)?
Когда я (всё-таки) сделал скриншот моих программок, скриншотер сделал что-то с рабочим столом. От чего это так? Может, надо было что-то ещё настроить или я что-нибудь не то нажал?
Может ли Kolibri работать с PATA? У меня сначала не определялись диски, потом я в BIOS оставил только SATA(а было PATA+SATA).