|
MeOs или еще одна "История игрушки"... Mr.Clumsy (x25zine#04, March 2004) Перевод на русский язык - Сергей Кузьмин (http://coolthemes.narod.ru),
11 января 2007 года Представляет интерес вторая часть статьи, где описано программирование сетевых программ. |
Сначала я планировал сделать подробный обзор этой ОС, но поскольку сейчас информации об этой ОС уже достаточно много, то я ограничусь кратким описанием. История MeOS уходит в далекий 2000-й год, когда идея о создании собственной ОС пришла в голову и была реализована руками некоего финского студента Ville Turjanmaa. MenuetOS (в дальнейшем MeOS...) была полностью написана на 32-битном ассемблере, она работает в защищенном режиме, имеет хорошо проработанный и довольно простой API графических программ (MFC нервно курит в сторонке(*замена - в оригинале применено нецензурное слово)), поддерживает VESA v.1.0 и v.2.0. Ядро уже имеет драйверы ethernet-карт(в основном для Realtek), мыши, звука и т.п. ... другими словами MeOS имеет достаточную поддержку для разработки программм. Она чертовски маленькая и вместе с большинством программ для неё может поместиться на одной 3.5-й дюймовой дискете. Несмотря на то, что ОС написана на асме, можно писать программы и на других языках программирования. Основная файловая система для MeOS - это FAT32. Минимальный набор разработчикаt: текстовый редактор TinyPad и FASM - Flat Assembler [3]. Работа программ основана на событиях, т.е. на схеме: 1) ожидание события; Всё довольно просто. Обычная программа должна иметь обработчики трех базовых событий: перерисовки окна, нажатия на клавиатуру, нажатие на кнопки самого приложения. Необходимость обработать коды клавиатуры возникает, когда пользователь нажимает на клавиатуру, а обрабатывать нажатые кнопки требуется, если пользователь нажимает на кнопки в окне (самая простая реакция - завершение программы). Системные вызовы в MeOS реализованы через прерывание 0x40. Меня тошнит от примеров типа "Hello world", поэтому я начал с портирования моей программы "3D stars", написанной давным-давно для MS-DOS. Это было проще и намного более интересно :). В принципе, нет ничего сложного в программировании для MeOS, особенно для тех, кто имел опыт программирования для MS-DOS и любит ОСи на асме. Для любителей C++ и прочих языков высокого уровня это будет немного сложно (только на первых порах), но кто ищет легких путей 8). Во время первого знакомства с MeOS, я удивлялся тому, что программы типа FASM, TinyPad и остальных, выглядят странно ;), если попробовать изменить размер их окна - развернуть на весь экран. Этих глюки не были критическими, но оставляли плохое впечатление. Кнопка "Закрыть", находящаяся в верхнем правом углу, оставалась на том же расстоянии от верхнего левого угла, что и до развертывания. Это выглядело хреново, если начальная ширина окна была 300 пикселей и после резвертки кнопка "закрыть" оказывалась в середине заголовка окна. Это меня раздражало и я исправил это. Вот пример перерисовки кнопки "закрыть" из стандартных программ MeOS: ; CLOSE BUTTON Это кусок из example.asm (автор Ville). Как мы можем видеть, координата x кнопки постоянна - (300-19)=281 пиксель от начала окна. При измененении ширины с 300 до 600 кнопка "закрыть" будет находится на том же месте (281,5). На самом деле, реализация нормального окна без описанных глюков в интерфейсе не является сложной задачей. Не знаю, почему авторы других программ не исправили этот дефект (* все новые программы сейчас используют окна типа 3 или 4, где это исправление реализовано на уровне ядра, а кнопки заголовка (в т.ч. закрытия) добавляются автоматически). Вероятно, из-за лени или потому, что example.asm не содержал его. Ладно, сначала надо определить ширину окна из информации о текущем процессе: get_process_info: Кстати, официальное описание этой функции содержит маленькую опечатку (* может опечатка до сих пор содержится там?). Найдите её сами. Имея информацию о процессе, мы можем сделать окно без описанных багов: draw_window: ; Информация о процессе Итак, мы имеем красивое окно с кнопкой "закрыть" в верхнем правом углу ;) исходник прилагается (coolapp.asm). Теперь обратимся к сети. Документация говорит нам, что сетевой стек имеет: IP уровень. + полные: local loopback. В процессе разработки: The IP layer process header options. Взаимодействие между хостами в сети, работающими под упарвлением MeOS, реализовано через сокеты (как во многих других ОСях). Сервер открывает сокет на порте 83, mov eax,53 ; открыть сокет tcp <...> И т.д.... (смотри исходники). Соответственно, клиент подключается к порту и посылает данные, которые набраны на клавиатуре. Приятно, что возможно пересылать информацию даже одним байтом (что и сделано в примере): key: ; нажата ли клавиатура? Приближаясь к концу этого краткого повествования, можно отметить, что хотя MeOS еще довольно сыра и далека по возможностям от современных ОС, но она имеет очень хорошее начало... Ссылки: [1] http://www.menuetos.org |