9/30 (水)
[時事] サモア地震
南太平洋のサモアで29日午前6時50分(日本時間30日午前2時50分)に M 8.3 の地震が発生。 津波で100人を越す死者がでているもよう。
不謹慎だが、 サモアと聞いてマーガレット・ミードの「サモアの思春期」をまず連想したのだが、 津波の被害を受けた映像を見るとすでに欧米化された社会になっているのね。
9/24 (木)
[Linux] Linux カーネルのスタック長って制限あるのかしら?
create_proc_read_entry を使って proc 仮想ファイルを作るルーチンを IA-64/Linux カーネルから x86-64/Linux カーネルへ移植していたのだが、 その proc 仮想ファイルを外部から cat した後にカーネルパニックが発生するという障害に遭遇。
原因を探ってみると create_proc_read_entry に渡したコールバック関数の中で 16KB 程度のローカル変数を確保していたのが不味かったらしい。 原因を特定するまでに3時間程度かかる。
ローカル変数を削るとカーネルパニックは収まったが、 原因はよくわかっとらん。 後で調べよう。
8kBぐらいが多いと思いますがアーキテクチャによってはconfigで切替え可能です。
Linuxの中身は良く知らないんですが、THREAD_SIZE(より若干小さい値)がこのサイズに該当する気がします。
Linuxカーネルのスタックサイズに制限があるのは知っていたのですが想定よりもサイズが小さかったようです。
オーバーフローしても警告なしなのはちょっと辛いです。
それは辛い。
ただ、カーネルスタックに置いて良いのはせいぜい NAME_MAXぐらいまでのサイズで、
PATH_MAXくらいのサイズだと、もうスタックは避けた方が良い(たとえば、多重割り込みが
かかる場合の割り込みスタックで使うと、明らかにまずい)というのが、昔風の感覚です。
スタックサイズは昔と変わらないので、このあたりの感覚も、Linuxでも昔と変わってない気が
します。
(あと、ふつうのUNIXだとスタックはswap out時には主記憶上にないので、利用に
注意が必要ですし...)
9/11 (金)
職場の法定電源点検
日曜日にオフィルビルの法定電源点検がある。 このビルは漏電試験として高電圧を掛ける試験もするので、 コンセントに刺さった機器は全部外して帰る。
9/10 (木)
[CPU] x86-64 のページング構造の予約ビットって使ってもよいものかしら?
x86-64 の仮想記憶のページを色分けしたいといろいろ考えているのだが、 x86-64 のページング構造の予約ビットを使う方法を考えてみた。
2009年1月7日の日記にも書いたが、 x86-64 の4段のページテーブルは各テーブル段の要素が 64 ビット(8 バイト)になっている。 このうち Avail のビットフィールドは Available-to-software bits と呼ばれ、 ソフトウェアが自由に値を書き込める。 ただしこの領域はハードから一切無視されるので、 書き込んだ情報で TLB の動作を変えることはできない。
一方、Reserved の部分は通常は 0 であることを要求されており、 0 以外にしてページテーブルを構成してアクセスすると無条件でページフォール例外が上がるようになる。 この時、ページフォルト例外のエラーコードは「予約領域違反」のビットが立つので、 他の原因で起きたページフォルト例外と区別することが可能だ。

この機能を積極的に使ってよいものかどうか悩みどころ。 おそらく Reserved の maxhyaddr は物理メモリ空間が拡張されると増えて行くので、 いつかは消滅してしまうのだろうね…
9/8 (月)
歯科医院の数が多すぎる
最近、歯科医院の数が多すぎるという記事 を目にしたのだが、 偶然うちの近所に歯科医院が開業する。 元は小さな本屋だった。
元住吉のブレーメン通りはもともと4軒あるようで、 これで5軒目になる。 コンビニは3軒なので ブレーメン通りローカルでみても 記事中の (コンビニの数) < (歯科医院の数) になっている。 これほど歯科医院が多くてやっていけるのかしら?