Меню

Операционная система для космоса

Космос (операционная система) — Cosmos (operating system)

Разработчик Космос Проект Написано в C # , X # Рабочее состояние Активный Исходная модель Открытый источник Последний релиз Выпуск 20200708/8 июля 2020 г . ; 10 месяцев назад ( 2020-07-08 ) Репозиторий github .com / CosmosOS / Cosmos Доступно в английский Платформы x86 Тип ядра Монолитный Лицензия BSD Официальный веб-сайт www .gocosmos .org

Управляемая операционная система с открытым исходным кодом C # ( Cosmos ) — это набор инструментов для создания операционных систем , написанный в основном на языке программирования C # и небольшом количестве на языке ассемблера высокого уровня под названием X #. Космос — это бэкроним , в котором аббревиатура была выбрана перед значением. Это программное обеспечение с открытым исходным кодом, выпущенное под лицензией BSD .

Cosmos включает в себя компилятор AOT с именем IL2CPU для преобразования Common Intermediate Language (CIL) в собственные инструкции. Cosmos компилирует пользовательские программы и связанные библиотеки с использованием IL2CPU для создания загрузочного собственного исполняемого файла, который можно запускать без поддержки. Полученный результат можно загрузить с USB-накопителя , компакт-диска , по сети через Preboot Execution Environment (PXE) или внутри виртуальной машины . Последние выпуски также позволяют развертывать на некоторых встроенных устройствах x86 через универсальную последовательную шину ( USB ). Хотя C # является основным языком, используемым разработчиками (как на сервере, так и конечными пользователями Cosmos), можно использовать многие языки интерфейса командной строки при условии, что они компилируются в чистый CIL без использования служб вызова платформы (P / Invokes). Cosmos в основном предназначен для использования с .NET Core .

К 2021 году Cosmos не стремится стать полноценной операционной системой, а скорее набором инструментов, позволяющим другим разработчикам просто и легко создавать свои собственные операционные системы с использованием .NET Core. Он также функционирует как уровень абстракции, скрывая большую часть внутренней работы оборудования от конечного разработчика.

Более старые версии Cosmos были выпущены в Milestones , последней из которых была Milestone 5 (выпущена в августе 2010 года). Совсем недавно проект переключился на простое обозначение новых выпусков после номера последнего коммита. Релизы Cosmos делятся на два типа: Userkit и Devkit . Userkit — это предварительно упакованный выпуск, который обновляется нерегулярно по мере добавления новых и улучшенных функций. Юзеркиты обычно считаются стабильными, но не содержат последних изменений и могут не иметь функций. Devkit относится к исходному коду Cosmos и должен быть собран вручную. Девкиты обычно стабильны, но могут содержать некоторые ошибки. Devkit можно приобрести на GitHub, и он использует Git в качестве системы управления версиями. Большая часть работы над Cosmos в настоящее время направлена ​​на улучшение функциональности отладчика и интеграцию с Visual Studio . Работа с ядром сосредоточена на реализации файловых систем , управлении памятью и разработке надежного сетевого интерфейса. Syslinux служит загрузчиком проекта .

СОДЕРЖАНИЕ

Разработка с Cosmos

В Cosmos есть много возможностей для улучшения опыта разработки операционных систем с его помощью, призванных сделать процесс максимально быстрым и безболезненным, знание языка ассемблера не требуется для использования Cosmos.

Интеграция с Visual Studio

Ключевой особенностью Cosmos, которая отличает его от других операционных систем такого типа, является его тесная интеграция с Microsoft Visual Studio . Код можно писать, компилировать , отлаживать и запускать полностью через Visual Studio всего несколькими нажатиями клавиш. Cosmos больше не поддерживает Visual Studio 2015 или Visual Studio 2017 , теперь он поддерживает только Visual Studio 2019 .

Читайте также:  Салфетка декоративная пластиковая космос

Отладка

Cosmos можно легко отлаживать через Visual Studio при работе через PXE или на виртуальной машине. Присутствуют многие стандартные функции отладки, такие как точки останова, трассировка и ведение журнала. Кроме того, отладка может выполняться через последовательные кабели при работе на физическом оборудовании. При работе в VMWare Cosmos поддерживает пошаговое выполнение и точки останова даже во время работы операционной системы.

Cosmos использует виртуализацию, чтобы ускорить разработку, позволяя разработчикам тестировать свои операционные системы, не перезагружая свои компьютеры так часто. По умолчанию используется VMWare Player из-за простоты использования с точки зрения интеграции с проектом. Также поддерживаются другие среды виртуализации, такие как Bochs и VirtualPC. Также может быть сгенерирован ISO-образ диска, который можно записать на USB-накопитель, CD-ROM или аналогичный носитель.

Также поддерживается загрузка PXE, что позволяет удаленным машинам запускать Cosmos через сетевое соединение.

Процесс компиляции

IL2CPU

Для компиляции .NET CIL в язык ассемблера разработчики Cosmos создали опережающий компилятор под названием IL2CPU, предназначенный для синтаксического анализа CIL и вывода кодов операций x86 . (IL To CPU) — это компилятор AOT , написанный с использованием языка, совместимого с Common Intermediate Language ( C # ). Он переводит Common Intermediate Language в машинный код .

X # — это язык программирования низкого уровня, разработанный для архитектуры процессора x86 как часть операционной системы Cosmos, чтобы упростить разработку операционной системы. X # разработан , чтобы принести некоторые из C-подобного языка синтаксиса на языке ассемблера . Вначале X # был помощником для отладки сервисов Cosmos. Компилятор X # — это программа интерфейса консоли с открытым исходным кодом с нетипичной архитектурой. Он анализирует строки кода на токены и сравнивает их с шаблонами. Наконец, согласованные шаблоны кода X # переводятся в сборку синтаксиса Intel x86, обычно для компилятора NASM . В первых версиях операция X # была в основном 1: 1 с кодом сборки, но не была причиной написания компилятора X #.

Синтаксис

Синтаксис X # прост. Несмотря на то , что X # похож на C , синтаксис отличается и строже.

Комментарии

X # поддерживает только один вид комментария, однострочный комментарий в стиле C ++, начинающийся с двойной косой черты — // .

Константы

X # поддерживает определение именованных констант, объявленных вне функций. Определение числовой константы аналогично C ++ — например,

. Для ссылки на константу в другом месте требуется, например, # перед именем «#i» .

  • Для определения строковой константы используются одинарные кавычки ( » ). Чтобы использовать одинарную кавычку в строковой константе, ее необходимо экранировать, поместив перед ней обратную косую черту, как ‘I\’m so happy’ . Строки X # заканчиваются нулем .
  • Перед шестнадцатеричными константами ставится знак доллара ( $ ), за которым следует константа. ( $B8000 ).
  • Десятичные константы не украшены, но могут не начинаться 0 .
  • Двоичные и восьмеричные константы пока не поддерживаются.

Этикетки

Ярлыки в X # в основном эквивалентны ярлыкам на других языках ассемблера. В инструкции по переходу к метке используется goto мнемоника, а не обычная jump или jmp мнемоническая.

Пространства имён

Программные файлы X # должны начинаться с директивы пространства имен. В X # отсутствует иерархия пространств имен, поэтому любая директива будет изменять текущее пространство имен до тех пор, пока оно снова не изменится или пока файл не закончится. Переменные или константы в разных пространствах имен могут иметь одно и то же имя, поскольку пространство имен ставится перед именем члена на выходе сборки. Пространства имен не могут ссылаться друг на друга, кроме как через «читы» с использованием операций на уровне собственной сборки.

Читайте также:  Аппликации космоса для детей 5 лет

Функции

Весь исполнительный код X # должен быть помещен в функции, определенные ключевым словом function. В отличие от C, X # не поддерживает объявление каких-либо формальных параметров в заголовке функций, поэтому обычные круглые скобки после имени функции опускаются. Поскольку шаблоны с фиксированной строкой указаны в синтаксисе, реализованном в парсере кода, открывающая фигурная скобка не может быть помещена на следующую строку, в отличие от многих других языков C-стиля.

Поскольку X # является языком низкого уровня, фреймы стека не вставляются, поэтому по умолчанию в верхней части стека должен быть адрес EIP возврата. Вызовы функций X # действительно содержат аргументы, заключенные в круглые скобки, в отличие от заголовков функций. Аргументы, передаваемые функциям, могут быть регистрами, адресами или константами. Эти аргументы помещаются в стек в обратном порядке. Обратите внимание, что стек на платформах x86 не может отправлять или извлекать однобайтовые регистры.

return Выполнение ключевых слов возвращается на адрес возврата EIP сохраняется в стеке.

Арифметические и побитовые операции

X # может работать с тремя низкоуровневыми структурами данных: регистрами , стеком и памятью на разных портах. Регистры — это основа всех обычных операций для X #. Регистр можно скопировать в другой, написав DST = SRC вместо него mov или загрузив / сохранив инструкции. Регистры можно увеличивать или уменьшать так же легко. Арифметические операции (сложение, вычитание, умножение, деление) записываются как dest op src где src — константа, переменная или регистр, и dest одновременно является операндом и местом, где сохраняется результат.

Примеры присваивания и арифметических операций показаны ниже.

Регистр сдвига и качения аналогичен C.

Другие побитовые операции аналогичны арифметическим операциям.

Манипуляция Stack в X # выполняется с использованием + и — префиксы, где + выталкивает регистр, значение, константа или все регистры в стек и — сует значение некоторого регистра. Все константы помещаются в стек как двойные слова, если не указано иное (отправка одиночных байтов не поддерживается).

Переменные

Переменные определяются в пространствах имен (поскольку фреймы стека отсутствуют, локальные переменные не поддерживаются) с помощью var ключевого слова. Массивы можно определить, добавив тип и размер массива в конце объявления. По умолчанию переменные и массивы обнуляются. Чтобы ссылаться на значение переменной, оно должно начинаться с точки. Добавление к нему префикса @ будет ссылаться на адрес переменной.

X # может получить доступ к адресу с указанным смещением, используя квадратные скобки:

Сравнение

Есть два способа сравнения значений: чистое сравнение и сравнение if.

  • Чистое сравнение оставляет результат в FLAGS, чтобы его можно было использовать в собственной сборке или с использованием if ключевого слова без указания членов сравнения.
  • Если сравнение сравнивает два члена сразу после if ключевого слова.

Вот два способа написать (медленную strlen ) функцию длины строки X # ( ):

Есть шесть доступных операторов сравнения: = = != . Эти операторы можно использовать как в сравнениях, так и в циклах. Обратите внимание, что есть также побитовый оператор AND, который проверяет биты:

Написание кода Cosmos

Операционная система, созданная с помощью Cosmos, разрабатывается аналогично любой консольной программе .NET C #. Дополнительные ссылки сделаны в начале программы, которые предоставляют доступ к библиотекам Cosmos. Эти библиотеки переопределяют системные библиотеки, обычно используемые в консольных программах C #, поскольку полученный двоичный файл не будет работать при установке Microsoft Windows .

Читайте также:  Макет повер поинт космос

Пользовательский комплект и Visual Studio

Пользовательский комплект Cosmos является частью Cosmos, призванной упростить использование Cosmos для разработчиков, использующих Microsoft Visual Studio . После установки пользовательский комплект добавляет в Visual Studio новый тип проекта, который называется Cosmos Project. Это модифицированная версия консольного приложения с уже добавленным кодом компилятора Cosmos и загрузочной заглушкой.

Составление проекта

После завершения кода его можно скомпилировать с помощью компилятора .NET. Это преобразует приложение из исходного исходного кода ( C # или иначе) в Common Intermediate Language (CIL), родной язык .NET Framework. Затем приложение запускается, в нем отображается окно Cosmos Builder, которое предоставляет разработчику параметры, которые точно определяют способ компиляции проекта. Эти параметры включают в себя загрузку проекта — через эмуляторы, такие как Quick Emulator ( QEMU ), Virtual PC и VMWare , запись в файл образа диска (ISO), который впоследствии может быть записан на CD-ROM , или через Preboot Execution Environment. (PXE) сетевая загрузка, а также параметры отладки с использованием встроенного отладчика Cosmos и другие параметры.

Когда пользователь выбрал желаемые параметры, он нажимает кнопку «Построить». Это вызывает компилятор IL2CPU, который систематически просматривает код CIL всех приложений (за исключением кода компилятора Cosmos), конвертируя его в язык ассемблера для выбранной архитектуры процессора. По состоянию на 2016 год поддерживается только x86 . Затем Cosmos вызывает выбранный ассемблер для преобразования этого кода языка ассемблера в код операции собственного центрального процессора (ЦП) . Наконец, активируется желаемый вариант вывода, будь то запуск эмулятора, запуск механизма PXE или создание файла образа диска ISO из кода операции двоичного кода.

Варианты отладки

Cosmos предлагает несколько вариантов развертывания полученной ОС и отладки вывода.

Виртуализация

Cosmos позволяет пользователям загружать операционную систему в эмулируемой среде с помощью виртуальной машины . Это позволяет разработчикам тестировать систему на своем собственном компьютере без перезагрузки, что дает преимущества, заключающиеся в том, что не требуется дополнительное оборудование или что разработчики выходят из своей среды разработки . В настоящее время поддерживается только VMWare. Поддержка Bochs продолжается. QEMU и VirtualBox официально не поддерживаются.

Образы дисков

Эта опция записывает операционную систему в файл образа диска ( ISO ), который может быть загружен в некоторые эмуляторы (например, Bochs , QEMU или, чаще, VMware ) или записан на CD-ROM и загружен на реальном оборудовании. Этот параметр также позволяет выполнять развертывание на запоминающем устройстве USB, таком как флэш-накопитель USB , для загрузки на устройствах, которые могут не иметь дисковода оптических дисков. Поскольку сеть еще не налажена, отладка не поддерживается с помощью этого варианта развертывания.

Сетевая загрузка PXE

Эта опция позволяет операционной системе загружаться на реальном оборудовании. Данные отправляются через локальную сеть (LAN) на клиентский компьютер. Для этого требуются два компьютера: один в качестве клиентского компьютера (на котором загружается ОС) и один в качестве сервера (обычно это машина для разработки). Также требуется сеть, соединяющая два компьютера, клиентский компьютер с сетевой картой и базовая система ввода / вывода ( BIOS ), которая может загружаться по протоколу PXE. По состоянию на 2016 год отладка по сети не поддерживается.

Ассемблер Cosmos

Команда проекта Cosmos также создала ассемблер, который в конечном итоге станет основным ассемблером для системы Cosmos. Однако ассемблер по-прежнему неэффективен и медленен, поэтому вместо него используется Netwide Assembler (NASM).

Источник

Adblock
detector