積まれてたタネンバウム先生のModern Operating Systems(しかも初版)を最近になって読みました。
後半の分散OSのところはどこまで生き残ってる話かわからなかったので、RPCやNFS以外は流し読みでしたけど。
で、いっそのことOS関連をざっと勉強し直そうかな・・・と思って資料をあさっていたところで見つけたのがLions' CommentaryのPDF版。おぉ、まずはこれを読もう!ということで、ちびちびと読み始めてます。Kernel部分は1万行程度だったりするので、仕事でレビューさせられてる大量のコードに比べるとかわいいもんです。がぜんやる気が出てきました。
現在のところ、initを起動するところまでの流れを見渡して、プロセス管理を深く見直すあたりまでいってますが、とりあえず感想とか少しずつ書いてみようかと。
まず最初に面食らうのはCの文法。K&R前の代物で、型チェックがまったくないとか、構造体が無名でグローバルに参照可能とか。構造体の要素にp_とかプレフィックス付けてるのは、名前空間が存在しないがゆえか。。。型に関係なくいきなりfoo->intvalみたいな形でポインタの読み替えをしてくるので油断できません。
最初に見るのがメモリ管理。といってもページ管理みたいな大層なものではなく、ほんとにナイーブなmalloc/freeの実装。というか、アドレス順に並んでるのにリストですらない!!途中の要素を取り出すと、後ろの要素を全部1つずつ前に詰めるという・・・。ちょっと驚きました。
初期化部分はPDP-11のアセンブラで、ここも変な文法に悩まされるわけですが、2238 Clubに助けられました(笑。
ようやくCの世界に入るmain呼び出しの直前にMMUの設定がありますが、ここでまだジェネレーションギャップというか。MMUとは言っても最大8KBページが8エントリまでしかないんですね。つまり論理アドレス空間は64KB。おぉぉぉ・・・そっか純粋な16bit CPUじゃそうだよな。。。Z80以降の感覚だと8bit CPUでもメモリ空間だけは16bitだったり、16bit CPU(例えばMC68000)でもメモリ空間だけは24bitだったりしてたので、これはちょっと焦りました。そっか・・・初期のUNIXは64KBで動けたんだ・・・。
で、この8エントリのうち6エントリまでがKernelが使ってまして7エントリ目にユーザプロセス空間、8ページ目にI/O空間がマップされます。確かにこういうところからスタートしてると、スワップとかページ単位じゃなくてプロセス単位にもなりますね。。。という事で、歴史を堪能しております。
2009年10月25日日曜日
2009年9月26日土曜日
Spacewar!
しばらく前に作ったDEC PDP-1のエミュレータをベースにActionScript(Flash)版のエミュレータを作ってみました。せっかくのFlash版なので表示はそれっぽく・・・と思ったのですがセンスが足りないためイマイチな表示になってしまいました。
太古のマシンなわけですが、表示が1024x1024の解像度があり、残像やらボカシやら縮小やらで、表示系がずっしり重たい処理になってしまいました。エミュレーション自体はたいした事ないんですけどね。。。後でソースを1つにまとめてWonderflにも投稿したいと思います。
ちなみに動いているのはSpacewar! 知っている人は知っていると思いますが、世界で最初のテレビゲームと言われている物です。パンチカードの情報をデジタル化したファイルがありまして、そいつを読み込んで実行しています。
個人的な目的としては、プリプロセッサを使ってC++向けのコードとActionScript向けのコードを共通化する実験とか、版管理ツールとしてMercurialを使ってみる実験とか。
追記:さっそくWonderfl向けにカスタマイズして投稿してみました。
太古のマシンなわけですが、表示が1024x1024の解像度があり、残像やらボカシやら縮小やらで、表示系がずっしり重たい処理になってしまいました。エミュレーション自体はたいした事ないんですけどね。。。後でソースを1つにまとめてWonderflにも投稿したいと思います。
ちなみに動いているのはSpacewar! 知っている人は知っていると思いますが、世界で最初のテレビゲームと言われている物です。パンチカードの情報をデジタル化したファイルがありまして、そいつを読み込んで実行しています。
個人的な目的としては、プリプロセッサを使ってC++向けのコードとActionScript向けのコードを共通化する実験とか、版管理ツールとしてMercurialを使ってみる実験とか。
追記:さっそくWonderfl向けにカスタマイズして投稿してみました。
ラベル:
ActionScript,
CPU,
計算機
2009年8月12日水曜日
wonderfl続き
Frocessing版があまりにも重たかったのでBitmapData使って直接描画するバージョンも作ってみました。私の使い方が悪いだけなんですが。。。画面の再描画が常に走ってたのがいけないのですが、その辺の制御の仕方がわかりませんでした。どうせflashで描くならドット単位の描画ではなく、ベクターで描くタイプのプログラムを組んでみたいですね。
追記:再描画はnoLoop();で抑制できるようでした。また、pointを使っていたのがまずかったようです。F5MovieClip2Dではなく、F5MovieClip2DBmpを継承すればpixelが使えて高速化できるそうです。前者では画素ごとにシェイプが作られる・・・だそうで。。。すみません。
追記:再描画はnoLoop();で抑制できるようでした。また、pointを使っていたのがまずかったようです。F5MovieClip2Dではなく、F5MovieClip2DBmpを継承すればpixelが使えて高速化できるそうです。前者では画素ごとにシェイプが作られる・・・だそうで。。。すみません。
2009年8月10日月曜日
ProcessingとかActionScriptとか
今更だけどProcessing(*1)を試してみました。
事始めに参考書としてJohn Maeda氏のDesign By Numbers(*2)とかBen Fry氏のVisualizing Data(*3)も読んでみました。前者はプログラムを全く知らないデザイナ向けのCG入門書でしょうか。後者はエクセルを使ったグラフ作成より一歩進んだ事をプログラムを使って表現したい人向け。ただ、スクリーンスクレイピングの説明をはじめとして、本筋ではない雑多な話題についてのページが多く、読んでみると中途半端な感じがしました。やはりプログラマ向けの書籍ではないために感じる違和感かもしれません。
実際ちょろっと使ってみると確かに便利は便利。ただ最初の敷居が低いだけで、アルゴリズム組み始めるとその先は他のライブラリ使って組み上げるのとあまり手間は変わらないかなぁ・・・。
で、こちらも今更なんだけど、ActionScriptを使える開発がオンラインで行えるサイトWonderfl(*4)も試してみました。せっかくなので、Processing互換のライブラリFrocessing(*5)を使って遊んでみましたが・・・この手のサービスとの相性は良いですね。
最近ウェブを漁っていてマンデルブロと類似の図形でバーニングシップというのがあるのを知って、面白そうだったので練習題材にしてみました。やっぱりちょっと重いかなぁ・・・。マルチコアのマシンでないとブラウザが操作効かなくなるかも。。。
*1:Processing 1.0
*2:Design By Numbers
*3:ビジュアライジング・データ —Processingによる情報視覚化手法
*4:wonderfl
*5:Frocessing
事始めに参考書としてJohn Maeda氏のDesign By Numbers(*2)とかBen Fry氏のVisualizing Data(*3)も読んでみました。前者はプログラムを全く知らないデザイナ向けのCG入門書でしょうか。後者はエクセルを使ったグラフ作成より一歩進んだ事をプログラムを使って表現したい人向け。ただ、スクリーンスクレイピングの説明をはじめとして、本筋ではない雑多な話題についてのページが多く、読んでみると中途半端な感じがしました。やはりプログラマ向けの書籍ではないために感じる違和感かもしれません。
実際ちょろっと使ってみると確かに便利は便利。ただ最初の敷居が低いだけで、アルゴリズム組み始めるとその先は他のライブラリ使って組み上げるのとあまり手間は変わらないかなぁ・・・。
で、こちらも今更なんだけど、ActionScriptを使える開発がオンラインで行えるサイトWonderfl(*4)も試してみました。せっかくなので、Processing互換のライブラリFrocessing(*5)を使って遊んでみましたが・・・この手のサービスとの相性は良いですね。
最近ウェブを漁っていてマンデルブロと類似の図形でバーニングシップというのがあるのを知って、面白そうだったので練習題材にしてみました。やっぱりちょっと重いかなぁ・・・。マルチコアのマシンでないとブラウザが操作効かなくなるかも。。。
*1:Processing 1.0
*2:Design By Numbers
*3:ビジュアライジング・データ —Processingによる情報視覚化手法
*4:wonderfl
*5:Frocessing
2009年6月25日木曜日
AVRでも使ってみようかと
今までマイコンはPICを使い続けてたんですが、ATTiny2313が機能は少ないまでも100円というお手軽価格だったりするので、ちょっと使ってみる事にしました。
AVR Writerはどうしようかなぁ・・・と思って探してみるとhidaspx(*1)がUSBから使えて便利そう。っていうかAVRはソフトウェアUSBの実装がフリーで公開されているというのが驚き。上記の100円AVRをUSBコントローラとして使えてしまいます。AVR Writer自身にAVRを使うので、鶏と卵問題があったりしますが、確かAKI-PICでもAVRに書けたよなぁ・・・という気軽な気持ちで配布プリント基板をぽちっと購入。基板を待つ間にファームをAVRに書き込んでおくか・・・と思ったら・・・AKI-PICはATTiny2313に対応していなかった。。。ショック。
という事で、まずはAVRSP-COM(*2)互換のWriterを作ることにしました。最初はRS-232Cの信号から5Vを作るつもりだったんだけど、AVRSP-COMのプロトコル的に常時アサートされてる信号がなかったので、諦めてUSBから電源をとることにしました。最近は自作回路の電源をとる時はもっぱらUSBを使ってます。USBなら電力制限で保護がかかってるので、うっかりショートさせてもブレーカー落ちないし(笑。
で、次に作ったのが購入した基板で作ったhidaspx。わりと融通のきく回路になってて、基板と一緒に買えなかったものは手持ちの部品で事足りました。これだけでUSBデバイスとして動くのだから凄いですね。
その後、avraを使ったアセンブラでの開発をちょろっと体験し、すぐに面倒になってavr-gcc環境を構築しました(汗。まぁ、速度が必要になったらgccからインラインアセンブラ使えばいいや・・・って感じで。動作確認するまではWindowsで作業し、うまくいったのでメインマシンのMacで環境を整えることにしました。avr-gccはMacPortsからインストールして、hidspxは自前でコンパイル。なんとなくGUIも欲しかったので、Windows版hidspx-GUIを参考に見た目移植をしてみました。

開発環境はtcl/tkなので、MacでもLinuxでもOK。なんでtcl/tkなんか・・・ってのはご愛嬌。最近CADでtclを書く事が増えてきたので、その練習も兼ねて。M.Hiroさんのページ(*3)とか、「もっとTcl/Tk(*4)」を参考にさせてもらいました。前者のページはOh!Xとか、懐かしいですねぇ(しみじみ)。一応このGUIもアップしてみました(*5)。一部機能が未実装かつATtiny2313でしか動作確認していませんが。。。
という事で、まずはお約束の8x8 LEDを使って遊んでいます。LEDの制御だけでI/Oがわりといっぱいいっぱいなので、LED用の出力ポートを時分割でボタン入力にも使ってみました。子供のおもちゃにいいかもw

*1: 千秋ゼミ AVR/HIDaspx00
*2: ELM AVRライタの製作
*3: Tcl/Tk お気楽 GUI プログラミング
*4: もっとTcl/Tk
*5: hidspx-GUI/tk ver. 0.5.0/0.1
AVR Writerはどうしようかなぁ・・・と思って探してみるとhidaspx(*1)がUSBから使えて便利そう。っていうかAVRはソフトウェアUSBの実装がフリーで公開されているというのが驚き。上記の100円AVRをUSBコントローラとして使えてしまいます。AVR Writer自身にAVRを使うので、鶏と卵問題があったりしますが、確かAKI-PICでもAVRに書けたよなぁ・・・という気軽な気持ちで配布プリント基板をぽちっと購入。基板を待つ間にファームをAVRに書き込んでおくか・・・と思ったら・・・AKI-PICはATTiny2313に対応していなかった。。。ショック。
という事で、まずはAVRSP-COM(*2)互換のWriterを作ることにしました。最初はRS-232Cの信号から5Vを作るつもりだったんだけど、AVRSP-COMのプロトコル的に常時アサートされてる信号がなかったので、諦めてUSBから電源をとることにしました。最近は自作回路の電源をとる時はもっぱらUSBを使ってます。USBなら電力制限で保護がかかってるので、うっかりショートさせてもブレーカー落ちないし(笑。
で、次に作ったのが購入した基板で作ったhidaspx。わりと融通のきく回路になってて、基板と一緒に買えなかったものは手持ちの部品で事足りました。これだけでUSBデバイスとして動くのだから凄いですね。その後、avraを使ったアセンブラでの開発をちょろっと体験し、すぐに面倒になってavr-gcc環境を構築しました(汗。まぁ、速度が必要になったらgccからインラインアセンブラ使えばいいや・・・って感じで。動作確認するまではWindowsで作業し、うまくいったのでメインマシンのMacで環境を整えることにしました。avr-gccはMacPortsからインストールして、hidspxは自前でコンパイル。なんとなくGUIも欲しかったので、Windows版hidspx-GUIを参考に見た目移植をしてみました。

開発環境はtcl/tkなので、MacでもLinuxでもOK。なんでtcl/tkなんか・・・ってのはご愛嬌。最近CADでtclを書く事が増えてきたので、その練習も兼ねて。M.Hiroさんのページ(*3)とか、「もっとTcl/Tk(*4)」を参考にさせてもらいました。前者のページはOh!Xとか、懐かしいですねぇ(しみじみ)。一応このGUIもアップしてみました(*5)。一部機能が未実装かつATtiny2313でしか動作確認していませんが。。。
という事で、まずはお約束の8x8 LEDを使って遊んでいます。LEDの制御だけでI/Oがわりといっぱいいっぱいなので、LED用の出力ポートを時分割でボタン入力にも使ってみました。子供のおもちゃにいいかもw

*1: 千秋ゼミ AVR/HIDaspx00
*2: ELM AVRライタの製作
*3: Tcl/Tk お気楽 GUI プログラミング
*4: もっとTcl/Tk
*5: hidspx-GUI/tk ver. 0.5.0/0.1
2009年3月2日月曜日
Java 3種の神器
最近eclipseを使う機会が増えました。Ruby on RailsとかOVMとかで良く使ってます。メインはOVMかな。そうなるとわりとJavaのお世話になる機会も増えたりして。例外はいて落ちたりすると中を追いかけたくなるのが人情というもの。という事で便利に使ってるのが以下のツール。
*1: http://web.archive.org/web/20080214075546/http://www.kpdus.com/jad.html
*2: http://classfileanalyzer.javaseiten.de/
*3: http://jasmin.sourceforge.net/
- Jad (decompiler)
- ClassFileAnalyzer (disassembler)
- jasmin (assembler)
*1: http://web.archive.org/web/20080214075546/http://www.kpdus.com/jad.html
*2: http://classfileanalyzer.javaseiten.de/
*3: http://jasmin.sourceforge.net/
2009年2月15日日曜日
The Benchmark Handbook
ベンチマークについての古い資料で、昔はウェブで無料公開してたものらしいんだけど。今は公開サイトのドメインも失効してしまい、Morgan Kaufmannから出てた書籍も中古(しかも、わりと高価)でしか入手できない・・・と思ってたんだけど、試しにweb.archive.orgにかけてみたら、PDF含めてしっかりと残ってました。
というわけで、The Benchmark Handbook Online版。たまに論文に出てくるThe Wisconsin Benchmarkについて、それなりに詳しく書かれた唯一の資料でしょうか。
というわけで、The Benchmark Handbook Online版。たまに論文に出てくるThe Wisconsin Benchmarkについて、それなりに詳しく書かれた唯一の資料でしょうか。
登録:
投稿 (Atom)