Hatena::ブログ(Diary)

へにゃぺんて@日々勉強のまとめ

2015-08-24

タスク管理を追加しました

f:id:cupnes:20150824215812g:image

x86(32ビット)用OSを作っています - へにゃぺんて@日々勉強のまとめ

こちらの記事から引き続き、OS作りを少しずつ進めていました。

一応、「タスク管理」と呼べるものが実装できたので、記事にしておきます。


ソースコード

前回の記事と同じくGitHub上で開発を進めています。

使い方もなどもこちらを参照してください。


今回の記事の時点のタグを追加しました。

この記事時点のものは、"blog-20150824"のタグをチェックアウトするか、

以下のURLからダウンロードしてください。



タスク管理について

今のところ、マルチタスクで動作するタスクは以下の2つ固定です。

  • シェル
  • 起動時間(右上の"uptime")
    • 16進表示の起動秒数カウンタ

タスク管理にはx86タスク管理機能を使っています。

なので、TSS(Task Structure Segment)というタスクコンテキスト(主にレジスタ情報)を管理する構造を

タスクの数だけメモリ上に確保、初期化し、コンテキストスイッチTSSへのjmp命令で行っています。


jmp命令にTSSのアドレスを指定するとx86 CPUは、

  1. これまで動作していたタスクTSSレジスタ情報を退避
  2. jmp命令で指定したTSSレジスタ情報を復帰し、タスクの実行再開

というコンテキストスイッチ処理を行ってくれます。


そして、このコンテキストスイッチを10ms周期のタイマー割り込みで行うことで、

マルチタスクを実現しています。



その他の追加・修正

主に以下のとおりです。

  • キー入力に追随した自動スクロール追加
  • BSキー対応
  • コマンド追加
    • メモリ読み出し: readb, readw, readl
    • メモリ書き込み: writeb, writew, writel
    • I/Oポート読み出し: ioreadb
    • I/Oポート書き込み: iowriteb

Hand Craft MasterHand Craft Master 2015/08/29 21:54 着々と、進捗しているようですね。
頑張ってください!

cupnescupnes 2015/08/30 20:53 ありがとうございます!

「メモリ管理」も一応、出来、
これでやっと半分くらいは「カーネル」と呼んでも良いようなものが
できたかと思います。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証