投稿

12月, 2014の投稿を表示しています

自作OSでのプロセス実装について (2) ~初めてのユーザプロセス~

イメージ
この投稿は Aizu Advent Calendar 2014 の 7 日目の記事です。 前の人 @masaponto 次の人 @MiZuKi_Sonoko また、 自作OS Advent Calendar 2014 の 7日目の記事でもあります。 自作OSでのプロセス実装について (1) ~初めてのユーザプロセス~ の続きです。 前回の内容 プロセスとは? x86リングプロテクション(ユーザモードとカーネルモード) マルチタスク 割り込み コンテキストスイッチ を一気に説明しました。 正直、多少知識が無いとわからないよなあって感じになっているのでその点は反省しております。 今回は コンテキストスイッチの実装 ユーザプロセス起動 を見て行きたいと思います。 前回はタイマ割り込みによってコンテキストスイッチが起きる、というところで終わったと思います。 そこの流れが大事ですので再掲します。 タイマ割り込み発生 ↓ 実行中プロセスは割り込まれる (中断される) ↓ カーネルモード突入 ↓ 今のカーネルモードスタックへ 今の実行コンテキストを保存 (CPUのレジスタとか) ↓ 次のプロセスを選ぶ ↓ 次のカーネルモードスタックから 次の実行コンテキスト復元 ↓ ユーザモードに復帰 はい、こんな感じです。 (※カーネルスタックではわかりづらいので カーネルモードスタック に変更します。) では、早速ですがもぷりんOSのコンテキストスイッチ実装を見て行きましょう。 この部分は主にLinuxの実装を真似ています。 と言っても、x86上で同じことをやろうとしたら大体こうなると思います。。。 リポジトリはこちら mopp/Axel 上記の流れに沿ってコードを掲載していきます。 まずは、一番はじめに呼ばれる割り込みコードを見てみましょう。 以下のこれは、割り込みエントリ関数で、タイマー割り込み以外のキーボード割り込みや一般保護例外などでも呼ばれる部分です。 上記コードは src/interrupt_asm.asm にあります。 ただし、Gistに貼った方は見やすさのためにマクロなど全て展開済みです。

自作OSでのプロセス実装について (1) ~初めてのユーザプロセス~

イメージ
この投稿は Aizu Advent Calendar 2014 の 5 日目の記事です。 前の人 @i__yahoo 次の人 @masaponto また、 自作OS Advent Calendar 2014  の 5日目の記事でもあります。 Aizuの方に登録してたのですが、ネタ的に自作OSだし、自作OSカレンダーの方は空きが激しいので、まとめて登録してしまいました。 今回は自作OS Advent Calendar的に 先日の記事 の続きみたいなものです。 また、 ALT で話した内容をもっとわかりやすく書いたものです。( 次回のALT もあるらしいので興味のある人はぜひに) この記事では、もぷりんOSの 現在の実装 における観点から話を進めていきますので、LinuxなどのOSとは異なることもあると思いますので注意してください。 特にもぷりんOSは権限周りなどがまだまだですし、私もよくわかって無いことが多いです。それだと危なくない?みたいなことがめっちゃ有ります(つまり、吹けば飛ぶ) それに、趣味で楽しいからやっていることです。(だからといってセキュリティを軽視しているわけではないです。安心安全もぷりんOSを目指しますよ) なので、あんまり細かいことは言わず、こんな風に書いてれば動くんだふーん程度の気持ちでお願いしたいです。 そして、何より自作OSを作ってる人、少し興味を持ってる人が見て、こんなの俺でもできるじゃねーかと感じて、自作OS作成してくれればなあと思いつつ書いていきます。 さてさて、本題に入るその前に、通常話しているプロセスについていくつか事前知識として、さらっと話そうと思います。 詳しいことは プロセス-Wikipedia にどうぞ 大雑把に言うと、 プロセスは実行されているあるプログラムのこと です。 もぷりんOSは一応?UNIX系のOSなので、ここでいうプロセスはUNIX系のプロセスを指しています。UNIX系プロセスは親子関係を持ちます。この親子関係というのはデータ構造で言うところの木構造で、大体こんな感じです。 数字はプロセスID(pid)を表します。 プロセス0がルートプロセス、その子プロセスがプロセス1 この時、プロセス1から見れば親はプロセス0になります。 当たり前ですが、プロセ

[自作OS Advent Calendar 2014] 自作OSの紹介的なの

イメージ
この記事は 「自作OS Advent Calendar 2014」 3日目の記事として書かれました。 まずはじめに、上記リンクを見ていただければ直ぐにわかりますが、自分が主催にもかかわらず1,2日が空きで書いてないです。これについて申し訳ありません。(言い訳ですが多忙につき書いていられませんでした)。 さて、とりあえず、何でもいいから書かないと始まらないということで、3日目として、現在開発中の自作OSの紹介的な話をしたいと思います。 開発リポジトリはこれ https://github.com/mopp/Axel 名前は" Axel "と書いて、" あくせる "と呼んでいます。 通称"もぷりんOS"です。(余談だけど、Mopris(もぷりす)って案もあった) イメージカラーはメタリックレッドです。この時点で、名前の由来がわかる人にはわかるかもしれませんね。 きっかけとしては、元々Linuxとかの中身が気になっていたということと、自作OS入門を読んで作って見たいなーと思っていたからです。 あと、セキュキャンに応募して2回落とされているので、それも開発モチベーションとして一つあります。来年も応募します(来年で最後なので行きたいんですよかなり) 具体的な話に移ります。 この記事を書いている時点のOSスペックは以下です。 モノリシックカーネル ソースコード長さ 8000 行 ソースコード容量 250 KB 実行ファイル容量 105 KB 対応アーキテクチャ x86_32 最低動作メモリ 12MB 使用言語 C, nasm 参考OS Linux, FreeBSD, Unix v6, xv6, HariboteOS 実装されている機能は以下です。 物理メモリ管理 (BuddySystem) x86ページング 仮想メモリ管理 (Two Level Segregated Fit Allocator) 割り込み PS/2マウス、キーボード VBEグラフィック ATAデバイスアクセス FAT32/16 ファイルシステム ACPI(シャットダウンのみ) システムコール ELF形式ロード (静的のみ) プロセス管理 (fork, e