借り初めのひみつきち

仮ブログです。

megos

MYOS の現状

前回の記事でチラッと触れたものの正式な告知をしていなかったのでここで現状をまとめます。 もともと MYOS の実装には Rust の nightly の機能が必要だったため、 nightly の機能を積極的に使っていました。 nightly の機能は安定化されていないため、今ま…

ハイブリッドアーキテクチャ

第12世代 Intel プロセッサの最大の特徴は、高性能コア (Performance の P) と高効率コア (Efficient の E) によるハイブリッドアーキテクチャを採用していることです。 これは Arm で big.LITTLE と呼ばれていたものによく似ていて、 ひとつのプロセッサで…

自作OSの描画が遅い理由 - MTRR と WriteCombining

自作OSで描画重視のプログラムを作っていると、本来スペックが高いはずの機種で思ったほど描画速度が出ない現象に遭遇することがあります。 memtest などでベンチマークを取ってみるとメモリの転送速度は十分に出ているはずなのに、実際に描画してみると単純…

最小限の USB Hub 対応 ver.2

以前 USB Hub の制御方法について記事を書きましたが、当時は USB2 Hub しか制御できていなかったのでアップデートします。 USB Hub の基本 USB ではそれぞれのデバイスに 1〜127 の 7bit のアドレスを割り当て、バス全体で最大 127 台までの USB デバイスを…

最近の myos

最後にこの記事書いたの何ヶ月前だったかな?な感じなのでタイトルも変更です。 綺麗なウィンドウシステムがそれなりに動くようになって逆に見た目の進化が乏しくなってしまった myos ですが、今も中身は進化しています。 外部アセンブラの廃止 高級言語で O…

私の OS のご紹介

ここ数年 Rust で meg-os という名前の自作 OS を作っています。 github.com 過去に何度か0から作り直しているので、似たような名前の別のものを昔見たり聞いたりしたことがあるかもしれません。 現在のコードベースのコードネームは「Maystorm」となってい…

謎の SSE 例外

先週、 myos で hd audio に対応しましたが、波形メモリに直接波形を書き込むことで beep 音を生成していました。 この方法だと波形生成後のフィルター処理などが困難で、複数のアプリケーションで同時に音を鳴らすこともできませんでした。 ということで、…

今月の myos

久しぶりの更新になります。 現在のバージョンの myos には明確な内部目標がありました。 Intel HD Audio の対応です。 *1 HD Audio は近年の PC にはかなりの割合で搭載されており、仕様も公開されていてそれなりに情報が出揃っているので実装可能だろうと…

誰も教えてくれない AMD64 と Intel64 の違い (ページング編)

Intel64 は AMD64 を参考に実装したので、9割以上のアプリケーションにおいて概ね互換性があります。 一方、船頭多くしてなんとやら、両社の政治的な思惑などが絡んで意図的に非互換になっている部分があったり、細部の互換性をとることができていない部分…

今月の myos

このシリーズ、ほぼ月1になっていたのでタイトルを変更します。 SIMD と Lazy FPU save / restore CPU の高速化はいくつかの歴史を経て、近年の CPU は「ひとつの命令で多数のデータを処理する」命令をサポートしています。 これを一般に SIMD (Single Inst…

今週の MYOS 🧚‍♀️

MYOS でも簡単なゲームを動かせそうになってきたので準備をします。 多くのゲームは画面内をキャラクターが動き回りますが、キャラクターを描画する時は背景との重ね合わせ処理が必要になりますし、キャラクターが移動するときはそれに加えて元いた場所の背…

今週の MYOS

wasm-strip MYOS のアプリケーションは WebAssembly 形式に対応していて、現在は Rust で開発する前提でライブラリの整備を進めています。 しかしどうやら Rust で WebAssembly を生成すると Release ビルドにも関わらずバイナリにデバッグ情報のようなもの…

今週の MYOS

今週というタイトルなのに最後の更新何週間前だったっけ?という最近の MYOS 界隈のトピックです。 スケジューラキュー 一般にマルチタスク OS のスケジューラには実行待機中のスレッドを管理するためのキューがあります。 このキューは全てのプロセッサコア…

今週の MYOS

さいきんの MYOS 界隈のトピックです。 WASM 高速化 以前の大規模改修で数倍の高速化に成功した WASM ランタイムですが、まだいくつか課題と高速化の余地があります。 まず、実行時エラーの処理を改善しました。 以前のエラー処理は命令実行時に現在の命令を…

今週の MYOS 🎉

今週、というには間が空いてしまった最近の MYOS/TOE 界隈のトピックです。 MAYSTORM 直訳すると5月の風になります。 MYOS が最初のコミットから1年経ったので、1周年を記念して新しい名前を付けて仮プロジェクトから正式なプロジェクトに昇格しました gi…

今週の MYOS

さいきんの MYOS/TOE 界隈のトピックです。 WebAssembly 高速化 (fused op) 中間コード変換とスタック操作合理化によって以前に比べると結構速くなりました。 この2つの改良によって実現可能になった新しい高速化手法があります。 WebAssembly は所謂スタッ…

MYOS のウィンドウのつくりかた

MYOS/TOE のアプリでウィンドウを作るところを少し詳しく見てみましょう。 ※ 執筆時点のバージョンの TOE をもとに記述しています。まだ API 安定化してないのでバージョンごとに細かい違いがあったり MYOS と TOE の間でも微妙に違うことがあります。 アプ…

wasm ランタイムの高速化

現在の自作 wasm ランタイムはインタプリタ実行しています。 インタプリタと JIT VM やエミュレーターの実装方法は大きく分けると2種類あります。 ある程度一気にターゲットの機械語に変換してしまう JIT 方式と、1命令ずつ読み込んで動作を再現するインタ…

Wasm on Wasm

ついに、 WebAssembly の自作エミュレータの上で動く自作 OS の上で自作 WebAssembly ランタイムが動くようになりました つまり Wasm on Wasm ですね٩( 'ω' )و 以下に試験的に体験版設置してるので起動してみることができます。 meg-os.org もちろん PC98 …

initramfs

コンピューターの神秘のひとつに、起動時にファイルシステムドライバを読み込むためにファイルシステムにアクセスしなければならないという矛盾があります。 現代の OS では起動に必要なファイルを収めた簡易ファイルシステムを RAM に展開してこれを解決し…

MYOS の起動処理概要

MYOS の起動処理をかんたんに解説します。 MYOS をメインに解説しますが、 TOE は MYOS のサブセットとして開発が始まったので共通点も多いです。 Boot Loader 〜 カーネルエントリポイント まずはブートローダーが起動します。ブートローダーの細かい動作は…

スケジューラーと優先順位の逆転

MYOS のスケジューラーは SMP に対応しています。 つまり、 CPU を 100% 使おうとする重いタスクが2個あった場合、合計で 200% ほど使うことができるわけです。 これがシングルコアだったら 100% を仲良く分け合って 50% しか使うことができません。 マルチ…

3種のビットマップ

昨日の日記で何故ビットマップクラスが3種類必要になるのか少し補則します。 生ポインタと Box 旧 MYOS のビットマップは生ポインタでデータを管理していました。 これは所有権もライフタイムも Rust によって管理されておらず借用の制限もなかったので C …

ビットマップクラス統合

近代的な OS は一部の組み込み用途をのぞくと画像処理が不可欠です。 MYOS や TOE も画像処理にそれなりの割合を割いています。 MYOS と TOE の大きな違い MYOS の主要なターゲットは UEFI で、 UEFI では 32bit ARGB 形式が標準です。 また、近代的な画像処…

CD から OS を起動する

昔の OS は CDROM で提供されていました。 TOE は標準でフロッピーから起動しますが、さいきん入手難しくなってきたので CD 起動に対応したいと思います。 ロメオとジョリエット CDROM のファイルシステムはたくさんの規格が複雑にからんでいます。 CDROM は…

MEGFS

古の MEG-OS は MEGFS という独自ファイルシステムをサポートしていました。 それ、 FAT でよくね? MEGFS はファイル管理にファイルアロケーションテーブル (いわゆる FAT) を採用するなど FAT によく似た特徴を備えており、 FAT と MEGFS の違いは FAT と …

新しい自作 OS 始めました

前回の日記で作り始めたもの、それは新しい OS でした。 概要欄 今のところ特徴を myos と比較すると以下のようになります。 myos のサブセット的な感じになっていて一部ソースを流用しています。 MYOS TOE コードネーム myos toe アーキテクチャ x86-64 x86…

ぬるぽ警察24時

myos では Null Pointer Exception は発生しません。 理由は2つあって、言語に Rust を採用しているというのと、 Null Pointer Exception が発生するようにページングを設定していないからです。 事件編 Rust には Null Pointer Exception によく似た別のエ…

myos の描画アーキテクチャ

myos のウィンドウ描画アーキテクチャについて解説します。 執筆時点での情報なのでバージョンによっては詳細が異なる場合があります。 なお、ここにあるのはカーネルの構造なので、アプリケーションレイヤーではラッピングしたオブジェクトなど詳細は異なり…

Rust 自作 OS 日記/Part 9 my new os...

2020 年を振り返ってみると、色々と検討した結果もう Rust を勉強するしかないなー ということになって春ごろから Rust の勉強を開始、そして myos の開発が始まりました。 さて、およそ半年開発を続けてきた「myos」ですが、 「私の OS」ってなんやねーん …