MSR(Model Specific Register)を読み書きするための命令
どちらも実行できるのは特権モード(ring 0)のみ
これらを C の中で使うには gcc インラインアセンブラを用いればOK
#ちなみにこのへんの記述は perfctr では /usr/include/asm-x86/msr.h にありますね
●インラインアセンブラ表記法
asm volatile ("アセンブラテンプレート"
: "出力オペランド"
: "入力オペランド"
: "アセンブラの実行で変更されてしまうもの");
出力オペランドは "=a" (出力先変数),
入力オペランドは "a" (入力) のように表記する.
ここで,各レジスタは以下のように表記する.
"a" eax
"b" ebx
"c" ecx
"d" edx
"A" edx:eax(上位bitにedx,下位bitにeax)
"g" gccが適当なレジスタに割り当てる
●RDMSR
ecx レジスタに MSR のアドレスを指定すると,edx:eax レジスタに MSR の内容を読み込む(上位 32bit が edx ,下位 32bit が eax に入る)
e.g.
asm volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr_addr));
asm volatile("rdmsr" : "=A"(val) : "c"(msr_addr));
●WRMSR
ecx レジスタに指定した MSR のアドレスに,edx:eax レジスタの内容を書き込む(〃)
e.g.
asm volatile("wrmsr" : : "c"(msr_addr), "=a"(low), "=d"(high) : "memory");
asm volatile("wrmsr" : : "c"(msr_addr), "=A"(val) : "memory");
参照ページ:
ほげほげまん: gccインラインアセンブラ
ほげほげまん: RDMSR / WRMSR
ほげほげまんめっちゃ分かりやすい.お世話になってますw
2009年9月30日水曜日
2009年9月28日月曜日
コンテキストスイッチのソースコード
今後手を加える予定なのでここにメモしときます.
(Linux2.6.25 kernel)
●コンテキストスイッチをしている箇所
kenrel/sched.c 内 context_switch()
switch_mm() によってプロセス空間の切り替え,switch_to() によって各種レジスタの切り替えを行っている.
●コンテキストを切り替える際に保存する情報
task_structに格納している
:定義は include/linux/sched.h l994
更に,CPU依存の低レベルな実行コンテキストは thread_struct に格納している
:定義は include/asm-x86/processor.h l315
以下はソースコードコピペ(長すぎて邪魔だったので消しましたw 09/10/15)
(Linux2.6.25 kernel)
●コンテキストスイッチをしている箇所
kenrel/sched.c 内 context_switch()
switch_mm() によってプロセス空間の切り替え,switch_to() によって各種レジスタの切り替えを行っている.
●コンテキストを切り替える際に保存する情報
task_structに格納している
:定義は include/linux/sched.h l994
更に,CPU依存の低レベルな実行コンテキストは thread_struct に格納している
:定義は include/asm-x86/processor.h l315
以下はソースコードコピペ(長すぎて邪魔だったので消しましたw 09/10/15)
2009年9月23日水曜日
富士登山
やっと念願の富士登山に行ってきました!
友人との予定が合わず,9月下旬の登山になってしまったこと,そして最近運動不足で体力に自信がなかったこともあり,結構不安でした..
が!
ゆっくり休憩をとりながらコツコツ登り続けること計8時間.
天候にも恵まれ,高山病にもならず(若干の頭痛はずーっとありましたが),無事に登頂を果たし,ご来光を見ることができました.
登った日はおじいちゃんの命日だったから,きっとおじいちゃんが見守っていてくれたんだと思う.
ご来光だけでなく,雲海に映る影富士や夕焼けの空,真夜中の満天の星など…
普段見ることのできない幻想的な世界を堪能できました.
それになんだか,元気を貰いました.
コツコツやっていればちゃんと達成できるんだなぁと.
毎日コツコツ,時間を大切にしなくちゃいけないなと改めて感じました.
またこんな晴れ晴れした気持ちを味わえるように!
今日も充実してたなーと毎日思えるように!
毎日を過ごしていきたいと思います.
富士山ありがとう!
/*ここからメモ*/
●登山に持って行って良かったもの
・ヘッドライト
・ゼリー状の飲み物
・帽子,手袋,ホッカイロ
・チョコレート(甘い物は元気が出る!)
●持って行けば更に良かったなぁというもの
・冷えピタ
・マスク
あとやっぱり9月だからか,これでもかってくらい防寒してちょうど良かったです.
私の場合,山頂ではTシャツ+長袖シャツ+ジャージ+フリース+防水ジャケットでもこもこでしたw
あと,山頂の神社に行けなかったのはちょっと残念でした(8月20日までだったみたい)
以上!
せっかくグッズも集めたことだし,また登山に挑戦したいです♪
友人との予定が合わず,9月下旬の登山になってしまったこと,そして最近運動不足で体力に自信がなかったこともあり,結構不安でした..
が!
ゆっくり休憩をとりながらコツコツ登り続けること計8時間.
天候にも恵まれ,高山病にもならず(若干の頭痛はずーっとありましたが),無事に登頂を果たし,ご来光を見ることができました.
登った日はおじいちゃんの命日だったから,きっとおじいちゃんが見守っていてくれたんだと思う.
ご来光だけでなく,雲海に映る影富士や夕焼けの空,真夜中の満天の星など…
普段見ることのできない幻想的な世界を堪能できました.
それになんだか,元気を貰いました.
コツコツやっていればちゃんと達成できるんだなぁと.
毎日コツコツ,時間を大切にしなくちゃいけないなと改めて感じました.
またこんな晴れ晴れした気持ちを味わえるように!
今日も充実してたなーと毎日思えるように!
毎日を過ごしていきたいと思います.
富士山ありがとう!
/*ここからメモ*/
●登山に持って行って良かったもの
・ヘッドライト
・ゼリー状の飲み物
・帽子,手袋,ホッカイロ
・チョコレート(甘い物は元気が出る!)
●持って行けば更に良かったなぁというもの
・冷えピタ
・マスク
あとやっぱり9月だからか,これでもかってくらい防寒してちょうど良かったです.
私の場合,山頂ではTシャツ+長袖シャツ+ジャージ+フリース+防水ジャケットでもこもこでしたw
あと,山頂の神社に行けなかったのはちょっと残念でした(8月20日までだったみたい)
以上!
せっかくグッズも集めたことだし,また登山に挑戦したいです♪
2009年9月17日木曜日
クロスリファレンスLXR
カーネルのソースコードを参照しやすくするために入れました.
入れ方&使い方は全てここに集約されています.
ViVa! Saborigineer. - クロスリファレンス
とりあえず使い方だけメモメモ
1.lxr/sourceにソースファイルを展開
lxr/source/バージョン名/sourceとなるようにして作成
2.genxrefを使って、lxr/source/バージョン名/にデータベース(fileidx,xref)を作成
$ ../../bin/genxref source/
3.fileidx、xrefのアクセス権の変更
$ chmod 644 fileidx xref
4."freetext search"、"file search"用のインデックスを作成
$ cd /var/www/html/lxr/source/バージョン名/
$ glimpseindex -H . source
$ chmod 644 .glimpse_*
5.versionsにバージョン名を追加
デフォルトのバージョン名を変更する場合は、defversionを変更
とり急ぎメモだけ.
入れ方&使い方は全てここに集約されています.
ViVa! Saborigineer. - クロスリファレンス
とりあえず使い方だけメモメモ
1.lxr/sourceにソースファイルを展開
lxr/source/バージョン名/sourceとなるようにして作成
2.genxrefを使って、lxr/source/バージョン名/にデータベース(fileidx,xref)を作成
$ ../../bin/genxref source/
3.fileidx、xrefのアクセス権の変更
$ chmod 644 fileidx xref
4."freetext search"、"file search"用のインデックスを作成
$ cd /var/www/html/lxr/source/バージョン名/
$ glimpseindex -H . source
$ chmod 644 .glimpse_*
5.versionsにバージョン名を追加
デフォルトのバージョン名を変更する場合は、defversionを変更
とり急ぎメモだけ.
登録:
投稿 (Atom)