|ω・`)チラッ
さいきん QEMU RISC-V virt マシンで何ができるか色々探していたところ、なんと VGA が使えることがわかったので記事を書きます。 github.com 最新の RISC-V で古き良き VGA が動いてるのが面白いだけです。実用性はあまりありません。笑 解説 qemu で virti…
面白そうな拡張が発表されたようです。 www.intel.com Intel APX は一言で言うとx86汎用命令のAVX化です*1 AVX では新しいプレフィックスを追加することで今までの SSE 命令ではエンコーディングできない機能が追加されました。 APX もこれに似ていて、今ま…
前回の記事でチラッと触れたものの正式な告知をしていなかったのでここで現状をまとめます。 もともと MYOS の実装には Rust の nightly の機能が必要だったため、 nightly の機能を積極的に使っていました。 nightly の機能は安定化されていないため、今ま…
Intel が 64bit モードのみのサブセットの x86 アーキテクチャを検討中という噂が流れてきました。 www.intel.com 検討始めるのが10年遅くないですか? ここから普及するまでまた何年もかかるのに… x86 の枷 以前ぼくのブログでも紹介したことがあるように、…
教育用パソコンとかいう奴らしいです 元は5万円くらいしたようですが、現在は2万円くらいで手に入るので購入してみました。 結論から言うと、ハードウェアはゴミです。これを買うくらいなら mouse の E10 の方がはるかにマシです。 windows がギリギリ動くス…
最近 QOI (Quite OK Image Format) という新しい画像形式が登場しました。 QOI — The Quite OK Image Format PDF1 ページに収まる単純な仕様でエンコーダーやデコーダーもC言語で数百行と単純で高速ですが、PNGよりやや圧縮率が悪い程度というトレードオフが…
Intel64 は AMD64 を参考に実装したので、9割以上のアプリケーションにおいて概ね互換性があります。 一方、船頭多くしてなんとやら、両社の政治的な思惑などが絡んで意図的に非互換になっている部分があったり、細部の互換性をとることができていない部分…
MYOS の起動処理をかんたんに解説します。 MYOS をメインに解説しますが、 TOE は MYOS のサブセットとして開発が始まったので共通点も多いです。 Boot Loader 〜 カーネルエントリポイント まずはブートローダーが起動します。ブートローダーの細かい動作は…
MYOS のスケジューラーは SMP に対応しています。 つまり、 CPU を 100% 使おうとする重いタスクが2個あった場合、合計で 200% ほど使うことができるわけです。 これがシングルコアだったら 100% を仲良く分け合って 50% しか使うことができません。 マルチ…
昨日の日記で何故ビットマップクラスが3種類必要になるのか少し補則します。 生ポインタと Box 旧 MYOS のビットマップは生ポインタでデータを管理していました。 これは所有権もライフタイムも Rust によって管理されておらず借用の制限もなかったので C …
近代的な OS は一部の組み込み用途をのぞくと画像処理が不可欠です。 MYOS や TOE も画像処理にそれなりの割合を割いています。 MYOS と TOE の大きな違い MYOS の主要なターゲットは UEFI で、 UEFI では 32bit ARGB 形式が標準です。 また、近代的な画像処…
MYOS や TOE にはアクティビティモニターがあります。 これらは見せ方が若干異なりますが、定期的にスケジューラーが集計したデータをそのまま表示しているだけです。 では、スケジューラーはどのように集計しているのでしょうか? CPU時間 スレッドの切り替…
昔の OS は CDROM で提供されていました。 TOE は標準でフロッピーから起動しますが、さいきん入手難しくなってきたので CD 起動に対応したいと思います。 ロメオとジョリエット CDROM のファイルシステムはたくさんの規格が複雑にからんでいます。 CDROM は…
古の MEG-OS は MEGFS という独自ファイルシステムをサポートしていました。 それ、 FAT でよくね? MEGFS はファイル管理にファイルアロケーションテーブル (いわゆる FAT) を採用するなど FAT によく似た特徴を備えており、 FAT と MEGFS の違いは FAT と …
年初まで x64 や WebAssembly で Rust を色々いじってましたが、少しお休みして x86 でコードを書いてみようと思います。 動かす環境はベアメタル ʕ•ᴥ•ʔ になりますが、 Rust はベアメタルの適切なターゲットがありません。 CPU さえ合ってれば OS はどうで…
myos では Null Pointer Exception は発生しません。 理由は2つあって、言語に Rust を採用しているというのと、 Null Pointer Exception が発生するようにページングを設定していないからです。 事件編 Rust には Null Pointer Exception によく似た別のエ…
myos のウィンドウ描画アーキテクチャについて解説します。 執筆時点での情報なのでバージョンによっては詳細が異なる場合があります。 なお、ここにあるのはカーネルの構造なので、アプリケーションレイヤーではラッピングしたオブジェクトなど詳細は異なり…
古き良き C 言語では NULL ポインターがよく使われましたが、 NULL の発明者は10億ドルを超える莫大な経済損失を引き起こしたとのちに後悔しました。 モダンな言語は NULL に対する安全性を担保する仕組みを持っています。 Rust では Null 安全性のために Op…
さいきん変な OS が発表されたっぽいです。 basicdos.com 2020 年になって DOS !!! ぼくはこういうソフトを見つけた時に、普通の人とはちょっと視点で見てしまいます。 このソフト、ぼくの自作エミュレータで動くのかな? バイナリないナリ ということで、ま…
さいきん Rust の基本戦略をやっと完全に理解しました。 オブジェクトはスタックに割り当てます。(スタックポインタを減算するだけ) 所有権とライフタイムによってオブジェクトの生存期間が関数の生存期間を超えないように制御します。 関数を抜けたらスタ…
最近 myos の開発していて気になったことがあります。 myos のスケジューラーをほとんどいじってないのに今まで見たことない不審な動きをするようになったんですよ そういえば、開発用の Mac を Intel から Apple に買い替えました。 そして、現状 Apple Mac…
いまどきの PC 用 OS では ACPI 対応を避けて通ることができません。 現在、私の OS では以下の ACPI ライブラリを利用しています。 GitHub - rust-osdev/acpi: Rust library for parsing ACPI tables and AML ACPI には様々なテーブルがありますが、このラ…
EFER.LME と EFER.LMA をご存知ですか? これらのフラグは x64 CPU でロングモードの遷移に関わるフラグです。 では、2つのフラグの役割の違いをご存知ですか? ロングモードの遷移 ロングモードの遷移についておさらいしてみましょう。 *1 まずは、 CR0 レ…
x86 の汎用レジスタは AX CX DX BX です。AX BX CX DX ではありません! この由来について 8086 のルーツから探ってみたいと思います。 Intel 4004 Intel が初めて作った CPU は電卓を作るために開発された 4004 でした。 このことから 8086 は電卓の子孫と…
前回の記事の UEFI ゴルフの続報です。Hello world はどの環境でも文字列出力関数(API, メソッド, etc...)を呼び出すだけなのでコードはほぼ定型となりコード部分の最適化の余地はほとんどありませんでした。 ゴルフのお題のひとつに CHARS というものがあり…
UEFI は実行ファイルに PE/COFF という形式を採用しています。PE/COFF 形式はご存知の方も多いかと思いますが Windows で現在主流の実行ファイル形式で、名前の通り昔 UN*X で使われていた COFF 形式の派生です。 COFF から PE/COFF になる際にオリジナルの …
x86 には BitTest というマイナーな命令があります。具体的には BT BTS BTR BTC の4種類あって、それぞれ特定のビットをテスト(1かどうか返す)、セット(1)する、リセット(0)する、反転する(0⇔1)命令になります。BitTest 命令をレジスタに使った場合はち…
ロングモードと64ビットモードの違い、分かりますか?おそらく多くの人が混乱していると思うのでブログにまとめます。(そしてぼくは混乱してないことを祈る極論を言うと、現代の x86 系プロセッサにはリアルモード、プロテクトモード、ロングモードの3つの…
IBM PC の BIOS は通常、約 55ms / 18.2Hz ごとにカウントしています。 この数値は一体どこから来てどんな意味があるのでしょうか?まず、 IBM PC で使われているタイマーIC 8254 PIT の動作クロック入力が約 1193182Hz となっています。 すごく中途半端な値…
フォントエディタにいろいろと不満があったので自作することにしました☆(ゝω・)v現在は base64 エンコードした ASCII 形式の FONTX2 のみ入出力できます。 オリジナルフォーマットも考えてるけど実現可能性は未知数です。Electron で作ったので Web でもほ…