| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Chizh Гуру второй степени

Зарегистрирован: 18.03.2005 Сообщения: 2041 Откуда: с Луны
|
Добавлено: Чт Апр 21, 2005 1:14 pm Заголовок сообщения: Express - запуск программы |
|
|
Теперь можно запускать программы формата PE. В проекте есть простенькая программка Hello, которая печатает на экране приветствие. Чтобы увидеть динамику параллельной работы нескольких программ, можно скомпилировать несколько разных прог, которые циклически чего нибудь печатают. Тип exe-шника Windows NT console application, поэтому его можно создавать любым компилятором. Рантайм программы использует несколько функций библиотек kernel32 и user32, поэтому пришлось сделать эти либы и функции, большинство которых просто заглушки. Из программы можно вызывать функции библиотек kernel32, user32 и eosdll. Изза того что в программах для Express-а кроме Windows функций будут использоваться функции Express-а, программы не являются Windows-приложениями.
Реализация запуска. Программы запускаются из ДОС задач. Т.к. запуск осуществляется прерыванием Int 21 ah 4B, ОС его перехватывает и посылает сообщение в eosdll. Основной поток Eosdll в процессе ожидания сообщения находится в заблокированном состоянии. Поэтому ядро сначала устанавливает в специальной ячейке флаг запуска программы и указатель на имя программы, и разблокирует поток eosdll. Поток eosdll проверяет флаг запуска и создаёт новую задачу, задав ей в качестве точки старта специальную стартовую функцию из eosdll. Та функция загружает и запускает программу с помощью функции LoadLibrary. Используется функция LoadLibrary, потому что формат библиотек и программ одинаков. |
|
| Просмотреть профиль |
|
 |
CodeWorld Гуру четвертой степени


Зарегистрирован: 26.10.2003 Сообщения: 4426 Откуда: UA
|
Добавлено: Пн Апр 25, 2005 7:25 pm Заголовок сообщения: |
|
|
| Цитата: | | в программах для Express-а кроме Windows функций будут использоваться функции Express-а |
Можешь привести полный список эмулируемых функций?
| Цитата: | | поток Eosdll в процессе ожидания сообщения находится в заблокированном состоянии. |
Это типо интерфейс к ядру Express? Он поток? Т.е. ядро однопоточное? |
|
| Просмотреть профиль |
|
 |
Chizh Гуру второй степени

Зарегистрирован: 18.03.2005 Сообщения: 2041 Откуда: с Луны
|
Добавлено: Пн Апр 25, 2005 8:40 pm Заголовок сообщения: |
|
|
Нет, список наверно будет формироваться по ходу дела, в порядке необходимости. Совместимость с Windows будет ограничена только функциями библиотек kernel32 и user32, за вычетом функций GUI, поэтому Windows приложения будут работать только консольные, по крайней мере пока. GUI будет какое-нибудь другое, не Win32. Основная кодировка будет Unicode, а Ansi функции в основном исключены.
>Это типо интерфейс к ядру Express? Он поток? Т.е. ядро однопоточное?
Это скорее простенький пробный способ запуска программы Hello. Это не готовый интерфейс, над ним ещё надо работать. Нет принципиальных проблем запуска нескольких потоков ядра, просто пока не понадобилось. Я пока что поддержкой Unicode занят.
PS А про какую ОС ты в аське писал? |
|
| Просмотреть профиль |
|
 |
Chizh Гуру второй степени

Зарегистрирован: 18.03.2005 Сообщения: 2041 Откуда: с Луны
|
Добавлено: Пн Апр 25, 2005 11:48 pm Заголовок сообщения: |
|
|
У кого какие-нибудь наработки по кодировкам есть? Интересует разбор формата файлов *.nls. В сырцах ReactOS и виндовс как-то размазанно и без комментариев, как говорится - без бутылки не разберёшься  |
|
| Просмотреть профиль |
|
 |
Freeman Эксперт

Зарегистрирован: 27.11.2003 Сообщения: 849
|
Добавлено: Вт Апр 26, 2005 12:10 am Заголовок сообщения: |
|
|
| Chizh писал(а): | | У кого какие-нибудь наработки по кодировкам есть? Интересует разбор формата файлов *.nls. |
Гы, я только недавно ковырялся, правда несколько по другому поводу. Нарыл вот такую ссылку. Правильность инфы проверить еще не удалось - переключился на другое. |
|
| Просмотреть профиль |
|
 |
CodeWorld Гуру четвертой степени


Зарегистрирован: 26.10.2003 Сообщения: 4426 Откуда: UA
|
Добавлено: Вт Апр 26, 2005 10:59 am Заголовок сообщения: |
|
|
| Цитата: | | Нет принципиальных проблем запуска нескольких потоков ядра, просто пока не понадобилось. |
Пока не понадобилось? А само ядро ты уже разсинхронизировал на одновременнный доступ? Расскажи че нить про саму реализацию ядра, а то в сырцах ковыряться не благородное дело  |
|
| Просмотреть профиль |
|
 |
Chizh Гуру второй степени

Зарегистрирован: 18.03.2005 Сообщения: 2041 Откуда: с Луны
|
Добавлено: Вт Апр 26, 2005 11:38 am Заголовок сообщения: |
|
|
>Пока не понадобилось? А само ядро ты уже разсинхронизировал на одновременнный доступ?
Ни многопоточностью ни синхронизацией я ещё пока что не занимался. Эти вещи конечно хорошие и нужные, но пока что я занят другими вещами. Короче здесь ещё не паханное поле
>Расскажи че нить про саму реализацию ядра, а то в сырцах ковыряться не благородное дело
Всё ядро - это обработчики исключений, прерываний и шлюзов. Все эти функции работают в монопольном режиме с запрещёнными прерываниями. Поверх всего этого "крутится" задача eosdll, которая является как бы менеджером. Посмотри в ней функцию _LibMain, вся работа делается в цикле for(). Там почти ничего нет
Freeman, спасибо, посмотрю. |
|
| Просмотреть профиль |
|
 |
Chizh Гуру второй степени

Зарегистрирован: 18.03.2005 Сообщения: 2041 Откуда: с Луны
|
|
| Просмотреть профиль |
|
 |
Chizh Гуру второй степени

Зарегистрирован: 18.03.2005 Сообщения: 2041 Откуда: с Луны
|
Добавлено: Сб Апр 30, 2005 12:09 am Заголовок сообщения: Express - перезагрузка |
|
|
Меня не будет пару недель...
Предлагаю пока что тему для размышления. Приглашаю в команду писаталей ОС. Текущий план действий:
Я думаю настала пора писать загрузчик На основе бут-менеджера GRUB. Во-первых надо сделать инсталятор бут-сектора и автоматическое подключение к GRUB-у. Старт ОС в реальном режиме, потом она всё делает сама. Надо разработать сценарий загрузки, и что нужно реализовать для этого. При разработке можно расчитывать на то, что после перехода в PM можно будет вызывать любые функции BIOS без проблем, например для чтения секторов. С начала нужно сделать загрузку с дискеты, соответственно загрузчик должен поддерживать файловую систему FAT12. Компиляторы проекта: Watcom Assembler (wasm.exe) и Watcom C++ (wpp.exe, wpp386.exe). Вся отладка в эмуляторе Bochs. Конечно же, помогу всем чем смогу. |
|
| Просмотреть профиль |
|
 |
Chizh Гуру второй степени

Зарегистрирован: 18.03.2005 Сообщения: 2041 Откуда: с Луны
|
Добавлено: Чт Май 19, 2005 6:29 pm Заголовок сообщения: |
|
|
| У меня есть вопрос по вызову функций Win32 API из программы. Проблема вот в чём. Все функции имеют атрибут __stdcall, соответственно в объектнике их имена приобретают вид _Имя@. А хитрость в том, что модуль kernel32.dll экспортирует имена функций без декораций. Связывание этих разных имён происходит на этапе линковки программы, используя дополнительную библиотеку kernel32.lib, которая содержит преходники из одних имён в другие. Для меня это чёрный ящик, не пойму как мне сгененировать такой lib файл во время копмиляции собственного модуля kernel32.dll. Меня интересует не сам kernel32.lib - он есть в любом компиляторе, а механизм создания таких файлов с такими хитрыми именами-переходниками. |
|
| Просмотреть профиль |
|
 |
Chizh Гуру второй степени

Зарегистрирован: 18.03.2005 Сообщения: 2041 Откуда: с Луны
|
Добавлено: Чт Май 19, 2005 7:02 pm Заголовок сообщения: |
|
|
| Судя по отсутствию щелающих писать код для экспресса, у меня возникло желание провести на эту тему опрос - что делает для вас невозможным участие в этом проекте (и какие проблемы этим проектом не решаемы в принципе). Это не агитация, просто интересно кто чего думает, возможно это поможет решить какие-нибудь проблемы проекта. |
|
| Просмотреть профиль |
|
 |
CodeWorld Гуру четвертой степени


Зарегистрирован: 26.10.2003 Сообщения: 4426 Откуда: UA
|
Добавлено: Пт Май 20, 2005 6:14 am Заголовок сообщения: |
|
|
С возвращением!
| Цитата: | | Судя по отсутствию щелающих писать код для экспресса |
Я думаю ты предоставляешь слишком мало информации, напиши доку, расскажи о планах, подробненько о сегодняшней реализации (хотя часть уже выпатана здесь) А так вообще трудно сказать к чему дело придёт. |
|
| Просмотреть профиль |
|
 |
Dron Гуру третьей степени


Зарегистрирован: 12.01.2005 Сообщения: 3107 Откуда: Москва
|
Добавлено: Пт Май 20, 2005 9:02 am Заголовок сообщения: |
|
|
Насчет либ...
Если ты работаешь в Визуал студии - там это просто... называется интерфейсная либа...
Кстати никто не мешает вызывать функцию из DLL напрямую.
Типа LoadLibrary, а потом GetProcAddress... и вызывай.
Я даже подозреваю что точно так же работают интерфейсные либы.
Насчет других компиляторов не скажу... в линухе никогда не приходилось делать такого. |
|
| Просмотреть профиль |
|
 |
Alexandoros Эксперт


Зарегистрирован: 27.02.2005 Сообщения: 961 Откуда: Ukraine
|
Добавлено: Пт Май 20, 2005 9:30 am Заголовок сообщения: |
|
|
Чиж - не нута копаеш. Такая lib наверное компиллер специфик. Тебе не нужна вся эта хрень.
Вот что нужно
"Microsoft introduced __export in the 16-bit compiler version of Visual C++ to allow the compiler to generate the export names automatically and place them in a .LIB file. This .LIB file could then be used just like a static .LIB to link with a DLL.
In the 32-bit compiler version, you can export data, functions, classes, or class member functions from a DLL using the __declspec(dllexport) keyword. __declspec(dllexport) adds the export directive to the object file so you don't need to use a .DEF file."
ms-help://MS.MSDNQTR.2003APR.1033/vccore/html/_core_export_from_a_dll_using___declspec.28.dllexport.29.htm
// релиз April 2003
ps_by_cw: скрул боковой появился. ненавижу его! при цитатах и коде он пробелы не удаляет и по строкам переносит как то не по честному. отредактировал. ОК ?  |
|
| Просмотреть профиль |
|
 |
Dron Гуру третьей степени


Зарегистрирован: 12.01.2005 Сообщения: 3107 Откуда: Москва
|
Добавлено: Пт Май 20, 2005 9:55 am Заголовок сообщения: |
|
|
Свалка... одна ссылка чего стоит...
Я примерно про это и говорил. интерфейсная либа. |
|
| Просмотреть профиль |
|
 |
|