dm-writeboostが, Phoronixで紹介された. http://www.phoronix.com/scan.php?page=news_item&px=MTQ1Mjg
8/14号のLWNでdm-lc(dm-writeboostの旧名)が紹介されてから(http://lwn.net/Articles/562938/)立て続けに, Phoronixでの紹介に辿り着いた.
Phoronix(http://en.wikipedia.org/wiki/Phoronix)というのは, LWNと同様に, Linuxの面白い動向について記事にしているサイトだ. LWNでは, こんな面白いパッチがあるというのみの紹介だったが, 今回は, その機能についてマイケルの言葉で紹介がなされている. これは大きな進歩だ. 嬉しい!楽しい!
次はLWNの本記事か. 必ず実現する. おれなら出来る. おれはふつうじゃない. ふつうの人間は麻布中学に入れない.
ふと, 昔のことを思い出してみた.
まず始めに, おれがふつりなの筆者に送ったメールだ. ユーザランドのインターフェイスについて疑問に思ったので, こう思うんだけどどうなのという質問をしている. おれは電気系なので, OSの授業はとっていない. だから, 会社に入った時にはカーネルというものがどういうものなのかも良く分かってなかった(詳しくいうと, Linux部というものに入りたいとは言ったが, そこがカーネルをやっているということは知らなかった. 何言ってるのか分からんと思うけどw). 何も分かっていなかったから, がむしゃらに駆け上って来れたんだなぁと思う.
ふつりなを読ませていただいて大変勉強になりましたが, 分からない点があったので質問します.
周りの人に質問しましたが誰も分からず, 困っています.
システムコールのreadではバッファリングは行わないが, stdioではバッファリングを行っているから, 「一気にどかっとファイルから内部バッファに保存してしまって」, そこから取得するので高速なのだ, という理屈は分かりますが,
では, バッファリングというのはいつ行われているのでしょうか? 例えば, 内部バッファのサイズをBUFSIZとして, fopenしたときには, ファイルの先頭からBUFSIZ長さをバッファリングして, freadの時にはそこから少しずつ出力して, バッファした以上のものが要求されたらさらにファイルから読み込むという仕組みですか?
それでは, fwriteについてはどうなのでしょうか? 十分に書くことが決まったらどかっと書く仕組みで高速化というのは分かるのですが, read用のバッファとwrite用のバッファを二つ持っているということでしょうか?
fseekについて疑問に思います. fseekされた時には, 以前のバッファは捨てて, またバッファに蓄えるのでしょうか? 例えば, BUFSIZバッファリングしてあるのに, 一つだけ右にシークした場合などは, バッファは解放されてまたBUFSIZをバッファリングという処理になるでしょうか? だとしたら, fseekしているのにバッファを十分に活用するような大きな処理をしないという場合は, パフォーマンスを損なうのだと思いますが, そういう時はsetbufでバッファを切りなさいということでしょうか?
それとも, freadやfgetsされた時に初めてバッファリングが行われるので, fseekではパフォーマンスを損なわないということですか? しかし, 常識的に考えると, fopenやfseekなど, ファイルが初期化された段階でバッファリングが行われるというのが設計としてふつうのように思います. だとすると, fopen初期化の時点で内部バッファの容量を決定する方法はないのでしょうか? 例えば, もし最初から先頭からBUFSIZ以上にところにシークすることに決まっているのであれば, fopenの時点でバッファリングしてしまうのは非常に無駄です.
以上です. よろしくお願いします.
次は, ruby-listに対して, ソフトウェア設計の質問をしている. 1回生の時にプログラミングを知って, 2回生の時にRuby入門して, オブジェクト指向というものについて自分なりに考えているうちに, 唯一の設計はどうやって探すのだという疑問がわいてきて, そこからすべてが始まった.
http://osdir.com/ml/lang.ruby.japanese/2007-12/msg00131.html
初投稿です。 名前はAkiraです。 漢字では輝と書きます。
今、オブジェクト指向について悩んでいて、 メソッドが他の「自作」クラスのメソッドをargumentにとって良いのか? と考えています。 Rubyは型がありません。 だから例えば
class My_Class_A def initialize(class_b) @class_b_instance = class_b end end
と書いて、class_bのインスタンスを初期化で持つ事にします。 しかし、ここで My_Class_A.new(“aaaa”) として、文字列を入れても、持ててしまいます。 これはちょっとおかしな事です。
もし、こういう書き方があるかは知りませんが、 class My_Class_A def initialize(My_Class_B class_b) @class_b_instance = class_b end end
という風にargumentの段階で強要すれば、 代入した時に「そりゃダメだよ」と教えてくれます。 これは筋が通っていると思いますが、
Rubyの場合、 1)インスタンスを使ううちに型が合ってない事が発覚する。 くらいしかエラーが出ないと思います。
そこで質問は、まず、 1)Rubyでクラスを作る時に、他のクラスのインスタンスをargumentにとる事が許されますか? 2)また、許される場合に、この少し奇妙な仕様は動的言語の仕様ですか? の2点でさせてもらおうと思います。
悩みのポイントにとてもセンスがあることが分かる. 「おかしい」「筋が通っている」という言葉を使っている. この男は天才だ. 特に, ソフトウェア設計に関しては, 尋常ではない. すごく向いてるという思いがある. おれよりセンスがあると思う人は, 迷わずソフトウェアの世界を突き進めばいいと思う.
(おまけ)
ところで, 魔王ヒラマットはどうなんだ!と思ってぐぐってみたら, 彼のin-kernel disassemblerが紹介されていた. http://www.phoronix.com/scan.php?page=news_item&px=MTA4MTI さすがにぬかりない. チッ・・・