OS作ってます。3日目
さて、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自作入門
今回の内容は「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自作入門
OS作ってます。2日目
さて、今日もやりましたよ。まだ、3日坊主には早いですしね。
まず、2日の目の内容は「アセンブラ学習とMakefile入門」です。
最初にテキストエディタの紹介があります。terapadが紹介されています。僕以前は使っていたのですが、
この開発ではEclipse+CDT で開発しようと思っています。というのは、今後開発がC言語主体になってくるのを見越してです。(「Eclipseみたいに重たいもの使ってるの?」なんていう人もいますが、僕のPC ではそれほどストレスを感じていません。起動を含めて。←軽く自慢です)
その他も含めて開発環境は次の通りです。
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自作入門
まず、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自作入門
OS作成始めました。
OSは毎日利用しているソフトウェアですが、それがどのように動いているか?
何となく知識としては知っているつもりですが、理解しているとはいいづらい。
そもそもOSとはなにができればOSなのだ?
と改めて考えてみると、うーん?と思ってしまう。
そんな知っていて知らないOS。
ソフトウェア技術者としてこのままでいいのかなぁとぼんやり思っていました。
一方で、最近では自分でカスタマイズできるガジェットがいろいろ出てきています。
あらかじめ用意されたプラットフォームでカスタマイズを楽しむこともできますが、自分でLinux等を利用してOSからカスタマイズして楽しんでいる人たちもいる。
できればそちら側になりたいなぁとあこがれる自分がいる。
そんな僕が以前から気になっていた一冊の本。30日でできる! OS自作入門 。
30日はともかくとして、本当に読んでいけば、OSが作れるのか?買おうか買うまいか迷っていました。
今回、勢いで買ってしまいました。そして、実際に作り始めることにしました。
1日分づつ章分けされた構成で全30章。目次を眺めていると本当に30日でOS(らしきものかもしれないけれど)ができそうです。
で、今日は1日目。
いきなりバイナリエディタで原始OSを作り始めます。とはいっても、とりあえず起動して"Hello World"と表示するだけのものですが。
その次にはアセンブラ言語を使って、バイナリエディタで作ったのと同じものを作りました。
どちらも無事に動かすことができました。アセンブラで作った方は表示される文字列をちょっとカスタマイズして見ました。
おお!これなら何となくできそう。
30日でできる! OS自作入門
THIS IS IT
僕のマイケルジャクソンの原体験はスリラーのPVでした、
子供の頃の僕は、そのダンスパフォーマンスに驚きそちらにばかり目をとられていました。
しかし、マイケルジャクソンが亡くなったとき、様々なメディアで彼のパフォーマンスを見聞きする機会が増えて改めて「歌がうまいなぁ」と感動してよく聞いています。
で、彼の遺作ともいえる、幻のライブツアーのリハーサルをまとめた映画「THIS IS IT」を見てきました。
まさに、KING OF POP。リハーサルの記録映像の編集なのにすごい。
彼の死により本番のステージが永遠に失われてしまったのが、余計に残念です。
MJ自らバックダンサーやバックバンドのメンバーに実演指導したり、丁寧にどのようなステージを作りたいのか説明する姿に感動しました。
彼とともに仕事をしたことがある人々が、彼が怒りをあらわにするのを見たことがないといっていましたが、本当にそんな感じです。
そして、彼のイメージを懸命にくみ取り、ともにステージを作り上げていくスタッフたちの一体感にも感動しました。
こんなビッグスターの舞台裏を見られる機会もそうそうないと思います。スターはリハーサルから違うなぁと思いました。一流の仕事の裏側もまた一流なのですね、そういう意味でも必見です。
子供の頃の僕は、そのダンスパフォーマンスに驚きそちらにばかり目をとられていました。
しかし、マイケルジャクソンが亡くなったとき、様々なメディアで彼のパフォーマンスを見聞きする機会が増えて改めて「歌がうまいなぁ」と感動してよく聞いています。
で、彼の遺作ともいえる、幻のライブツアーのリハーサルをまとめた映画「THIS IS IT」を見てきました。
まさに、KING OF POP。リハーサルの記録映像の編集なのにすごい。
彼の死により本番のステージが永遠に失われてしまったのが、余計に残念です。
MJ自らバックダンサーやバックバンドのメンバーに実演指導したり、丁寧にどのようなステージを作りたいのか説明する姿に感動しました。
彼とともに仕事をしたことがある人々が、彼が怒りをあらわにするのを見たことがないといっていましたが、本当にそんな感じです。
そして、彼のイメージを懸命にくみ取り、ともにステージを作り上げていくスタッフたちの一体感にも感動しました。
こんなビッグスターの舞台裏を見られる機会もそうそうないと思います。スターはリハーサルから違うなぁと思いました。一流の仕事の裏側もまた一流なのですね、そういう意味でも必見です。
Air MAC Express
台湾から戻ってきました。
今回の出張はちょっと長かったので、Air Mac Expressを持って行きました。
台湾でいつも滞在しているホテルはインターネットは使い放題なので、このAir Mac Express で滞在先でも無線LANが使えます。
台湾での滞在先は日本のビジネスホテルよりは広いのですが、やはり備え付けのデスクはちょっと窮屈なのでベッドでメールチェックできるのは想像以上に快適でした。
iPhoneも接続できるし。
このコンパクトさだし、今後は旅行の荷物リストに加えることにします。
アップルコンピュータ AirMac Express ベースステーション with Air Tunes MB321J/A
今回の出張はちょっと長かったので、Air Mac Expressを持って行きました。
台湾でいつも滞在しているホテルはインターネットは使い放題なので、このAir Mac Express で滞在先でも無線LANが使えます。
台湾での滞在先は日本のビジネスホテルよりは広いのですが、やはり備え付けのデスクはちょっと窮屈なのでベッドでメールチェックできるのは想像以上に快適でした。
iPhoneも接続できるし。
このコンパクトさだし、今後は旅行の荷物リストに加えることにします。
アップルコンピュータ AirMac Express ベースステーション with Air Tunes MB321J/A
小籠包うまっ!
引き続き台湾です。
昨日は遅くまで打ち合わせをしていたので、こちらの取引先の人と夕食を食べに行ったのですが、今日はさすがに日曜日なので夕方早めに打ち合わせは終了し解散となりました。
で、夜になり、おなかもすいてきて思ったのが、「そういえば台湾で一人で飯食いに行ったことないなぁ」ということ。
いつも取引先の人に店もメニューもお任せだったのです。
うーん、台湾のマクドナルドでも試してみるかなぁとも思ったのですが、やはりせっかくなのでおいしい中華が食べたい。ホテルから歩いていける範囲のよさげな店を探して、地球の歩き方片手にいってみました。
そのお店は京鼎小館。
エビチャー ハンと酸辣湯、小籠包とエビ餃子を注文しました。
小籠包とエビ餃子は10個セットだったのですが、5個づつに減らしてもらいました。
最初にエビチャーハンと酸辣湯が出てきたのですが、日本の1人前の倍くらいある量で、この時点でちょっと注文しすぎたことに気づきましが、結構おなかがすいていたのでがんばれば何とか平らげられるとこのときまでは思っていました。
ところが、小籠包とエビ餃子が出てきて、「これは無理だわ。」とその自信も失せてしまいました。
結局、どれもとてもおいしくて、食が進み、チャーハンと蒸し物2品は完食できましたが、酸辣湯は半分以上残してしまいました。
個人的には酸辣湯が一番おいしかったので残念でしたが、どうにも入りませんでした。
やっぱり中華を楽しむには一人では無理ですね。
台湾に来ています。
またまた、台湾に来ています。
まだ暑いかなと思っていましたが、東京より少し暖かい程度の20度前後。
天気はうーん、台湾とは相性が悪いのでしょうか?またもやどんより。曇り空。時折 雨。
まあ、観光ではなく、お仕事で一日中、会議室にいるのであんまり関係ないですが。
おひるに火鍋をたっぷり食べたので今夜の夕食はあっさりと陳家涼麺の味噌涼麺と味噌青丸湯。
写真を撮り忘れてしまったのですが、味噌涼麺とは冷たいじゃじゃ麺のようなもので、冷めた麺に味噌っぽいものがかかっていてかき混ぜて食べます。
味噌青丸湯は白味噌かな?ちょっと甘めの味噌汁に何かの肉団子的なものが入ったものです。
どちらもさっぱりしておいしかったです。
地元の人はのんだ後の〆に食べにくるようですが、ぴったりだと思います。
でホテルに帰ってみると、やっぱりちょっと物足りない。
そこでホテルのカフェラウンジをのぞいてみるとおいしそうなケーキがあったので、デザートに購入。こちらもおいしかったです。
まだ暑いかなと思っていましたが、東京より少し暖かい程度の20度前後。
天気はうーん、台湾とは相性が悪いのでしょうか?またもやどんより。曇り空。時折 雨。
まあ、観光ではなく、お仕事で一日中、会議室にいるのであんまり関係ないですが。
おひるに火鍋をたっぷり食べたので今夜の夕食はあっさりと陳家涼麺の味噌涼麺と味噌青丸湯。
写真を撮り忘れてしまったのですが、味噌涼麺とは冷たいじゃじゃ麺のようなもので、冷めた麺に味噌っぽいものがかかっていてかき混ぜて食べます。
味噌青丸湯は白味噌かな?ちょっと甘めの味噌汁に何かの肉団子的なものが入ったものです。
どちらもさっぱりしておいしかったです。
地元の人はのんだ後の〆に食べにくるようですが、ぴったりだと思います。
でホテルに帰ってみると、やっぱりちょっと物足りない。
そこでホテルのカフェラウンジをのぞいてみるとおいしそうなケーキがあったので、デザートに購入。こちらもおいしかったです。
エネループ スティックブースター
~eneloop universe products新商品~ モバイル機器を充電できる、スリム&軽量なハンディ電源 「エネループ スティックブースター」を新発売 |ニュースリリース|三洋電機エネループの電源デバイスです。iPhoneは既存のモバイルブースター ではうまく充電できなかったりするそうですが、これは大電流を必要とするデバイスにも対応しているようです。
いろんな場所に自由に持ち運んでモバイル機器を手軽に充電できる、スティックタイプのハンディ電源「eneloop stick booster(エネループ スティックブースター)」を12月1日より発売します。
三洋電機は、“くり返し使うライフスタイル”の提案により、暮らしを変える商品がより便利で身近なものになるよう、今後も「eneloop universe products」の世界を拡大してまいります。
放電専用なので充電できれば絶対買いなのですが。。。
でも携帯電話やDS、iPhoneなど持ち歩く充電デバイスが増えてきたのですっきり持ち歩けそうなこれは買ってしまうかも。
これらかの季節はエネループの充電もできるエネループカイロと持ち歩くといいかも。
SANYO 両面暖かい 充電式カイロ 「eneloop kairo」 (ブラック) KIR-SL1S(K)
MicrosoftがEclipseのプラグインを?!
InfoQ: MicrosoftがEclipse開発者のためのツール群を作成おおっ?!マイクロソフトがeclipseのプラグインなんか作っているのか。と思ったら、オープンソースを支援している
MicrosoftはWindows Azure Tools for Eclipse、Windows Azure SDK for Java、Eclipse Tools for Silverlightといったいくつかのツールと、EclipseをWindows 7風のルック&フィールに変更したことをアナウンスした。
というこのようです。
ITの世界がクラウドや軽量なリッチクライアント技術に向いてきていますが、自社の技術を普及させるためには
開発者のすそ野を広げることが重要ですよね。
Azule PuluginはすでにあるGoogle Apps Engineのpluginを意識しているのでしょうか。Azureは同社の重要な戦略製品だと思うのですが、VisualStudioをないがしろにしてでも、開発者を増やしたいということでしょうね。
また、Silverlightもクラウドのクライアントサイドの技術としてとして重要と位置づけているのだと思います。
それにしてもフリーで配るとは。