Serena是一種基於現代設計原理的實驗操作系統,支持普遍的先發製人並發和多個用戶。內核是面向對象的,設計為跨平台和未來的證明。它在安裝68030或更高的CPU的Amiga系統上運行。
除了基於傳統線程的OSS之外,它還設置了一個方面,它純粹是圍繞著派遣隊列的構建,與蘋果的Grand Central Dispatch有點相似。不支持在用戶空間或內核空間中創建線程。相反,內核實現了一個虛擬處理器概念,它可以動態地管理虛擬處理器池。根據調度隊列的需求自動調整池的大小,並根據需要將虛擬處理器分配給流程。所有內核和用戶空間並發都是通過創建調度隊列和提交工作項來派遣隊列來實現的。從用戶的角度來看,工作項僅僅是關閉(具有關聯狀態的函數)。
另一個有趣的方面是中斷處理。想要對中斷反應的代碼可以在中斷控制器中註冊計數信號量,以便其要處理的中斷。然後,中斷控制器每次中斷時都會發出信號信號。使用計數信號量確保對中斷感興趣的代碼不會錯過中斷的發生。將中斷轉換為信號上的信號的優點是,中斷處理代碼在明確的上下文中執行,與任何其他類型的代碼運行的上下文相同。它還使中斷處理代碼更加靈活性,因為它不必立即對中斷做出反應。中斷發生的信息永遠不會丟失,無論中斷處理程序代碼是否在中斷時都忙於其他事情。
內核通常是重新進入的。這意味著即使在內核內執行CPU時,虛擬處理器仍會繼續安排,並且上下文進行了預先切換。此外,在內核內還提供了計數信號量,條件變量和鎖定API的全面稱讚。這些對象的API非常類似於您在傳統操作系統的用戶空間實現中發現的內容。
Serena實現了類似於POSIX的分層過程結構。一個過程可能會產生許多兒童過程,並且它可能會將命令行和環境變量傳遞給其子女。一個流程通過I/O頻道訪問I/O資源,與POSIX中的文件描述類似。
但是,POSIX樣式過程模型與Serena模型之間存在兩個顯著的區別:首先,而不是使用fork(),然後是exec()產生一個新的過程,而是在Serena中使用一個名為Process_spawn()的單個函數。這使產卵的過程更快,易於誤差。
其次,默認情況下,子進程不會繼承其父母的文件描述符。唯一的例外是代表終端輸入和輸出流的文件描述符0、1和2。與POSIX模型相比,該模型容易發生的錯誤要小得多,POSIX模型必須謹慎地關閉文件描述符,而文件描述符不想在子過程產生孩子之前將其傳遞到子過程。在Unix的早期,當應用程序幾乎自我包含,並且沒有支持動態庫時,這樣做很容易。今天情況恰恰相反,因為應用程序更加複雜,並且取決於許多第三方庫。
目前,可執行文件格式是Atari ST Gemdos文件格式,該格式相對於AOUT可執行格式是一個接近的。最終將用能夠支持動態庫的文件格式替換此文件格式。但是,目前已經足夠了,可以完成工作。
內核實現Serenafs,這是一個具有權限和用戶和組信息的分層文件系統。文件系統可以安裝在另一個文件系統中的目錄的頂部,以擴展文件名稱空間。所有這些工作類似於它在POSIX系統中的工作方式。想要產生子進程的過程可以指定兒童進程應限制在全局文件系統名稱空間的子樹中。
啟動文件系統當前基於RAM。 ROM包含一個磁盤映像,該磁盤圖像是使用磁盤模擬工具創建的,並用作RAM磁盤的模板。此ROM磁盤圖像在啟動時被複製到RAM。
用戶空間支持LIBC,LIBSYSTEM,LIBCLAP和LIBM的開始。 Libsystem是一個實現內核接口的用戶空間端的庫。 libclap是一個庫,可實現命令行接口程序的參數解析。
Serena OS帶有一個實現正式定義的外殼語言的外殼。您可以在此處找到Shell文檔。
目前實施以下內核服務:
此時可用以下用戶空間服務:
此時可用以下用戶空間程序:
目前,各種模塊的完整性和正確性水平都有很大不同。隨著時間的流逝,事情通常是計劃改善的:)
目前支持以下硬件:
為開發和運行操作系統設置項目有點涉及。下面的說明是針對Windows的,但它們應該在Linux和MacOS上工作幾乎相同。
您需要的第一件事是Amiga計算機仿真器。我正在使用winuae,您可以從https://www.winuae.net/download下載它
下載wituae安裝程序並運行它。這將使模擬器在啟動驅動器上的“程序文件”目錄中。
下載並安裝構建操作系統所需的VBCC編譯器和彙編程序。您可以在http://www.compilers.de/vbcc.html上找到項目主頁,並在http://sun.hasenbraten.de/vbcc上找到工具的下載頁面。
我用於開發的版本,我知道在Windows 11上正常工作的版本為0.9h。請確保添加一個名稱為VBCC環境變量,該變量指向磁盤上的VBCC文件夾,然後將vbccbin文件夾添加到PATH環境變量。
請注意,您需要安裝Microsoft Visual Studio和命令行工具,因為需要Microsoft C編譯器來構建Windows上的構建工具。
最後,為Windows安裝GNU Make Make,並確保它在PATH環境變量中。做到這一點的直接方法是在外殼窗口中執行以下winget命令: winget install GnuWin32.Make 。
您只需要在嘗試構建操作系統之前和之前執行此步驟。此步驟的目的是構建建立內核和用戶空間庫所需的幾個工具。您可以在此處找到這些工具的文檔。
首先在Windows終端打開開發人員命令提示符,然後在Serena/Tools文件夾中CD打開CD。 make和點擊返回。這將構建所有必需的工具,並將其放置在Serena/build/tools文件夾中。即使您對操作系統項目進行全面清潔,這些工具也將保留在此位置。
在Visual Studio代碼中打開Serena Project文件夾,然後從Run Build Task...菜單中選擇Build All 。這將構建內核,libsystem,libc,libm和shell,並在Serena/product/Kernel/ folder中生成一個Serena.rom文件。該ROM文件包含內核,用戶空間庫和外殼。
首先,如果還沒有,則需要在Winuae中創建至少68030 CPU(即Amiga 3000或4000)的Amiga配置。做到這一點的最簡單方法是轉到Quickstart並選擇A4000作為模型。然後轉到硬件/ROM頁面,然後更新“主ROM文件”文本字段,以指向磁盤上Serena/build/product/ folder內的Serena.rom文件。最後,通過轉到硬件/RAM頁面並將“慢”條目設置為1MB,最終將您的虛擬Amiga至少1MB快速RAM。保存此配置,以便下次您要運行操作系統時不必重新創建它。
加載配置,然後點擊開始按鈕,或者只需雙擊“配置”頁面中的配置以運行OS。模擬器應打開顯示引導消息的屏幕,然後打開一個shell提示。有關Shell支持的命令列表,請參見Shell頁面。
根據MIT許可分發。有關更多信息,請參見LICENSE.txt 。
Dietmar Planitzer- @linkedin
項目鏈接:https://github.com/dplanitzer/serena