2010-01-01から1年間の記事一覧

ftraceについて(スタック書き換え)

前回の続き。 prepare_ftrace_return()では「parent」を求める。 parentはmcount呼び出し先関数の戻りアドレスが格納されているスタックポインタのことである。 これを取得するのがftrace_get_parent_addr()である。 unsigned long ftrace_get_parent_addr(u…

ftraceについて調べる(前々回からの続き)

前々回では「スタック弄りはなさそう」と書いた。 ところで、今回参照した論文でスタック弄りについて触れた部分のタイトルが「2 Adding Function Graph Tracing to ARM」となっていた。 このスタック弄りの概要を図示すると、以下のとおりとなる。確かに前…

cloneの疑問を15分程度で追ってみる(いい加減)

仕事や諸事情で体調があまりよくなく文書が更新できていない...。勉強会で話題になった件。 clone()システムコールのflagのうち、CLONE_PARENTって何に使うのだろう? 用途がまったく思い浮かばない.....。謎だ.....。とあるML上でも質問が放られたが、誰も…

ftraceについて調べる(前回からの続き)

ftraceの仕組みを調べるためにググっていたら、http://bit.ly/9cGM9d という論文を発見。 早速読んでみる。ftraceはgcc の -pgオプションを利用して、関数の入り口でmcount()という関数をコールするようにしている。 (-pgはプロファイラなどのために用意され…

10分間カーネルソースリーティング(timeシステムコールその3)

前回の続き。 今回は、CONFIG_FTRACE_SYSCALLSが有効なケースでのSYSCALL_DEFINEを追ってみる。 まずは、SYSCALL_DEFINExを見る。 #define SYSCALL_DEFINEx(x, sname, ...) \ static const char *types_##sname[] = { \ __SC_STR_TDECL##x(__VA_ARGS__) \ };…

10分間カーネルソースリーティング(timeシステムコールその2、というよりシステムコールのマクロ)

今日は帰宅が遅かった。なので、あまりソースを読む時間がとれない。昨日はtimeシステムコールが何をしていたのかを調べた。 ところで、SYSCALL_DEFINE1って何だろ?これを調べるためにinclude/linux/syscalls.hを覗いてみる。 #define SYSCALL_DEFINE1(name…

timeシステムコールその1?

Linux Kernel DevelopmentのP221ページ読んでいたときに、「The kernel also implements the time() system call」という文章を見つけた。ん?time()ってシステムコールだったっけ? しょうがないので、ソースをgrepしてみた。 すると、確かにkern/time.cに…

Linuxのidrの構造

Linux Kernel Development(以後「Linux本」)を読んでみて、いまいちイメージが湧かなかったのがidr。 idrはLinux本によれば「mapping a unique identification number (UID) to a pointer」となっている。 どうやらひとつのポインタに一つのIDを割り振って…

.data.percpuまわりをざっくりと読んでみた。

前回の記事「15分カーネルソースリーディング」の続き。まず、.data.percpuが何か特殊なセクションか調べてみることにする。 私は今Ubuntuを使っているので、手っ取り早く手元にあるLinuxのセクションを見ようとした。 /boot/vmlinuzうんたらにreadelfしたが…

15分カーネルソースリーディング!(percpu編)

現在、Linux Kernel Developmentを読んでいるが、英語力のなさで256ページに書かれている DEFINE_PER_CPU(type,name)とDECLARE_PER_CPU(type,name)の違いが良く分からなかった。 よって、コードを読んでみた。これらの定義はinclude/linux/percpu-defs.hに存…

Linux Kernel Development第四章のスケジューリング問題の記述

柴田芳樹さんが主催する勉強会(http://yshibata.blog.so-net.ne.jp/2010-07-23)の準備で「Linux Kernel Development 3rd edition」を読んでいる。第三章までは比較的すらすら読めたが、第四章で読みづらかった部分(P47,48)があった。 後々忘れるといけないの…

魔導書

twitterのとあるつぶやきで、「プログラミングの魔導書」なるものを見つけた。http://longgate.co.jp/products.html第一回はC++。 既に数年のブランクがあって忘れかけている...。もう少し詳しい話を書いているブログがあったので、以下にメモっておく。 htt…

haskellで勉強がてらcalコマンドを書いてみた。

haskellの勉強がてらcalコマンドを書いてみた。 (おそらくHaskellをよく知っている方が見たら、下手の極みだろうけれど。見るに耐えない場合指摘いただけると非常に助かります。)実行結果 import Data.Char import System main = do args <- getArgs let y =…

netbsd currentのmutex lockについて(その2)

[adaptive lockについて] mutex_vector_enter()の後半はadaptive lockである。 apaptive lockの処理を簡単にまとめる。ロックが獲得できるまでループを行う。ループの中の処理はおおまかに分けて以下の処理となる。処理1.mutexにまだ持ち主が居ない場合の処…

netbsd currentのmutex lockについて(その1)

またまたnetbsd currentのソースについて。 今度はmutexを読んでいる最中なので、ここについてもメモを残す。 なおlock debug機能はメモから外します。 ちなみにlock debug機能とは、ロックの状態を保持し、再帰呼び出しロックなど異常な状態などを検知した…

netbsdのソフト割り込み

ちょいと訳あって、netbsdのcurrentのスケジューリング方式を知りたくなった。 その中でも割り込み系の扱いを知りたくなったのでソースを読んだので、メモとして残す。(注)以下の説明は、__HAVE_FAST_SOFTINTSが定義されていない場合を想定しています。 また…

GMailのアドレス帳(Contacts)にPerlでアクセスする

とあるCGIを作っている最中に、メールアドレスをGMailのアドレス帳(Contactsというらしい)に同期したくなった。何かいい方法はないかな、と思い、例によってCPANをあさってみた。すると、WWW::Google::ContactsというCPANモジュールがあった。 http://search…

酒粕が肝臓を保護するだって??

久々に酒の話。http://headlines.yahoo.co.jp/hl?a=20100604-00000262-yom-sci「酒かすに含まれる成分が、肝臓を保護する効果があるという研究結果を、月桂冠総合研究所(京都府伏見区)がマウスを使った実験で明らかにした」らしい。すると、酒粕だらけの甘…

MITのOS講義で、Unix Version6に出会った

先日藤原博文氏の「パソコン初心者の館」掲載の http://www.pro.or.jp/~fuji/pasocomlife/2009-09-12.html という記事を読んだ。 そこでは MIT OpenCourseWare というのがあり、非常にたくさんのコースが用意されている。特別講義がちょろっと公開される日本…

PerlのEncodeについて

とある事情でCGIをひさびさに書くことになった。 置くのがレンタルサーバということもあり、言語はPerlを選んだ。ここで文字コードを変換する必要があり、その際にEncodeの使い方を日本語のWebPageの範囲で調べてみたがピンとこない。 そこで、CPANの小飼氏…

ひさしぶりだね(VirtualBoxの備忘録)

ほぼ11ヶ月ぶりの更新。 今回はUbuntu9.04でVirtualBoxいじったときの記録をつけてみる。元々CGIなどのデバッグ向けにvmware player使っていたけど、OSを再インストールしたときに、VirtualBoxではvmwareのHDDイメージをそのまま使えるという話を聞いてVirtu…