2009年12月30日

OS作ってます。7日目

テーマ:OS作ってます
なんとか年内に最初の1週間を終えることができました。

さて、7日目のテーマは「FIFOとマウス制御」。前半は6日目からの続きでキーボードからの入力の処理。
まずは割り込み処理の改善です。その過程で汎用的なFIFOバッファの作ります。
シンプルだけど、実用的な実装だと思います。
ただ、複数のプロセスからアクセスされる場合にはもうひと工夫いるのではと思いますが。
まあ、この場合はキーボードは一つだから問題ないか。

後半はそのFIFOバッファを利用しながらマウスの入力割り込みの処理を作ります。
まずはマウスからの割り込み処理を初期化するところから始めて、ぐりぐりマウスカーソルが動くところを想像していたのですが、今日はマウスからの入力値をとるところで続きはお預けです。

でも、6,7日目はあんまり日を空けずにやった方がよかったですね。
ポインタと構造体の復習はもう少しやって2週目に入りたいと思います。
30日でできる! OS自作入門: 川合 秀実 30日でできる! OS自作入門
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
最近の画像つき記事
 もっと見る >>
2009年12月21日

OS作ってます。6日目

テーマ:OS作ってます
ちょっと日数があいてしまったのですが、OS作成も6日目です。

5日目から続いている割り込み処理の追加の続きなのですが、レジスタや、ハードウェアよりの説明が多いと僕には難しいですね。
文章をよんで一応わかった気にはなるのですが、消化不良感が残っています。かなり。

また、どうも構造体がどのようにアドレス空間に配置されているのかわかっていないように思います。
5日目からよくわからなかったのですが、ポインタで構造体の変数を宣言するとどうしてその構造体に値がセットされているのか?
ポインタで指定した番地にある値が読み書きできるということはそこにもともと何か書かれていたら構造体の各フィールドとして読み書きできるということだと思うのですが、ということはどのフィールドにどの番地の値が入るかは構造体にフィールドを定義する順番に依存するということなんだなと理解したのですが、そのあたりがはっきり書かれていなくて自信がないのです。
別に勉強しなきゃだめですね。

30日でできる! OS自作入門: 川合 秀実 30日でできる! OS自作入門6日目が終了すると、キーボードからの割り込みができるようになります。が、マウスからの割り込みもできるようになると思っていたのですが、実際動かしてみるとできなくて、あれ?と思ったのですが、最後の最後に次回回しにされてしまっていました。

最初の1週間分は何とか年ないに終わらせたいなぁ。
年ないにマウスカーソルが動かせるようになるのでしょうか。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2009年12月09日

OS作ってます。5日目

テーマ:OS作ってます
うーん、5日目なのですが、Chapter0でも述べられているのですが、5日はほんとにやらされている感が大きかったように思います。

5日目のテーマは「構造体と文字表示とGDT/IDT初期化」。
重要なのですが、全体的に、今後の下準備感が強いです。

まず、構造体を導入して、コードをすっきりさせることから始まります。
そして、フォントを導入し、文字を表示しやすくします。残念ながらこの時点ではまだ、アルファベットと数字だけです。
これにより、変数の中身を表示できるようになるので、デバックにも役立つでしょう。

で、最後にセグメンテーションの初期化と割り込み処理の初期化であるGTD/IDTの初期化ですが、正直、消化できていません。
もう少し進んでから振り返ることにしました。IDTの説明に関してはまたしても先送りされていますし。

ていうことで、消化不良なのでこの辺で次の章に進むことにします。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2009年12月06日

OS作ってます。4日目

テーマ:OS作ってます

「ステュディオス」な生活-4日目の成果
ちょっと時間があきましたが、三日坊主にはなるつもりはありません。

ということで、4日目の内容は「C言語と画面表示の練習」ということで、実装言語の中心がC言語に移ってきます。

一応、初心者にもわかるように書かれている本なのでC言語も新しい構文が出てくれば説明があるのですが、いきなりポインタが出てきます。

C言語初級者の最大の壁であるポインタがfor文の次あたりに説明されます。

僕もポインタには苦手意識を感じていて、これまでは敬遠してきました。
まだ、完全に体得したという実感はないのですが、他の本とは大きく異なる本書の説明で、なるほど!、そう考えればいいのか!と思いました。

ポインタの説明でも「結局作りたいのは機械語の実行ファイルなのだ」という本書のスタンスがはっきりしていて、Cのコードをアセンブラで書くとこうなるのだよという説明されています。そういう説明をされると、ポインタとはアドレス指定でメモリに値を書き込む方法なのだなぁと理解できました。そういう視点に立てたことはこれまでの4日間の成果かと思います。

しかし、ポインタ以外の部分はやや説明が少なく感じました。割り込みやレジスタとやりとりするためのスタックの説明も、C言語のコードに対応して追加されたアセンブラのコードの説明もあっさり目ですっ飛ばしてどんどん進みます。
あらかじめ用意された添付CD-ROMのソースファイルを次々と実行してみてねって感じです。

このあたりは逐一、詳細に説明していくより、もう少し進んで後で振り返った方が理解しやすいし、理解できるようになるのだろうと思って、進むことにしました。

で、4日目の成果が、写真の画面です。
これまでの真っ黒画面にテキストで文字が出てくるだけの殺風景なものではなく、やっと何か作っているんだと思える結果が得られるようになってきました。


30日でできる! OS自作入門: 川合 秀実 30日でできる! OS自作入門
いいね!した人  |  コメント(0)  |  リブログ(0)
2009年11月30日

OS作ってます。3日目

テーマ:OS作ってます
さて、OSの開発も3日目です。
今回の内容は「32ビットモード突入とC言語導入」です。主にディスクイメージの読み出し方法を書く方法が説明されています。

これまで長年、コンピュータを使ってきて、ディスク装置にはシリンダやセクタというものがあるということは知っていたのですが、それをどのように読めとCPUに指示するのかはわかっていませんでした。
この章を読めば、フロッピーディスクを読み出す方法がわかります。

2日目でどんなときにどのレジスタに値を書き込むのか把握できていないと書いたのですが、たとえば、INT命令を呼ぶ前にINTの仕様で決められているレジスタに値を書き込まないといけないというのはわかるのです。
ですが、リトライ数のような値はなぜSIに書くのかというのかがよくわからないのです。

本書のコードにはそのことは説明なくさらっと登場しています。読み進めていけばわかる日が来ると信じて、今はそういうものなのだと割り切って進むことにします。

とにかく、この章では条件ジャンプ命令が何種類か登場し、高級言語にもあるような制御構文がだいたいアセンブラでどうやるのかがわかってきました。

前半はこんなところで、何となくブートセクタができあがり、ディスクイメージから決められたバイト数を読み込んで処理できるようになります。

後半はブートセクタとそこから起動したいプログラムの分離から、C言語で記述したプログラムを実行するところまでです。
また、その中でCPUの動作モードを32ビットモードに切り替えることもします。うーん、これまでは16ビットモードだったのか!ということもここでわかるわけです。

しかし、この章では肝心のモード切替とC言語で実装した部分を呼び出すアセンブラについての説明は先送りされています。後に説明があるようなので、気にせず進みます。

で、Cのプログラムのコンパイルは中間ファイルにまずコンパイルされた後、naskで読めるコードに変換され、naskによってオブジェクトファイルに変換された後リンクのためのデータをくっつけて、最後に他のオブジェクトファイルとくっつけてイメージファイルを作るのだということが説明されて、やっとC言語のプログラムが登場します。

本章で作るCのコードは関数が1つでコメントを抜くと10行にも満たないものです。
ですが、アセンブラで作った関数を呼び出す方法が説明されており、きっと今後の開発に重要な部分なのだと思います。

ということで、4日目からはC言語での実装が増えてくるのかなぁ。

最後に、ちょっとしたトラブルに見舞われた話をしておきます。
Makefileを書き換えないと僕の環境ではうまく動かないことを2日目に書きましたが、この章では書き換えてもはじめ動きませんでした。最後の最後でOSのイメージファイルがないといってエラーになりました。
特にmake中でファイルの生成には失敗していないようなのでおかしいなぁと思って悩みましたが、原因は意外なところにありました。

この章では生成するイメージファイルのファイル名が変更されるのですが、なぜか変更後のファイル名であるharibote.imgではNOD32がウイルスと間違い、生成と同時に隔離してしまっていたのです。
ちょっと驚いたのですが、幸い、NOD32はワイルドカードを使って検出無視ファイルを設定できるので、設定後は問題なく実行することができるようになりました。


30日でできる! OS自作入門: 川合 秀実 30日でできる! OS自作入門
いいね!した人  |  コメント(0)  |  リブログ(0)
2009年11月29日

OS作ってます。2日目

テーマ:OS作ってます
さて、今日もやりましたよ。まだ、3日坊主には早いですしね。

まず、2日の目の内容は「アセンブラ学習とMakefile入門」です。

最初にテキストエディタの紹介があります。terapadが紹介されています。僕以前は使っていたのですが、
この開発ではEclipse+CDT で開発しようと思っています。というのは、今後開発がC言語主体になってくるのを見越してです。(「Eclipseみたいに重たいもの使ってるの?」なんていう人もいますが、僕のPC ではそれほどストレスを感じていません。起動を含めて。←軽く自慢です)

その他も含めて開発環境は次の通りです。
  • Let's Note N8
  • Windows7 Pro 64bit
  • Eclipse 3.5.1 + CDT その他プラグインいろいろ
  • 本に付属のtolset
  • バイナリエディタ BZ
  • Msys (これがいろいろ悪さをしているのかも?後述)
では内容です。

1日目でも一応、アセンブラを書くのですが、バイナリファイルに直接値を書いていくような命令しか使わなかったのです。 2日目からは命令がいくつも出てきて、言語っぽくなってきます。

MOVやJMP、CMPなどのコマンドと、
16ビットの8種類のレジスタと8ビットの8種類のレジスタ、6種類のセグメントレジスタが出てきます。
本の通りにコードを書き換えていけばとりあえず動いているだろうものはできていきますが、
どういうときにそのレジスタに値を書き込むのかということがいまいち把握できていません。

でもアセンブラというのは結局、CPUに直接読ませる値をレジスタに値を書き込む手順を記述するもので、その方法のいくつかはわかったので、とりあえずこの理解度のまま進むことにしました。この段階ではまだ、OSは起動するだけで何もできないのでつまらないのです。

後半はMakefileの簡単な説明です。

1日目にバッチファイルでやっていたことをmakeコマンドでできるようになります。
これまで数々のオープンソースのコンパイル時にお世話になったmakeですが、Makefileの書き方がわかると思って期待しましたが、こうすれば動くのですよ的な説明のみで、この章を読んだからといってmakeを使いこなせるようになるということはなさそうです。この先、どこかでもっと突っ込んだ説明があるのでしょうか。

ここで一つ問題がありました。本に添付されているMakefileは僕の環境ではうまく動かないのです。
どうも筆者はWindowsXPまでを前提としているようですが、VistaやWindows7ではcopyコマンドやdelコマンドの仕様が変わってしまったのでしょうか。それとも添付のmakeコマンドが環境により動作を変えてしまったのでしょうか。とにかく、Makefile内で記述して実行しているcopyコマンドやdelコマンドがうまく動作しないのです。
makeコマンドを介して実行されるcopyコマンドやdelコマンドの実行時ディレクトリがmakeコマンドが置かれているディレクトリになってしまうようで、Makefileに記述されているファイルパスと一致せず、コピーに失敗するのです。
いろいろパスをいじってみてもうまく動かないので、copyコマンドをcpコマンドに、delコマンドをrmコマンドに変更し、パスの区切り文字を \ から / に変更することで動くようになりました。
cpやrmが使えたのは以前、C言語を勉強しようと思ってインストールしていたmsysのおかげのようですが、ひょっとするとこいつが悪さをしていたのかもしれません。

まあ、Makefileは若干変更しないといけないのですが、いくつもバッチファイルがあるよりずいぶん便利になりました。


30日でできる! OS自作入門: 川合 秀実 30日でできる! OS自作入門
いいね!した人  |  コメント(0)  |  リブログ(0)
2009年11月28日

OS作成始めました。

テーマ:OS作ってます

「ステュディオス」な生活-MyOS
OSは毎日利用しているソフトウェアですが、それがどのように動いているか?
何となく知識としては知っているつもりですが、理解しているとはいいづらい。

そもそもOSとはなにができればOSなのだ?

と改めて考えてみると、うーん?と思ってしまう。
そんな知っていて知らないOS。
ソフトウェア技術者としてこのままでいいのかなぁとぼんやり思っていました。

一方で、最近では自分でカスタマイズできるガジェットがいろいろ出てきています。
あらかじめ用意されたプラットフォームでカスタマイズを楽しむこともできますが、自分でLinux等を利用してOSからカスタマイズして楽しんでいる人たちもいる。
できればそちら側になりたいなぁとあこがれる自分がいる。

そんな僕が以前から気になっていた一冊の本。30日でできる! OS自作入門
30日はともかくとして、本当に読んでいけば、OSが作れるのか?買おうか買うまいか迷っていました。
今回、勢いで買ってしまいました。そして、実際に作り始めることにしました。

1日分づつ章分けされた構成で全30章。目次を眺めていると本当に30日でOS(らしきものかもしれないけれど)ができそうです。

で、今日は1日目。
いきなりバイナリエディタで原始OSを作り始めます。とはいっても、とりあえず起動して"Hello World"と表示するだけのものですが。
その次にはアセンブラ言語を使って、バイナリエディタで作ったのと同じものを作りました。
どちらも無事に動かすことができました。アセンブラで作った方は表示される文字列をちょっとカスタマイズして見ました。

おお!これなら何となくできそう。

30日でできる! OS自作入門: 川合 秀実: 本 30日でできる! OS自作入門

いいね!した人  |  コメント(0)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。