ノートPCのCPUクロックがどんな風に変化しているか見るために、数秒おきにTSC(Time Stamp Counter) を読んで表示するプログラムを作ったのですが、CrystalCPUIDの出す値と比べてみたら、全然値が違います。
我が家のCore Soloに限定すると、負荷をかけて内部クロックの倍率がx10になればTSCから求めた値と一致しますが、倍率がx8とかx6に下がっている状態だと、TSCから求めたクロックがかなり高い値に計算されてしまいます。どうやらrdtscではダメなようです。
LinuxのカーネルやカーネルのコメントでリファーされているIntelの資料を見ると、MSRの値から計算できるらしいのですが、そんなのユーザプログラムからできないよ。
ちなみにCrystalCPUIDはどうしてるかというと、実行時にSysInfo.sysというドライバ(主にMSRを読むドライバでしょう)をロードして、\Device\CrystalSysInfoって名前のデバイスを作り、そいつを叩いて取得しているようです。やはりそれしかないのかなあ…。
23日までに研究室で使っている机を譲る準備をしなきゃいけません。今日はその準備の第一歩です。
ノートPC(NEC VersaPro)を初期化して、工場出荷時まで戻しました。残る期間は私物のノートPCで代用します。
Windowsのデスクトップは HDDを初期化して、まっさらな状態にしておきました。後はLinuxマシンがありますが、これはもう少し使うのでギリギリにやります。
昨日の続きです。VAIO type GのポインティングデバイスAlpsのGlidePointは、そのままだとPS/2マウスとして認識されてしまいます。
もちろんそのままでも使えるのですが、ちょっとタッチパッドに触るとポインタが吹っ飛んでしまうために、特に文字を打っている時にイライラします。
というわけでGlidePointのドライバ探しを始めたのですが、AlpsもSONYも全然ドライバ公開していません。VAIOのリカバリDVDにはVista用のドライバがあるのみで、これも使えません。困りました。
色々探してみると、DELLのLatitude D400あたりのXP用ドライバが使えそうだったのでインストールして使っています。
SONYのPCなのに設定画面にhttp://www.dell.com/ と出るのはご愛敬ってことで。ドライバを公開しまくりなDELLに感謝感謝。
我が家のVAIO type GにXPを入れて、デュアルブート環境(参考ページ)にしてみました。元々はXPモデルだったから、親和性は高いだろうと思って始めたら、結構ダメダメです。
ダウングレードなんてメーカーサポート外も良いところなので、自己責任でよろしくお願いします。
ThinkPadなんかと違って、VAIOの輝度調節や音量調節はソフトウェアで処理しています。そのためクリーンインストールすると、Fn + F4などを押しても輝度も音量も変わりません。音量は標準のミキサーで変えるとしても、輝度だけはどうしようもありません。
また、リカバリDVDに入っているドライバは当然ながらVista用の物が多いので、これも何とかしなければなりません。
インストールした時点で「不明なデバイス」となっているのは、以下のデバイスです。
ざっと見たところ、ハードウェアのイベントをVAIO Event Service(VESMgr.exe) というサービスで処理しているようです。XPにVista用のVAIO Event Serviceを無理矢理インストールしたら、エラー続出で動きません。しかし何回かインストール/アンインストールを繰り返していたら、輝度調節だけできるようになりました。
意味が分かりませんが、便利になったのでこのまま放置しておきます。たぶん使っているDLLの登録情報とかがおかしくなってしまったのでしょうね。面倒くさくなってきたのでこれ以上追求しません。
HDDプロテクションを使う方法ですが、DVDのドライバ(\VAIO\Drivers\HDD Protection)をインストールします。
Sony Utilities DLL(\VAIO\Applications\Sony Utilities DLL)を入れて、Sony Shared DLL(\VAIO\Applications\Sony Shared Library)を入れます。再起動しろと言われるので、再起動します。
先述したEvent Service(\VAIO\Applications\VAIO Event Service)を入れます。輝度調整や音量調整ができたりできなかったりします。。。
HDD Protection(\VAIO\Applications\VAIO HDD Protection)と、Control Center(\VAIO\Applications\VAIO Control Center)も入れます。コントロールパネルのVAIOの設定、から色々いじってみてください。
よくわかりませんがHDDプロテクションが動いたり動かなかったりします。。。
ちなみにモデムのドライバが入っていると、サスペンドしたときにブルースクリーンで死にます。画面が消えるのでブルースクリーンは拝めませんが…。電源を再投入したときに「深刻なエラーから復旧した」と言われ気づくと思います。
毎日ダイアルアップする人や、Winモデムを愛しているということでも無い限り、モデムより、サスペンド出来た方が便利だと思います。従ってモデムのドライバは削除しておくことをオススメします。
バッテリーのユーティリティや、電源のユーティリティなどは動きませんでした。デバッガで追いかけたらVista用のAPIを使っていたため、どうしようもありませんでした。
つまりバッテリーいたわりモードなどの利用ができません。そう頻繁に変える物でもないと思うので、Vistaからやることにします。
友人達の「来年度住むところは〜〜なんだってさ」という話を聞く度に、就職先からの連絡来まだかなあって不安になります。連絡予定は3月上旬〜中旬らしいんですけど、それってもう過ぎてないか?
やはり先走って不動産屋に5月まで借りますが何か?って聞くべきかなあ…。
先日購入したVAIO type Gはオンボードで1GBのメモリを積んでいるので、しばらくは余裕だろうと思っていたら、全然駄目でした。何もしていないのに500MB以上消費されています。Vistaがこれほどまでにメモリをドカ食いするとは。
早速追加のメモリに頼ることになりました。BuffaloのD2/N533-Gです。チップはヒュンダイでした。
またVAIO君の軽さを優先して1スピンドルモデルを選択したので、光学ドライブがありません。メモリを買うついでに、ポータブルDVDマルチドライブPanasonic LF-P967Cを買いました。USBのバスパワー駆動なのにかなりの速度が出ます。すげえ。
それにしても今月はクレジットカードの限度額(30万)が近い、近すぎるぜ…。
我が家のVAIO君はうまくないことにWindowsのインストールドライブにHDDの領域全て(100GB)が割り振られています。Vistaの腐ったフォルダ構成と相まって、激しく使いづらいのでntfsresizeでパーティションを縮めました。
一回失敗してデータが全部吹っ飛びましたが、あらかじめディスクをフルダンプしておいたので無傷で済みました。dd様々ですよ。
下記では既に30GBに縮めたパーティションを例に使っていますが、基本的には同じです。
(このコマンドでは、パーティション領域の使用率などが出ます) # ntfsresize -i /dev/hda2 ntfsresize v1.13.2-WIP (libntfs 10:0:0) Device name : /dev/hda2 NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 29999993344 bytes (30000 MB) Current device size: 30006132736 bytes (30007 MB) Checking filesystem consistency ... 100.00 percent completed Accounting clusters ... Space in use : 19569 MB (65.2%) Collecting resizing constraints ... You might resize at 19568902144 bytes or 19569 MB (freeing 10431 MB). Please make a test run using both the -n and -s options before real resizing! (実際には書き込みを行わないが、パーティションの縮小作業が行われる) (縮小させる前にこのモードでチェックするとよい) # ntfsresize -n -s25000M /dev/hda2 ntfsresize v1.13.2-WIP (libntfs 10:0:0) Device name : /dev/hda2 NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 29999993344 bytes (30000 MB) Current device size: 30006132736 bytes (30007 MB) New volume size : 24999993856 bytes (25000 MB) Checking filesystem consistency ... 100.00 percent completed Accounting clusters ... Space in use : 19569 MB (65.2%) Collecting resizing constraints ... Needed relocations : 0 (0 MB) Schedule chkdsk for NTFS consistency check at Windows boot time ... Resetting $LogFile ... (this might take a while) Updating $BadClust file ... Updating $Bitmap file ... Updating Boot record ... The read-only test run ended successfully. (パーティションの縮小作業が行われる) # ntfsresize -s25000M /dev/hda2 ntfsresize v1.13.2-WIP (libntfs 10:0:0) Device name : /dev/hda2 NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 29999993344 bytes (30000 MB) Current device size: 30006132736 bytes (30007 MB) New volume size : 24999993856 bytes (25000 MB) Checking filesystem consistency ... 100.00 percent completed Accounting clusters ... Space in use : 19569 MB (65.2%) Collecting resizing constraints ... Needed relocations : 0 (0 MB) WARNING: Every sanity check passed and only the dangerous operations left. Make sure that important data has been backed up! Power outage or computer crash may result major data loss! Are you sure you want to proceed (y/[n])? (上記の質問にyと答えて進める) (既存の大きなパーティションを消して、縮めた大きさのパーティションを作る) # fdisk /dev/hda コマンド (mでヘルプ): p Disk /dev/hda: 100.0 GB, 100030242816 bytes 255 heads, 63 sectors/track, 12161 cylinders Units = シリンダ数of 16065 * 512 = 8225280 bytes デバイスBoot Start End Blocks Id System /dev/hda1 1 608 4882432 27 不明 Partition 1 does not end on cylinder boundary. /dev/hda2 * 608 4256 29302864 7 HPFS/NTFS (hda1を削除する) コマンド (mでヘルプ): d 領域番号 (1-4): 2 (基本領域2を作成する) コマンド (mでヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 2 (パーティションのサイズを設定する) 最初 シリンダ (608-12161, default 608): (何も入力せずエンター) Using default value 608 終点 シリンダ または +サイズ または +サイズMまたは +サイズK (608-12161, default 12161): +30005M (変更を反映する) コマンド (mでヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 ディスクを同期させます。
パーティションの領域サイズが30005Mと中途半端なのは、30000Mにしたところ微妙にサイズが足りなくてデータがぶっ壊れたためです。何かコツがあるのかなあ?
再起動するとWindowsの起動時にchkdskが走りますが、特に何も起きないはずなので気にしないで下さい。
ダンプデータをバックアップする際に smbだと遅すぎて使い物にならなかったので、nfs越しに送ったのですけど、nfsって未だに良くわかりません…。
クライアントはKnoppix 5.1.1で、サーバはDebian Sargeです。クライアント側で、
# /etc/init.d/portmap start
としてportmapデーモンを起動しなければならないのは知っていたのですが、うっかりサーバ側で、
# /etc/init.d/nfs-common start # /etc/init.d/nfs-kernel-server start
とやったらnfs-kernel-server startで固まってしまいました。サーバ側でportmapを起動するのを忘れていたのが原因のようです。
# /etc/init.d/portmap start # /etc/init.d/nfs-common start # /etc/init.d/nfs-kernel-server start
こういう手順を取るべきだったんですね。くだらんことでつまづいてしまったのでここにメモ。
私はVisual Studio 2005 Academic Editionを使っているのですが、最近プロジェクトをリビルドしたときの動作がおかしいです。今まで正常に動いていたのに、いきなりMSVCP80D.DLLがありません、と言われて起動しなくなることがあります。
何回リビルドしても駄目なときは、プロジェクトを置いているディレクトリに生成される DebugやReleaseというディレクトリを丸ごと葬ると直るようです。実行ファイルが生成される方ではなく、オブジェクトファイルが生成される方のディレクトリです。
ビルド時のメッセージにも特に異常はないし…一体何なのかね??ネットワークドライブにファイルを置いているからいけないのでしょうか?
同じ症状が出ている人or解決策を知っている方はぜひ教えてください。
WindowsのDLLではエクスポートをフォワーディングするという芸当ができるそうです。この機能を使うと、別のDLLがエクスポートしている関数を借りてきて、自分がエクスポートする関数にすることができます。
実際の使用例としては、kernel32.dllのHeapAllocというAPIが、ntdll.dllのRtlAllocateHeapと言うAPIにフォワーディングされています。フォワーディングされた関数はロード時にアドレスが解決されるようで、特にオーバヘッドはありません。
DEFファイルで、
HeapAlloc = ntdll.RtlAllocateHeap
のように [DLL名.関数名] という形で書くと、フォワーディングできるようです。
Dependency Walkerで見ると、上図のrecvのようにちょっと違うアイコンで表示されます。
COFFって面白いことができるんですねえ。と、ここまで書いて、そんなの常識だろって、詳しい方々に突っ込まれる気がしてきた…。
誕生日です。園芸のみなさんからお祝いのメールをいただきました。ありがとうございます。
大下さんと天久保2丁目(エルトリートのある交差点を東側に行ったところ)のバリ料理屋JEPUNに食べに行きました。テーブル料なるものを取るレストランに初めて行ったような気がするよ。
食べたことのない味で、おいしいです。あと、微妙に辛かったですね。個人的には限界値ギリギリでした。
(※)皆様にもっとも理解しやすいように、時計でおなじみの12進数で表記いたしました。
就職先から連絡が来ません。私は来年度どこに住めば良いのでしょうか。
しかも部署によりますが本社で研修、移住、事業所で研修というコースもあるらしく、4月に定住先が決まるのかどうか不安になってきました。
可能ならば、今住んでいるアパートを5月まで借りてしまって、ゆっくり引っ越しするという手が一番良いような気がしてきました。今年は2年契約の真ん中なのでできるはずですけど、一回不動産屋に退去するって言っちゃったのが心配。月曜日にでも不動産屋に聞いてみるかな。
こんなことになるなら、車を実家に置いてくる必要は全くなかったんですねえ。無駄に不便になっただけだったよ。うーん。
研究室の方々が WindowsってAPIのレイヤでフックできないの?って話をしていたのでちょっと考えてみました。DLLの呼び出しをフックする手法は以下のような手法が考えられますが、どれも一長一短です。
名前は勝手に付けました。下に行くほど実装が面倒くさそう、と勝手に思っています。正式名称(orもっと格好いい名前)や、他の方法をご存じの方は、ご教授いただけると幸いです。
以前、フックDLLでwinsockかなんかをフックしたことがあるので、今回はIATを外から無理矢理ぶっ潰してフックを実現してみました。
試しにWindows MessengerのSHELL32.dll!Shell_NotifyIconに割り込んで、ダイアログを表示させてみました(下図)。
ちなみにshell32.dllであればフックDLLの方が遙かに楽だと思います。kernel32.dll!CloseHandleなんかもフックしてみたのですが、見た目に呼んでるんだか呼んでないんだかわからんのよね。
ロードされたモジュールは各自のIATを持っています。そのためIATパッチを行う場合は、全てのIATのエントリを虱潰しに見なければなりません。
あるプログラムhoge.exeがkernel32.dllとuser32.dllをロードしていたとしたら、IATは少なくともhogeとkernel32とuser32の3つ分存在するはずです。
その状態でuser32.dll!MessageBoxWをフックしたいと思ったら、全てのIATのエントリからMessageBoxWに関わるエントリを探して書き換えなければ、打ち漏らしが発生してしまいます。IATパッチにおいて、フックをかける処理はかなりヘビーなものになるでしょう。
またDLLはいつロード/アンロードされるかわからないので、フックの設定や解除を徹底しようと思うとかなり難しいです。そのため厳密にフックする必要がある、セキュリティシステムなどには向かない手法です。
あとは…フックを通知する方法も考えないと行けませんね。これはそのうちなんとかなるんじゃないかと思っております。
プログラムというものは基本的には、動いて欲しいと思った通りに動くプログラムを書けば良いと思いますが、スピードや保守性を求め始めると少し事情が変わってきます。
スピードを求めるなら多少トリッキーなコードも必要になるでしょうし、保守性を求めるなら、他人が読むことを考えて綺麗に書く必要があります。
普段からエレガントで速いコードが書ければ良いのにと思っているのですが、私のようなヘボプログラマにとってはなかなか難しいです。
プログラムがうまくいかないと、いつも決まってこんなことを考えています。現実逃避とも言いますね。
朝起きて風邪がぶり返していないことにほっとしつつ、朝ご飯。
せっかく来たからには魚尽くしということで、鴨川市の地魚回転寿司丸藤に行きました。ホテルの晩ご飯も寿司があったので、都合2日で3回寿司食ったことになります。
丸藤は大繁盛で、7組くらい待っていました。恐らく丸藤は元は回らない寿司屋だったんじゃないかと予想しています。つくばで言う大漁寿司(R354沿い)みたいな感じです。
残念ながら実験が忙しくて旅行に参加できなかった榮樂君におみやげを買って、後は外房の海岸沿いをひた走り、海を見ながら帰りました。風がすごくて海が荒れまくりです。
学生生活最後にふさわしい、良い思い出が出来ました。
研究室のM2の皆さんで千葉に旅行に行きました。行きは高速で内房まで一気に進みました。途中で富津岬に寄ったらものすごい風。飛ばされそうなくらいの風にちょっと楽しさを覚えたりして。
ホテルですが、南房総は白浜町の南国ホテルという所です。安くてご飯も付いているという破格のプランでした。値段だけ見るとビジネスホテルかと思いますよ。
房総に来たからには魚を食おうってことで、寿司屋を探すも下調べしなかったのでどこに何があるかさっぱりわかりません。ホテルの人に聞いてみたら、館山市街に回転寿司のやまとがあるとのこと。チェーン店ですけどきっとネタが違うと信じてそこで食べました。
実はそんなに期待していなかったのですが、100円均一の回転寿司よりかなりおいしかったように思います。他のやまとに行ったことないので、館山だけなのか、全店同じようにうまいのかはわかりません。
ホテルでは温泉に浸かって疲れを癒しつつ、定番の温泉卓球などをやりました。ペングリップかつ、ピンポン球が全然跳ねなくて難しかった…。
ロビー横のインターネットコーナーに2時間くらい入り浸ってたのは、情報系って事でご愛敬です。
キュートで軽く昼食を取って、お菓子を堪能しました。大下さんはタルト、自分はプリン。
やっぱり高いプリンはうまいなあ、という気がしたけど、同じ容器に入れて出されてどれが一番高いか?と聞かれてきっとわからないでしょう。100円で頑張ってるプッチンプリンは偉大だと思う。
しかしどうやら風邪をひいたようで具合が悪くなり、途中で切り上げて帰ってきました。
それからはずっと寝ていました。大下さんに風邪が伝染ってないことを祈ります…。
暇で仕方ないというじょーの誘いを受けて、北脇さんと3人で遊んでいました。
ランランで夕飯を食べた後、パーティーパーティーでカラオケしました。スカスカだったのに、微妙に古い機械のある部屋に通されたのはなぜだったのかなあ。一見さんだと思われたかな?
ジャンボリーというゴルフ場で打ちっ放しをしました。YRPに居たときに、一回連れて行ってもらったくらいなもので、全然わかってません。全員右利きなのに、左利き用のクラブを間違って持ってくるくらいわかってません。
そんな状態なのでもちろんボールに当たりません。当たったら当たったで、右や左へ曲がる変化球でした。難しいなあ、ゴルフって…。
最後にいのいち亭で焼き鳥食べて、軽く飲んで解散しました。
< | 2007 | > | ||||
<< | < | 03 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
合計:
本日: