Серена - экспериментальная операционная система, основанная на современных принципах проектирования при поддержке распространенного превентивного параллелизма и нескольких пользователей. Ядро ориентировано на объектно и предназначено для кроссплатформенного и будущего доказательства. Он работает на системах Amiga с установленным 68030 или лучшим процессором.
Один из аспектов, который отличает его от традиционного OSS на основе потоков, заключается в том, что он строится исключительно вокруг очередей для отправки, несколько похожих на грандиозную центральную диспетчерскую Apple. Не существует поддержки для создания потоков в пространстве пользователя или в пространстве ядра. Вместо этого ядро реализует концепцию виртуального процессора, где он динамически управляет пулом виртуальных процессоров. Размер пула автоматически регулируется на основе потребностей очередей отправки, а виртуальные процессоры назначаются для процессов по мере необходимости. Вся параллелизм пространства ядра и пользователя достигается путем создания очередей отправки и отправки рабочих элементов для отправки очередей. Рабочие элементы - это просто закрытие (функция с связанным состоянием) с точки зрения пользователя.
Другим интересным аспектом является обработка прерываний. Код, который хочет отреагировать на прерывание, может зарегистрировать семафор подсчета с помощью контроллера прерывания для прерывания, с которым он хочет обрабатывать. Затем контроллер прерывания будет сигнализировать о семафоре каждый раз, когда происходит прерывание. Использование счетного семафора гарантирует, что код, который заинтересован в прерывании, не пропускает возникновение прерывания. Преимущество перевода прерываний в сигналы в семафоре состоит в том, что код обработки прерываний выполняется в четко определенном контексте, который является таким же контекстом, в котором работает любой другой вид кода. Он также дает код обработки прерывания большую гибкость, поскольку он не должен немедленно реагировать на интерпретату. Информация, которую произошло прерывание, никогда не теряется, независимо от того, оказался ли код обработчика прерываний занят другими вещами во время прерывания или нет.
Ядро, как правило, возвращает. Это означает, что виртуальные процессоры продолжают быть запланированными, а контекст переключается на превентивно, даже когда процессор выполняется внутри ядра. Кроме того, в ядре доступны полный комплимент счета семафоров, переменных состояния и API блокировки. API этих объектов очень напоминает то, что вы найдете в реализации пространства пользователя традиционной ОС.
Серена реализует иерархическую структуру процесса, похожая на POSIX. Процесс может породить ряд дочерних процессов, и он может передавать командную строку и переменные окружающей среды своим детям. Процесс обращается к ресурсам ввода -вывода по каналам ввода -вывода, которые похожи на дескрипторы файлов в POSIX.
Существует два примечательных различия между моделью процесса стиля POSIX и моделью Serena. Хотя сначала вместо использования fork (), за которым следует exec () для порождения нового процесса, вы используете одну функцию в Serena, называемой Process_spawn (). Это делает нерест процесс намного быстрее и значительно менее подверженным ошибкам.
Во -вторых, дочерний процесс не наследует файловые дескрипторы своего родителя по умолчанию. Единственным исключением являются дескрипторы файла 0, 1 и 2, которые представляют входные и выходные потоки терминала. Эта модель гораздо менее подвержена ошибкам по сравнению с моделью POSIX, где процесс должен быть осторожным, чтобы закрыть дескрипторы файлов, которые не хотят переходить к детскому процессу, прежде чем он появится ребенком. Делать это было легко в первые дни UNIX, когда приложения были в значительной степени самостоятельно, и когда не было поддержки динамических библиотек. Сегодня наоборот, потому что приложения гораздо сложнее и зависят от многих сторонних библиотек.
Форматом исполняемого файла в настоящее время является форматом файла Atari St Gemdos, который является близким относительно исполняемого формата AOUT. Этот формат файла в конечном итоге будет заменен форматом файла, который сможет поддерживать динамические библиотеки. Однако сейчас это достаточно хорошо, чтобы выполнить работу.
Ядро реализует Serenafs, которая является иерархической файловой системой с разрешениями и информацией пользователя и группы. Файловая система может быть установлена поверх каталога, расположенного в другой файловой системе для расширения пространства имен файлов. Все это работает так же, как это работает в системах POSIX. Процесс, который хочет создать дочерний процесс, может указать, что дочерний процесс должен быть ограничен подрисом глобального пространства имен файловых систем.
Загрузочная файловая система в настоящее время основана на ОЗУ. ПЗУ содержит изображение диска, которое создается с помощью инструмента дисковоза и служит шаблоном для оперативного диска. Это изображение диска ПЗУ скопировано в ОЗУ во время загрузки.
Пользовательский пространство имеет поддержку Libc, Libsystem, Libclap и самого начала Libm. Libsystem - это библиотека, которая реализует пользовательскую сторону интерфейса ядра. Libclap - это библиотека, которая реализует анализ аргументов для программ интерфейса командной строки.
Serena OS поставляется с оболочкой, которая реализует формально определенный язык оболочки. Вы можете найти документ Shell здесь.
Следующие сервисы ядра в настоящее время реализованы:
В настоящее время доступны следующие службы пространства пользователей:
В настоящее время доступны следующие программы пространства пользователей:
Уровень полноты и правильности различных модулей в настоящее время изменяется. С течением времени планируется улучшиться :)
В настоящее время поддерживается следующее оборудование:
Установка проекта для разработки и запуска ОС немного вовлечена. Приведенные ниже инструкции предназначены для Windows, но они должны работать почти то же самое на Linux и MacOS.
Первое, что вам понадобится, это эмулятор компьютера Amiga. Я использую Winuae, которые вы можете скачать с https://www.winuae.net/download
Загрузите установщик Winuae и запустите его. Это поместит эмулятор в каталог «Program Files» на загрузочный диск.
Затем загрузите и установите компилятор и ассемблер VBCC, необходимые для создания операционной системы. Вы можете найти домашнюю страницу проекта по адресу http://www.compilers.de/vbcc.html и страницы загрузки для инструментов по адресу http://sun.hasenbraten.de/vbcc.
Версия, которую я использую для своей разработки и которая, как я знаю, работает правильно в Windows 11, составляет 0,9 ч. Обязательно добавьте переменную среды с именем VBCC , которое указывает на папку VBCC на вашем диске, и добавьте папку vbccbin в переменную среды PATH .
Обратите внимание, что вам необходимо установить инструменты Microsoft Visual Studio и командные линии, потому что компилятор Microsoft C необходим для создания инструментов сборки в Windows.
Наконец, установите GNU для Windows и убедитесь, что он находится в переменной среды PATH . Прямой способ сделать это-выполнить следующую команду Вингета в окне оболочки: winget install GnuWin32.Make .
Вам нужно выполнить этот шаг только раз и, прежде чем попытаться построить ОС. Цель этого шага состоит в том, чтобы создать пару инструментов, которые необходимы для создания ядра и пространственных библиотек. Вы можете найти документацию для этих инструментов здесь.
Сначала откройте командную строку разработчика в терминале Windows, а затем CD в папку Serena/Tools . make и нажмите возврат. Это создаст все необходимые инструменты и поместит их в папку Serena/build/tools . Инструменты будут сохранены в этом месте, даже если вы выполняете полную чистую очистку проекта ОС.
Откройте папку Project Serena в коде Visual Studio и выберите Build All из меню Run Build Task... Это построит ядро, libsystem, libc, libm и shell и генерирует один файл Serena.rom в папке Serena/product/Kernel/ . Этот ROM -файл содержит ядро, библиотеки пространства пользователей и оболочку.
Сначала вам нужно будет создать конфигурацию Amiga, по крайней мере, 68030 CPU (то есть Amiga 3000 или 4000) в Winuae, если вы еще этого не сделали. Самый простой способ сделать это - отправиться в QuickStart и выбрать A4000 в качестве модели. Затем перейдите на страницу Hardware/ROM и обновите текстовое поле «Main ROM», так что оно указывает на файл Serena.rom внутри Serena/build/product/ . Наконец, дайте виртуальной Amiga не менее 1 МБ Fast RAM, перейдя на страницу оборудования/оперативной памяти и установив «медленную» запись на 1 МБ. Сохраните эту конфигурацию, чтобы вам не пришлось воссоздать ее в следующий раз, когда вы хотите запустить ОС.
Загрузите конфигурацию, а затем нажмите кнопку «Пуск» или просто дважды щелкните конфигурацию на странице конфигураций, чтобы запустить ОС. Эмулятор должен открыть экран, который показывает загрузочное сообщение, а затем приглашение оболочки. Смотрите страницу оболочки для списка команд, которые поддерживаются оболочкой.
Распределено по лицензии MIT. См. LICENSE.txt для получения дополнительной информации.
Dietmar Planitzer - @linkedin
Ссылка на проект: https://github.com/dplanitzer/serena