Jump to content

Космос (операционная система)

Космос
Снимок экрана операционной системы AuraOS , созданной с помощью Cosmos , демонстрирующей возможность создания графического пользовательского интерфейса.
Разработчик Космос Проект
Написано в С# , Х#
Рабочее состояние Активный
Исходная модель Открытый исходный код
Последний выпуск Выпуск 20221121/21 ноября 2022 г .; 20 месяцев назад ( 21.11.2022 )
Репозиторий github /КосмосОС
Доступно в Английский
Платформы х86
ядра Тип Монолитный
Лицензия БСД
Официальный сайт www .gocosmos .org

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

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

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

Старые версии Cosmos были выпущены в Milestones , последней из которых была Milestone 5 (выпущена в августе 2010 г.). Совсем недавно проект перешел на простое наименование новых выпусков по номеру последнего коммита.

Релизы Cosmos делятся на два типа: Userkit и Devkit . Userkit — это предварительно упакованная версия, которая обновляется нерегулярно по мере добавления новых и улучшенных функций. Пользовательские наборы обычно считаются стабильными, но не включают в себя последние изменения и могут не иметь функций. Комплекты разработчика, относящиеся к исходному коду Cosmos, обычно стабильны, но могут содержать некоторые ошибки. Их можно приобрести на GitHub и необходимо собрать вручную. [1] Git используется для управления системой контроля версий.

Большая часть работы над Cosmos в настоящее время направлена ​​на улучшение функциональности отладчика и Microsoft Visual Studio интеграцию . Работа ядра сосредоточена на реализации файловых систем , управлении памятью и разработке надежного сетевого интерфейса. проекта Limine служит загрузчиком ; в старых версиях набора инструментов GRUB . вместо этого использовался [2]

Источник

[ редактировать ]

Идея Cosmos была создана Чадом Хауэром и первоначально разрабатывалась совместно Хауэром и Маттейсом тер Вордом . Со временем Cosmos поддерживался и улучшался многими другими людьми.

Развиваемся вместе с Cosmos

[ редактировать ]

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

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

[ редактировать ]

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

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

Cosmos использует виртуализацию , чтобы ускорить разработку, позволяя разработчикам тестировать свои операционные системы без необходимости часто перезагружать компьютеры. По умолчанию используется VMware Player, ввиду простоты его использования с точки зрения интеграции с проектом. Также поддерживаются другие среды виртуализации, такие как Bochs и Hyper-V. Также может быть создан образ диска ISO, который можно записать на флэш-накопитель USB, компакт-диск или аналогичный носитель.

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

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

[ редактировать ]

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

X# низкого уровня, — это язык программирования разработанный для процессорной архитектуры x86 как часть операционной системы Cosmos. Его цель — упростить разработку операционных систем за счет включения языка C синтаксиса в язык ассемблера . Первоначально X# использовался для отладки служб в Cosmos. Компилятор X# — это (консоль) с открытым исходным кодом программа с интерфейсом командной строки , которая анализирует строки кода на токены, сравнивает их с шаблонами и преобразует совпавшие шаблоны в синтаксис Intel x86, обычно для ассемблера YASM. Ранние версии X# работали с ассемблерным кодом в основном 1:1, но сейчас это уже не так. [ нужны разъяснения ]

Синтаксис

[ редактировать ]

Синтаксис X# прост, но более строг по сравнению C. с

Комментарии

[ редактировать ]

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

Константы

[ редактировать ]

X# позволяет определять именованные константы, объявленные вне функций. Числовые константы определяются аналогично C++ ; например:

const i = 0

. Ссылка на них в другом месте требует # перед именем; например: - "#i".

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

Этикетки

[ редактировать ]

Метки в X# функционируют аналогично меткам в других языках ассемблера. goto мнемоника используется для перехода к метке вместо обычного jump или jmp мнемонический.

CodeLabel1:
    goto CodeLabel2:

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

[ редактировать ]

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

namespace FIRST
// Everything variable or constant name will be prefixed with FIRST and an underscore. Hence the true full name of the below variable
// is FIRST_aVar.
var aVar

namespace SECOND
// It's not a problem to name another variable aVar. Its true name is SECOND_aVar.
var aVar

namespace FIRST
// This code is now back to the FIRST namespace until the file ends.

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

function xSharpFunction {
    // function code
}

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

function xSharpFunction {
    EAX = $10
    anotherFunction(EAX);
    return
}

function anotherFunction {
    //function code
}

The return Ключевое слово возвращает выполнение по обратному адресу EIP, сохраненному в стеке.

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

[ редактировать ]

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

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

ESI = 12345              // assign 12345 to ESI
EDX = #constantForEDX    // assign #ConstantForEDX to EDX
EAX = EBX                // move EBX to EAX              => mov eax, ebx
EAX--                    // decrement EAX                => dec eax
EAX++                    // increment EAX                => inc eax
EAX + 2                  // add 2 to eax                 => add eax, 2
EAX - $80                // subtract 0x80 from eax       => sub eax, 0x80
BX * CX                  // multiply BX by CX            => mul cx      -- division, multiplication and modulo should preserve registers
CX / BX                  // divide CX by BX              => div bx
CX mod BX                // remainder of CX/BX to BX     => div bx

Сдвиг и прокрутка регистров аналогичны C.

DX << 10  // shift left by 10 bits
CX >> 8   // shift right by 8 bits
EAX <~ 6  // rotate left by 6 bits
EAX ~> 4  // rotate right by 4 bits

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

DL & $08     // perform bitwise AND on DL with 0x08 and store the result in DL
CX | 1       // set the lowest bit of CX to 1 (make it odd)
EAX = ~ECX   // perform bitwise NOT on ECX and store the result in EAX
EAX ^ EAX    // erase EAX by XORing it with itself

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

+ESI                   // push esi
-EDI                   // pop into edi
+All                   // save all registers   => pushad
-All                   // load all registers   => popad
+$1badboo2             // push 0x1badboo2 on the stack
+$cafe as word         //          \/
+$babe as word         // push 0xcafebabe
+#VideoMemory          // push value of constant VideoMemory

Переменные

[ редактировать ]

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

namespace XSharpVariables
var zeroVar                      // variable will be assigned zero
var myVar1 = $f000beef           // variable will be assigned 0xf000beef
var someString = 'Hello XSharp!' // variable will be assigned 'Hello XSharp!\0',
var buffer byte[1024]            // variable of size 1024 bytes will be assigned 1024 zero bytes
...
EAX = .myVar1                    // moves value of myVar1 (0xf000beef) to EAX
ESI = @.someString               // moves address of someString to ESI
CL = .someString                 // moves first character of someString ('H') to CL
.zeroVar = EAX                   // assigns zeroVar to value of EAX

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

var someString = 'Hello XSharp!' //variable will be assigned to 'Hello XSharp!\0'
...
ESI = @.someString       // load address of someString to ESI
CL = 'B'                 // set CL to 'B' (rewrite 'H' on the start)
CH = ESI[1]              // move second character ('E') from string to CH
ESI[4] = $00             // end string
//Value of someString will be 'Bell' (or 'Bell\0 XSharp!\0')

Сравнение

[ редактировать ]

Существует два способа сравнения значений в X#: чистое сравнение и сравнение if.

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

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

// Method 1: using pure comparison
function strlen {
    ESI = ESP[4] // get pointer to string passed as first argument
    ECX ^ ECX    // clear ECX
Loop:
    AL = ESI[ECX]// get next character
    AL ?= 0      // is it 0? save to FLAGS
    if = return  // if ZF is set, return
    ECX++        // else increment ECX
    goto Loop    // loop...

//Way 2: using if
function strlen {
    ESI = ESP[4]    // get pointer to string passed as first argument
    ECX ^ ECX       // clear ECX
Loop:
    AL = ESI[ECX]
    if AL = 0 return// AL = 0? return
    ECX++
    goto Loop       // loop....
}

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

AL ?& $80      // test AL MSB
if = return    // if ZF is 0, test instruction resulted in 0 and MSB is not set.

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

[ редактировать ]

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

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

[ редактировать ]

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

Компиляция проекта

[ редактировать ]

После завершения кода его можно скомпилировать с помощью Roslyn, компилятора .NET, либо через Microsoft Visual Studio , либо с помощью инструментов командной строки .NET (dotnet).

При этом приложение преобразуется из исходного исходного кода ( C# или другого) в Common Intermediate Language (CIL), собственный промежуточный язык .NET.

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

Параметры отладки

[ редактировать ]

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

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

[ редактировать ]
Шаблон Cosmos по умолчанию, как показано в QEMU.

Cosmos позволяет пользователям загружать операционную систему в эмулируемой среде с помощью виртуальной машины . Это позволяет разработчикам тестировать систему на своем компьютере без необходимости перезагрузки, что дает преимущества, заключающиеся в отсутствии необходимости в дополнительном оборудовании или выходе из интегрированной среды разработки (IDE). VMware является основным методом виртуализации, однако поддерживаются и другие, такие как QEMU и Hyper-V.

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

[ редактировать ]

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

PXE-загрузка по сети

[ редактировать ]

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

См. также

[ редактировать ]
  1. ^ Jump up to: а б Веб-сайт Cosmos: репозиторий проекта на GitHub.
  2. ^ «Изменить загрузчик на Limine · Запрос на извлечение № 2521 · CosmosOS/Cosmos · GitHub» . Гитхаб .
[ редактировать ]

Освещение новостей

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 1f22fa12a7c23a0e89c4e74090e4a336__1720183320
URL1:https://arc.ask3.ru/arc/aa/1f/36/1f22fa12a7c23a0e89c4e74090e4a336.html
Заголовок, (Title) документа по адресу, URL1:
Cosmos (operating system) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)