自作 OS「FerriOS」の開発日記、第3回です。前回はユーザプロセスを実装して機械語コードでループさせてみて、なんとなく動いていそうだなぁというところまでできました。
しかし、これじゃユーザプロセスからはなんの文字出力もできないですし、使い物になりませんよね。
なので今回は簡単なシステムコールを実装して、ユーザアプリケーションからカーネルに対して文字出力を実行させることで、ユーザプロセスが動いている様を確認できるようにしたいと思います。今回実装するシステムコールは下記の4つ。
fork()
exec()
getpid()
print_num():数値表示用
print_str():文字列表示用
print_num()、print_str() は、write() システムコールを実装するまでの暫定的なシステムコールとして実装しています。実際のところは Linux などでは write() システムコールを通して VGA なりデバイスファイルに文字を書き込むことで文字列を表示しているのですが、FerriOS にはまだファイルシステムを全く実装しておりませんので、文字表示専用のシステムコールを用意しています。
また、今回はユーザアプリケーションを ELF アプリケーションとしてビルドし、exec() で ELF からユーザ空間にコードをロードして実行できるようにします。お楽しみに!
ストレージ容量の少ない Android スマホを使っていると頻繁に写真や動画データをバックアップしなければならなくなるのですが、バックアップ中に起こりがちなのがバックアップ中の切断。おま環かもしれないですが、物理的には接続されているのにコピー中にビジー状態となって勝手に切断されたり、何らかの理由でコピーに失敗することが多いです。
自作 OS「FerriOS」の開発日記、第二回です。前回はスケジューラとカーネルスレッドを実装し、カーネルモードでスレッドが動いている様子を確認できました。今回はユーザプロセスを実装し、カーネルスレッドと同じようにスケジューラで順次実行できる状態にしていきたいと思います。
どこまで続くかわからないけど、熱意が冷めないうちに…
Writing an OS in Rust を一通り写経したので、そこから先を実装する個人的なプロジェクトを始めていきたいと思います。
動機は完全なる趣味・興味です。Writing an OS in Rust は Async/Await の章までしか書かれていないので、そこから先、できれば xv6 と同等以上のレベルにまでは仕上げていきたいと思っています。
Writing an OS in Rust
https://os.phil-opp.com
Writing an OS in Rust の写経を始めて1年4ヶ月、ようやく全章読み終えました。
読み終えた、といっても Writing an OS in Rust は途中の章 Async/Await までしか書かれていないので、まだ完成とは言えませんけどもね。
遅ればせながらあけましておめでとうございます。2026年もよろしくお願いいたします。
写真は羽田沖で撮影した今年の初日の出です。今年の元旦は雲が多く、7時すぎにようやく太陽が姿を表してくれました。
メモリークリスマス!
前回に引き続き、今回も Intel MPK/PKU 関連のお話です。
自分はハードウェア支援のメモリ安全性やアクセス制御に興味があり、昨今、Rust 向けにこんなライブラリを試作しています。
yotiosoft/mprotect-rs: An implementation of mprotect() and pkey_mprotect() for Rust. This enables Rust to set access rights to each pages, using PTE flags or Intel MPK (Memory Protection Keys).
まだまだ開発途中で未完成ですが、今回はこのライブラリの簡単な紹介と、今後目指す理想像についてお話したいと思います。
今回はハードウェアレベルでメモリ保護を実現する Intel MPK (Memory Protection Keys) のユーザ空間向けの機能、Intel PKU (Protection Keys for Userspace) で遊んでみたという内容になります。
Intel PKU を使うと、ユーザ空間内に複数個のサンドボックスを作成でき、なおかつハードウェア制御により高速なアクセス制御が可能になります。Intel PKU は登場してから10年たった今でも論文などで様々な利用方法が提案されている非常に奥の深い機能なんですが(あまり実用例は聞かないけど)、今回は導入編として、ゆるく触ってみる程度にしたいと思います。
以前、cron と rtcwake を使って通常の Linux PC で決まった時間に自動起動させる方法についてまとめました。
cronとrtcwakeでLinux PCが決まった時間帯だけ起動するようにする | 為せばnull
自宅の Raspberry Pi 5 サーバでもこれができないかなと思ったんですが、ラズパイは設定先が異なっていたのでメモしておきます。
自宅の Raspberry Pi サーバで samba で NAS を運用しているんですが、iPad からだけなぜか「読み取り専用」となってしまって書き込めない問題が起きていました。Windows からでも macOS からでも普通に書き込めるのに、iPad だけ書き込めません。
というわけで、今回はこれをサクッと解決しましょう。