100人ビール・ラボ

サッポロビールがFacebook上でユーザーと商品を共同開発するそうな。
9ガツ・・・もとい9月の金曜日の夜から"企画会議"が始まるそうなので、それまでに参加者登録すればいいみたい。
で、企画会議での発言の量と質に応じてポイントがたまり、上位100人には工場見学や試飲もさせてもらえるようです。

サッポロビールと言えばヱビスビールと赤星ラガー。この二大ビールがakachochinは好きなので企画から関われるのは嬉しいところではあるし、気分転換にちょうど良さそう。akachochinも参加してみようかな。
Facebookでは「百人ビール・ラボ」です。

宇ち多゛に行ってきました。

京成立石にある名店として有名な宇ち多゛ですが、先週の金曜日に行ってきましたので簡単にご報告と備忘録。

宇ち多゛は言わずと知れたモツの名店。akachochinが店に行ったのが14:30位ですが、そのときにはもう既に10人位並んでいました。

で、20分位してようやっと店に入れました。
さながら中は平和なる野戦病院。そこかしこから注文が殺到します。

焼酎瓶と梅シロップの瓶を抱えたお兄さんがそこかしこをうろつき、注文を裁いて行きます。

まずは焼酎から。焼酎は宝焼酎(?)のストレートと梅シロップ。これが180円なり。安い!しかも意外と飲みやすい。

次にモツと言えば煮込みな人なので煮込みを頼んでみることに。

油の乗ったモツ、プリプリしたモツの煮込みはもう最高です。
次に生の(と言っても湯通ししてあるが)ガツ生行ってみました。

これは大きい。プリプリしてボリューム感あふれるモツ串。しかもこれも180円。安い!
メニューは「モツ焼き」となっているが、部位名や焼き加減を言わないと行けないらしい。
幸いにも「宇ち入り倶楽部」なるページのhttp://curtain.sakura.ne.jp/uchida/motsuyaki.html というページがあったのでカンニングしつつメニューを頼みました。
結局ガツ生と煮込み2つ、焼酎2杯で900円でした。
確かにうまいが、さながら野戦病院。落ち着いて呑めるか、というとakachochinの未熟さもあってせかせかとしてしまいました。
けれど、名店であることは疑いがありません。明らかにうまいし。今度行くときにはぜひともモツ焼きのメニューを暗記して行きたいな、と思います。そうすればもう少し落ち着いて呑めるかもしれません。

宇ち多゛にいくときには「宇ち入り倶楽部」(http://curtain.sakura.ne.jp/uchida/index.html)でぜひとも予習をしていった方がいいです。

暑気払い

久々に酒の話題。
http://headlines.yahoo.co.jp/hl?a=20120715-00000503-san-bus_all
ミントの酒が人気だそうだ。
節電にも一役買いそうなミント酒、一度呑んでみようかな。

けれど、そうした小洒落た酒よりも、モツ焼き屋でホッピー呑んでいる方が性にあっているのかもしれない。これも立派な暑気払い。
三冷ホッピーで夏を乗りきろう!

softirqの実装

NetBSD5.1.2以降のARMのソフト割り込みの__HAVE_FAST_SOFTINTS実装みたいだ。
こいつもカーネルスレッドでソフト割り込みを実行する。
また、ハード割り込みハンドラを抜けた後だとか、割り込みレベルを下げたときにも同様にソフト割り込みの実行(実際にはソフト割り込みを担当するカーネルスレッドにスイッチングする)を行う。

Linux3.4.2のsoftirq実装(run_ksoftirqd)もほぼLinux Kernel Developmentに書かれているとおり。

次はtaskletの勉強をしてみますか。

Linux Kernel Developmentを読み直す(その1)

第八章の「Bottom Halves and Deferring Work」。
最初の8ページを読んだので、次にソースを読むときに備えて内容をまとめておこう。

Linuxには2.6.34現在Bottom Halfの仕組みとして3つの仕組みがある。
○SoftIRQ
○Tasklet
○Work queues

SoftIRQは利用者がコンパイル時に静的に決まる。最大32個利用できる。(2.6.34では9個の利用者が存在する。)
性能的には一番優れている。
SoftIRQが実行されるタイミングは
○ハードウェアの割り込みから戻るパス
○ksoftirqdというカーネルスレッド
○ネットワークモジュールのように、明示的にsoftirqのチェックをしている箇所

肝となるアルゴリズムは139ページ参照。単純に32bitのpending変数のビットを見て、立っていたらそれに対応したハンドラを実行するというもの。

もし、SoftIRQを使ってみたい場合、
linux/interrupt.hにインデックスを追加する。
○open_softirqでハンドラとインデックスを紐づけつつ、ハンドラを登録する
ということをやる。
○raise_softirqでペンディングビットを立てて、ハンドラの実行タイミング時にハンドラが実行できるようにする。
が必要になる。

今度はソースを読んでみるとしますか。

ブートローダを書いたときの困りごとその2

その1.GNU拡張アセンブラ
例えば、asm("xorl %eax,%eax")みたいなやつ。
Interface 2002年7月号のサンプルプログラムではasm内の文字列が複数行にわたって記述されているものがあったが、これが軒並みコンパイルエラー。
例えばこんなやつ。

asm("
movl $_data_end,%edi
movl $_bss_end,%ecx
");

面倒だけど一行一行asm("....");を記述してあげることでコンパイルエラー解消。
理由は不明だが、GCCのバージョンアップによって昔(GCC2.95)のときに許されていたコードがアウトになったのか・・・。

その2.code16gccとcode32の混在
これが一番ハマった。
例えば以下のようなプログラムを一つのソースファイルに書いた場合。

asm(".code16gcc");
プログラム(ここにあるプログラムは16bitコードで吐き出されてほしい)

asm(".code32"); /* 以後は32bitコードで吐き出されてほしい */
プログラム

これをコンパイルするとどうも全てのプログラムが32bitコードで吐き出されてしまうみたいだ。
なぜだろう、う〜ん。

ブートローダを書いたときの困りごと

OS自作入門で遊ぼうとしたが、この本はWindows向けのNASMでブートローダが書かれていてLinuxな私は困っていた。
そこで、Interface 2002年7月号掲載のブートローダを写経して、GNUなプログラム環境でもばっちり動くような企てをした。

Interface 2002年7月号記事のサポートページ:http://www.skyfree.org/jpn/interface/index.html

ところが、stage2(boot2)まで書いてMakeをかけると・・・・。

bios_mem.o: In function `copy_block':
bios_mem.c:(.text+0x42): undefined reference to `__stack_chk_fail'
make: *** [stage2] エラー 1

というエラーをリンカが吐いて終了してしまう。
色々調べると、gcc4.1からスタックをガードするための仕組みがあり、スタックオーバフロー検出時に呼ばれる関数が__stack_chk_failの正体である。
詳細は、http://d.hatena.ne.jp/yupo5656/20060625/p2 を参照のこと。

別にブートローダにこんなのいらないし・・・。
ということで色々調べると、コンパイルオプションで「-fno-stack-protector」を指定することでこの機能を無効化することができる。

早速Makeをすると、無事にMakeが通りましたとさ。めでたし、めでたし。