2010年10月10日日曜日

イナーシャ - それはロシア人の名前ではない

イナーシャ。最初に聞いたときは、ロシア人の名前かと思いました。慣性(慣性モーメント)のことだったんですね。

2010年10月9日土曜日

新しいiPod Touch 4Gは期待はずれかも

iPod Touchへの期待は、最低でも「iPhone品質 ― 電話」です。アップルはこの潜在ニーズがわかっているのか、わかっていないのか? とりあえず、今回の買いは見送りです。このまま行けば、iPod Touchユーザに見放されます、アップルさん。

追伸

amazonではかなり好評のようです。。。

2010年9月11日土曜日

モータ制御って楽しそうだ

電気と機械の接点の代表と言えばモータでしょうね。EDNにはベクトル制御に関してこんな解説があり、なんだか面白そう。「座標系を回転子と一緒に回す」って、確かに電機子が回転して見えるでしょう。まるで地動説と天動説のようです。

2010年8月11日水曜日

WindowsXPが最近重たいのはwuauclt.exeのせいか?

WindowsXPが最近やけに重いです。確かに自動更新をやっているwuauclt.exeのメモリ使用量がものすごい勢いで増えてます。ディスアクセスも半端じゃありません。

Windows Update サイトで利用可能な更新を検索すると 0x80248013 エラーが表示される

に従って、履歴DBを削除すると軽くなるようですが、それにしても、wuauclt.exeはそんなに過去の履歴までいちいち参照しているのでしょうか?

2010年7月25日日曜日

制御を勉強しよう!

私は制御は専門外ですが、最近、勉強してます。熊谷研究室の講義資料なかなか簡潔にまとまっていそうです。時間をかけて読んでみます。

2010年7月17日土曜日

「12ステップで作る 組込みOS自作入門」- KOZOSのスレッド生成を変えてみる part3



p.14~p.17にかけてクロスコンパイラのビルドの話があります。先週ブログに書いたように、cygwinでビルドしようとすると、なんとシェル(shell)がハング! コントロールCでも応答なし。おまけにWindowsのシャットダウンもできなくなる始末です。

cygwinのデフォルトのシェル(shell)の問題ではないかと思い、cygwinのsetupからminttyを選択し新しいシェルとして追加インストールしました。試しにbinutilsをビルドしてみましたが、ここまではまったく問題なしです。

2010年7月10日土曜日

Cygwinハング!?

とりあえず、cygwinでH8用のクロス環境を作ろうと、cygwin環境を設定の上、binutilsをダウンロードしてビルドしたが、binutilsのビルド中にcygwinが固まる。別のパソコンでやってみてもcygwinが固まる。更には、Windowsをシャットダウンできなくなる。

参考:H8マイコンのソフトウェア開発環境を整備しよう

2010年7月4日日曜日

「12ステップで作る 組込みOS自作入門」- KOZOSのスレッド生成を変えてみる part2



KOZOSのレディキューですが、次のようにプライオリティごとにあります。

static struct {
    kz_thread *head;
    kz_thread *tail;
} readyque[PRIORITY_NUM];

一方、レディキューは1つにするという考え方もあると思います。そのほうが
シンプルですし。例えば、こんな感じで

typedef struct _kz_list {
    kz_thread *thrd; /* スレッド */
    int aux;         /* 補助情報 */
    struct _kz_list *next; /* 次の要素 */
} kz_list;
static kz_list readyque;

auxという補助情報ですが、基本的にはプライオリティ値を入れます。ただ、
先頭要素であるreadyqueにはリストにつながっている要素数を入れておきます。

次にリスト操作のAPIを考えて見ますが、

/* スレッドをリストに挿入する */
void kz_insert(kz_list* list, kz_thread* thrd);

例えば、新しくスレッドを作成した場合は、kz_insertを呼び出してreadyque
にスレッドを挿入します。スレッドの挿入は、プライオリティ値の小さい順に
しておきます。

iPhone OSの進化で見放されるiPod Touch ?

うーむ、互換性がないのでインストールされませんでした、とiTunesに言われても困りますね。最初にアプリケーションを買った時は、この古いOSで動いてたのですから。新しいOSについていくアプリケーションは、古いOSしか動かないハードウェアを見放すというわけでしょうか? 今後もiPhone OSは進化を続けるでしょうね。そして、アプリケーションはそれを追いかける。すると、古いOSしか動かないハードは魅力を失い、新しいハードへ移行する。

2010年7月3日土曜日

MSIに対する誤解

MSI(Message Signaled Interrupt)って誤解されてるんですね。ここを読むとそれが書いてあります。確かに、Memory Writeの仕様になってますが、実際は「特別なアドレスウィンドウ」への書き込みが割込みをアサートする仕組み。

2010年6月26日土曜日

「12ステップで作る 組込みOS自作入門」 - KOZOSのスレッド生成を変えてみるpart1

「12ステップで作る 組込みOS自作入門」、非常に良い本ですが、第8ステップのスレッド生成あたりから少し説明が難しくなってきます。

KOZOSのスレッド生成は、システムコールから呼び出されるthread_runで行われるようです。これ以外にもコンテキストスイッチのみをシステムコールで実装する、という考え方もあるかと思います。この場合、(3)は必要に応じてということになるでしょう。

(1)TCB(スレッドオブジェクト)にスレッド生成に必要な情報を格納する
(2)TCBをreadyListに挿入する
(3)現在動作しているスレッド(つまりスレッド生成の関数を呼んだスレッド)よりも、たった今生成したスレッドのプライオリティが高いなら、コンテキストスイッチする

(a) KOZOSでのコンテキストスイッチは_dispatch(pp.296)で行われています。このコードを良く見てみると、スタックに詰まれた値からER0~ER6を復旧してrteを呼び出すことが行われています。

(b)別の実装としては、TCB(スレッドオブジェクト)に格納しておいた値からER0~ER6を復旧してrteを呼び出すといことが考えられます。

(a),(b)、いずれにせよCSRとPCはスタックに保存しておいてrteを呼び出す必要があります。次回は(b)の方法について更に検討してみます。

2010年6月12日土曜日

x86:ブートストラップは複雑そのもの

はは、進化と継承のIntelさんは こんなドキュメントを作成してるんですね。
リンクが集約されているという点では非常に役立ちます。それにしても複雑ですね~。

2010年6月5日土曜日

x86の割込み(MSI)

最近のx86の割込みは大きく3種類あるようです。

・8259PIC(古典的な割込みコントローラ)
・IOAPIC MSI
・そしてPCIeの場合は PCIe MSI

Atomの例がここにあります。

それにしてもLINT0とLINT1に何かつながるような書き方がされてますが、本当でしょうか?
LINT1はNMIだとして、LINT0には一体何がつながるのでしょうか? 8259は別の線になってますし。

2010年3月15日月曜日

x86カーネル構築入門本、いずれもに短し襷に長し

x86でのカーネル構築に関して、いくつか本がありまますが、いずれも帯に短し襷に長しです。


というわけで、もう少しなんとかならないか、と考えました。そう
「Bran's Kernel Development Tutorial 」を活用すれば、OSカーネルの構築がもっとやさしく学べるはずです。次回は具体的に検討してみます。

2010年3月13日土曜日

Amazonプライム

確かに、これに近いものは感じる。まぁ、会員になってしまったが、有効活用する方向で考えよう。

「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」に関連して

「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」に関連して

os developerなるサイトがあるのを最近発見(?)した。作りながら学ぶOSカーネルの理解の助けとなるのがTutorialの中のBran's Kernel Development Tutorial です。

WRITE_REGISTER_*

WRITE_REGISTER_*ですが、ご存知の通り、WindowsドライバからメモリマップドI/Oをアクセスするための関数です。こちらのサイトにWRITE_REGISTER_UCHARについて簡単に紹介されていますが、最後の

lock or dword ptr [esp+4], edx

という命令、何のために実行してるのでしょうね。実はライトバッファのフラッシュっぽいのですが、また時間を見て調べてみます。

2010年2月28日日曜日

「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」3章再び

「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」3章再び

セグメントディスクリプタに関して3章にはアセンブラでの記述があります。

dw 0xFFFF ; limit:0xFFFF
dw 0x0000 ; base 0~15ビット
db 0x01 ; base 16~23ビット
db 0x9A ; P:1, DPL:0, Code, non-conforming, readable
db 0xCF ; G:1, D:1, limit 16~19ビット:0xF
db 0x00 ; base 24~32ビット

これをC言語のデータ構造として表現してみると


typdef struct _segdesc { /* 合計 8バイト */
    unsigned short limit_low;
    unsigned short base_low;
    unsigned char  base_mid;
    unsigned char  type;
    unsigned char  gd_and_limit_high;
    unsigned char  base_high;
} segdesc;
という感じです。セグメントのベースアドレスは3つに分かれてます。最初は
unsigned short型のbase_low、次はunsigned char型のbase_mid、最後は
unsigned char型のbase_highです。インテルはリトルエンディアンなので、
unsigned short型の場合、下位バイトが下位アドレス、上位バイトが上位アド
レスになります。つまり、base_low, base_mid, base_highを各バイト単位で見
ていくと、下位バイトが下位アドレスに必ずあります。

過去のまとめについてはこちらです。

2010年1月16日土曜日

Pleiades All in Oneインストール

Pleiades All in OneのEclipse Europa ベース、3.3.2.20080303 版の中からJavaETL JRE付きをインストールした。Java用のEclipseのプラグインはフリーのものが充実しており試すのが目的。ところが、上記をインストールしようとすると、なんとWinRARなるシェアウェアが必要となる。原因は、255文字を超えるパスを扱うためだ。せっかく、レジストリを一切さわらず、zipの解凍だけでインストールが済むツールになっているのに、これは非常に残念。