トップページ⇒linux
986コメント359KB

☆Linux カーネルの仕組みを勉強するスレ☆

■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin01/10/02 17:44ID:38KkZsUQ
メモリ管理、プロセス、ファイルシステム色々ありますが
カーネル全般について語り合うスレッドです。
0147login:Penguin01/11/11 18:30ID:ZDELobu/
ごめん。すごく基本的なことがわからない。
n:mカーネルスレッドってなに?
0148login:Penguin01/11/12 12:37ID:IjOleHL1
>>147

実際に平行して走るスレッド数と、スレッド数が違う。
Linuxの今のカーネルスレッドの場合は、両方同じ。
0149login:Penguin01/11/12 17:24ID:IV1WKQEx
> つーか、ボランティアで開発するには手間と暇が・・・

んなことないっしょ。

Linux よりもよっぽど人手のなさそうな FreeBSD (KSE) とか、さらに
人手のなさそうな NetBSD (nathanw_sa) でも開発が進んでいるんだし。
問題は人手というよりも、Linux カーネル開発メンバーの石頭 (N:M スレッド
が大嫌いな奴が結構多い) じゃないの?
015014701/11/12 18:57ID:JAFYYv/Y
>>148
> 実際に平行して走るスレッド数と、スレッド数が違う。
> Linuxの今のカーネルスレッドの場合は、両方同じ。
いやそれは n:m のスレッドだよね。
カーネルスレッドは常に 1:1 では?
もしかしてスケジューラアクティベーションとかの話題?
0151login:Penguin01/11/12 19:14ID:JAFYYv/Y
スレッドの実装には3つあって
one-to-many ユーザー空間スレッド
one-to-one カーネルスレッド
meny-to-meny 上記のハイブリッド
だと思ってたんだけど俺の認識は間違ってるか?
Solalis なんかは meny-to-meny だよな。
その為にスケジューラアクティベーションのような複雑な仕組を持ち込んでる。
Linux 的にはそんな複雑なものを持ち込んで性能を出せるかどうか…
ってのがまずあるんだろう。SMP とのバランスも取らないといけないしな。
0152login:Penguin01/11/12 19:39ID:IV1WKQEx
> スケジューラアクティベーションのような複雑な仕組を持ち込んでる。

many-to-many 型がすなわち、スケジューラアクティベーションを意味する
わけじゃないよ。昔の Solaris では、スケジューラアクティベーション的
な実装はしてなかった。
で、昔の Solaris のやり方よりも、スケジューラアクティベーションの方が、
アイディアとしてはある意味シンプルだと思うな。

> Linux 的にはそんな複雑なものを持ち込んで性能を出せるかどうか…
> ってのがまずあるんだろう。

これが典型的な反応ですねえ… それが正しいかどうかは別だけど。

> SMP とのバランスも取らないといけないしな。

ここ意味わかんないなあ。バランスって何?
SMP と N:M スレッドって、トレードオフの関係にはないと思う。

>> 実際に平行して走るスレッド数と、スレッド数が違う。

「実際に並行して走る」ってのが何を意味しているか、ちょっと不明かな。
N:M スレッドってのは、ユーザランドスレッド M 個に対して、カーネルスレッ
ド N 個 (M >= N, N >= 1) を使うような実装のことです。
M == N だと 1:1 になっちゃうし N==1 だとユーザーランドスレッドになっちゃ
うけど、M > N とか N > 1 になりうるってところが違うところね。

蛇足:
s/Solalis/Solaris/
s/meny/many/g
0153login:Penguin01/11/12 19:57ID:JAFYYv/Y
>>152
> ここ意味わかんないなあ。バランスって何?
> SMP と N:M スレッドって、トレードオフの関係にはないと思う。

今のプロセスモデル(カーネルスレッド含む)で SMP をうまく使うようにデ
ザインされているスケジューラで n:m スレッドを使うにはまた手間がかかる
くらいのハナシ。

> 蛇足:
> s/Solalis/Solaris/
> s/meny/many/g

スマソ(照
0154login:Penguin01/11/12 20:08ID:JAFYYv/Y
>>139
> 実装されて欲しいのは。
> ・スケジューラのマルチメディア対応とマルチキュー化
なんか具体性に欠けるけどプリエンプトなスケジューラは今実装中だぞ。
> ・暗号化ファイルシステム
loop.c をハクれ
0155login:Penguin01/11/12 20:08ID:IV1WKQEx
> 今のプロセスモデル(カーネルスレッド含む)で SMP をうまく使うようにデ
> ザインされているスケジューラで n:m スレッドを使うにはまた手間がかかる
> くらいのハナシ。

そのためのスケジューラアクティベーションなのでは? スレッドのスケジュー
リングを、CPU の割り当ても含めてユーザーランドのスレッドライブラリで決
定できる (カーネルの実装で変な知恵を回す必要がない) というのがメリット
の一つなんだし。

あと、個人的に Linux のスケジューラはあんまり信用してないっす。
他の UNIX 系 OS と比べて、I/O intensive なプロセスに CPU が回ってこな
い傾向があると思う。(2.4 は調べてないので直ってたらスマソ)
0156login:Penguin01/11/12 20:21ID:JAFYYv/Y
>>155
> そのためのスケジューラアクティベーションなのでは? スレッドのスケジュー
> リングを、CPU の割り当ても含めてユーザーランドのスレッドライブラリで決
> 定できる (カーネルの実装で変な知恵を回す必要がない) というのがメリット
> の一つなんだし。

あーそうだった。前言撤回。

> あと、個人的に Linux のスケジューラはあんまり信用してないっす。

4.3BSDのスケジューラに毛の生えたようなモノだからね。
さすがに毎秒キューを再計算したりはしないけど。

> 他の UNIX 系 OS と比べて、I/O intensive なプロセスに CPU が回ってこな
> い傾向があると思う。(2.4 は調べてないので直ってたらスマソ)

キューの再計算をなるべく遅延させているからその点で違いが出てくるのかな。
0157login:Penguin01/11/12 22:59ID:IV1WKQEx
> キューの再計算をなるべく遅延させているからその点で違いが出てくるのかな。

検証したわけじゃないので、なんとも言えないんだけど、sleep_on() に
priority 引数がないあたりにも問題があるのかもしれない。
(例えば *BSD 系だと sleep/tsleep に priority 引数があり、I/O 処理が
完了した直後は優先度が上がる)

もしそうだとすると、I/O 処理に関わる sleep_on 呼びだしを全て直さないと
解決できない、構造的問題ってことに…
0158login:Penguin01/11/13 04:18ID:Rt2iJ7Br
素朴な疑問なんですが、スケジューラアクティベーションじゃなくて、M:Nスレッドを実装するって、どーやるでしょうか・・・。

あと、Linux的なら、とりあえず実装してみて、性能でなかったらまた考えるでいいんじゃないんですかね。
よく考えて実装するのは、*BSDにまかせたらいいのでは(笑)
だれかやんないんだろうか。
0159login:Penguin01/11/13 16:25ID:Istj8zje
>>158
だから、IBMのがあるって。
あれじゃだめなの?
0160login:Penguin01/11/13 16:52ID:MqzmFHkN
おたすけマンっす、あなたのさがひものは、ここっすかぁ〜。
http://www-124.ibm.com/developerworks/oss/pthreads/

Next Generation POSIX Threading

The goal of this project is to attempt to solve the problems associated with the use of the pthreads library on
Linux. It will add M:N threading capability and improve significantly on the POSIX compliance of pthreads on
Linux. This will allow significant performance improvements for all applications that make use of the pthreads
library, particularly on SMP machines. It will also enable Linux to provide threading services that are more in
line with the capabilities of the commerical Unix operating system such as IBM AIX and SGI IRIX.
0161login:Penguin01/11/13 17:50ID:lF+3mjBQ
>>159
う、失礼。上みてなかった・・・。

>>160
ありがとう。
0162login:Penguin01/11/13 20:00ID:/IBKTqGW
>>155
I/O Insentive ってどのレベルをいってるんだ?
もしかして tty すか?プ
0163login:Penguin01/11/13 20:09ID:36p1vksl
> I/O Insentive ってどのレベルをいってるんだ?

経験したのは、ネットワーク I/O。
なんか latency 的に性能悪いなあと思って調べたらそういうことだった。

> もしかして tty すか?プ

ん? その心は?
0164login:Penguin01/11/13 20:39ID:CaHKE6Ak
>>157
> 検証したわけじゃないので、なんとも言えないんだけど、sleep_on() に
> priority 引数がないあたりにも問題があるのかもしれない。

これはシステムコールの違いでしょう。
Linuxには他にいくつかシステムコールが追加されているよ。
0165login:Penguin01/11/13 20:42ID:36p1vksl
> これはシステムコールの違いでしょう。

ああ、理解されてない。;_;
いいけど。
0166login:Penguin01/11/13 20:53ID:CaHKE6Ak
>>165
> ああ、理解されてない。;_;

ん? よくわかんないんだけど。スリープ優先度がないってこと?
0167login:Penguin01/11/13 21:54ID:36p1vksl
> ん? よくわかんないんだけど。

そもそも sleep_on() ってシステムコールじゃないでしょ。

> スリープ優先度がないってこと?

そうっす。
スケジューラの方を直すのは別に難しくないんだけど、sleep_on() を呼び出
しているところを全部書き換えるのが果てしなく面倒そう。それとも比較的単
純な置き換えで済むからなんとかなるのかなあ。

ちなみに問題のシステムでは、CPU 食っているプロセスの方もシステムの一部
だったので、そっちで適度に sched_yield() することにして、問題を回避し
たっす。というわけで、自分で直そうというモチベーションは出ないのね。
0168login:Penguin01/11/13 22:28ID:CaHKE6Ak
>>163
> 経験したのは、ネットワーク I/O。
> なんか latency 的に性能悪いなあと思って調べたらそういうことだった。
I/O InsentiveってネットワークI/OやDiskI/Oにも高い優先度を割り振った方が
いいスケジューラなの? 俺はそう思わんけど。

>>167
> ちなみに問題のシステムでは、CPU 食っているプロセスの方もシステムの一部
> だったので、そっちで適度に sched_yield() することにして、問題を回避し
> たっす。というわけで、自分で直そうというモチベーションは出ないのね。
応答性が重要ならそもそもOSの選択に間違いがあったと思われ。
0169login:Penguin01/11/13 22:48ID:36p1vksl
> I/O InsentiveってネットワークI/OやDiskI/Oにも高い優先度を割り振った方が
> いいスケジューラなの? 俺はそう思わんけど。

うーん、うーん、うーん。頼むから OS の教科書ぐらい読んでくれー。

> 応答性が重要ならそもそもOSの選択に間違いがあったと思われ。

それって、Linux よりも、商用UNIX やら *BSD やらを勧めてるってこと?
該当システムってハードリアルタイム性は全く必要ないので、UNIX で十分なんだが。
0170login:Penguin01/11/13 22:56ID:CaHKE6Ak
>>169
> うーん、うーん、うーん。頼むから OS の教科書ぐらい読んでくれー。

ごめん。OS はほとんど自学なので基本的なことがわかってないかも知れない。
しかし多量のディスクI/Oや,遅いネットワークI/Oってのは短い応答時間が
必要だろうか? ってハナシ。

> それって、Linux よりも、商用UNIX やら *BSD やらを勧めてるってこと?
> 該当システムってハードリアルタイム性は全く必要ないので、UNIX で十分なんだが。
Solaris なんかを使えばプリエンプトできるからずっとよいと思うけど。
0171login:Penguin01/11/13 23:19ID:36p1vksl
I/O intensive なプロセスに優先的に CPU を与えることは、
システム全体の「スループット」(not only 応答性) も向上させるのよ。
これ常識。

まともなハードウェアなら I/O と計算処理は並列動作できるから (PC 用の
安物ハードウェアには、駄目なものも多いが)、こうした方がシステム全体の並
列性が上がるんよ。I/O intensive なプロセスに CPU が回ってこないと、
本来発行できる筈の I/O 要求が発行できないので、並列度が落ちるわけ。

> Solaris なんかを使えばプリエンプトできるからずっとよいと思うけど。

実はそのソフトウェアは、開発段階では Solaris と BSD でも動かしてたんだ
が (最終版は Linux のみ)、Solaris だけじゃなくて BSD でも問題なかったのね。
だから、これに関してはカーネルレベルでのプリエンプティブ性は必要ない。
Linux 版がなんか遅いなあと気づいたのは、比較対象があったせいなわけ。
0172login:Penguin01/11/13 23:27ID:cEWualST
>>171
でも、システム全体のスループットをあげるのが必ずしも良いとは限らないよね?
そうすると公平性が損なわれない?
0173login:Penguin01/11/13 23:46ID:36p1vksl
> でも、システム全体のスループットをあげるのが必ずしも良いとは限らないよね?

一般的にはスループットと応答性はトレードオフになることが多いからね。
でも、この件に限って言うと、スループットも応答性も両方とも向上する
ので、当てはまらない。

> そうすると公平性が損なわれない?

失われない。
sleep priority は、sleep から目覚めてからユーザーモードに戻るまでの間
しか適用されないから、もしそのプロセスが I/O するだけでなく CPU も沢山
使っている場合は、(sleep priority じゃない方の) 優先度が下がっているの
で、ユーザーモードに戻る時に、より優先度の高いプロセスにスイッチしてし
まうから。
0174login:Penguin01/11/14 00:00ID:BJD7Ro88
>>171
> I/O intensive なプロセスに優先的に CPU を与えることは、
> システム全体の「スループット」(not only 応答性) も向上させるのよ。
> これ常識。
ん〜じゃほとんどI/OせずCPUをガンガン使うタイプのプロセスはあまりCPUを
使えなくなるような気がするのだけど。
0175login:Penguin01/11/14 00:13ID:LEvOTgWY
2.2しか調査してないんなら、wake one が出来るようになった
2.4 で比較してみたら?
0176login:Penguin01/11/14 00:22ID:LEvOTgWY
しかし、良く読めば、kernel 2.2 でネットワークの
性能があんまし出てないって話だったのね。

2.4 ではカードによっては zero copy が出来るようになったし、
32bitマシンで64bitDMAのbounce buffer なしのデータのやりとり
とかもできるようになってきてるし、ソフト開発で今更 2.2
がターゲットというのもどうかとおもわれ。
0177login:Penguin01/11/14 00:46ID:IRaPmSaY
> ん〜じゃほとんどI/OせずCPUをガンガン使うタイプのプロセスはあまりCPUを
> 使えなくなるような気がするのだけど。

その通り。UNIX のスケジューラは、どれも基本的には、こうなっているよ。
Linux だってそう。嘘だと思ったらスケジューラのソースを読んでくれ。
ところが、基本的にはそうなっている筈なのに、なぜか CPU intensive な
プロセスが CPU を掴んで離さないことがあるのが変だって話をしてるわけ。
その原因として Linux に sleep priority がない (他の UNIX には、全て
ある) ことを疑っているんだけど、本当にこれが原因なのかどうかは実は
検証したわけじゃないので良く分からない。濡れ衣かもしれない。

あと、今回の件は wake one とか zero copy とか bounce buffer なしとか
は、たぶん関係ないよ。どうしてそう想像できるかは、
・使ったハードは、今どきの Intel CPU に Intel EtherExpress PRO
・CPU intensive なプロセスと I/O intensive なプロセスがそれぞれ 1 つ
ずつでも発生した
・Linux と Solaris や BSD を比べた
・少なくとも直接の原因はスケジューリングにあった
ってことから導けるんだけど、面倒だからこれ以上の説明は省略。
これだけ書いとけば、あとは自分で考えれば分かる筈だからね。
0178login:Penguin 01/11/14 00:47ID:jil2no7j
ちょっと勉強したいのでSolarisのソースコードをMXに載せてくれないかな?
もうソース公開おわっちゃったみたいなので。
UNIX板だと煽られそうだからここの有志に期待。
0179login:Penguin01/11/14 01:02ID:cZfNRmC/
ライセンス違反じゃん
0180login:Penguin01/11/14 01:06ID:jil2no7j
まぁそうかたいこといわずに・・
0181login:Penguin01/11/14 01:45ID:BJD7Ro88
>>177
> その通り。UNIX のスケジューラは、どれも基本的には、こうなっているよ。
> Linux だってそう。嘘だと思ったらスケジューラのソースを読んでくれ。
つーか良いスケジューラかどうかってハナシをしてるんだけど。これでいいの?
0182login:Penguin01/11/14 02:18ID:IRaPmSaY
> つーか良いスケジューラかどうかってハナシをしてるんだけど。これでいいの?

良いからこうなってるんだ YO。
そんなに疑わしいなら、君の考える理想のスケジューリングと、それが既存の
スケジューリング戦略と比べて、どう優れているかを、ここで提案してごらん YO。
0183login:Penguin01/11/14 03:05ID:BJD7Ro88
>>182
> そんなに疑わしいなら、君の考える理想のスケジューリングと、それが既存の
> スケジューリング戦略と比べて、どう優れているかを、ここで提案してごらん YO。

やはりCPUバウンドとI/Oバウンドなプロセスがバランスよく動くことが理想だ
と思うわけ。画像のレンダリングとかをやるならCPUバウンドの方を優先した
方がいい。SVR4なんかはI/Oでなくて「イベント」でプライオリティを増減し
ているらしいけどこういう戦略の方が今っぽくはないかというハナシ。

例えばLinuxのsched.cなんかを読むと以前実行したプロセスとメモリを共有し
ているプロセスの優先度を上げるようになっているけどこういうのは駄目なの?

あと前も言ったけどLinuxのスケジューラは毎秒キューを再計算してないので
(再計算するのは全ての実行可能プロセスがカンタム時間を使いつくした時だ
け)プロセスが多くなると設定しなおす頻度が下がるからレイテンシが下がる
んだろうと思ったんだけど。こういうのも毎秒計算するよりはアリだと思う。

まぁ問題と言えば問題なんだけどそれはスケジューラのクセであって信用に値
するかしないかという問題ではないと思ってるんだけどどう?
0184login:Penguin01/11/14 08:20ID:BJD7Ro88
おはよう
>>177
> その原因として Linux に sleep priority がない (他の UNIX には、全て
> ある) ことを疑っているんだけど、
他のUnixはスリープ優先度でI/O intensiveを実現してるんだけどLinuxの場合は
違う方法でそれを実現しているってのもクセを作ってる一因だと思う。
> あと、今回の件は wake one とか zero copy とか bounce buffer なしとか
> は、たぶん関係ないよ。どうしてそう想像できるかは、
俺も関係ないと思う。つーわけで出勤だよヽ( ´ー`)丿続きはまた今夜。
0185login:Penguin01/11/14 19:55ID:IRaPmSaY
> やはりCPUバウンドとI/Oバウンドなプロセスがバランスよく動くことが理想だ
> と思うわけ。

I/O バウンドなプロセスを優先して動かすと、バランスよく動くようになるん
だよ。I/O バウンドなプログラムは、名前の定義からして CPU はそんなに使
わない、CPU を掴んでもすぐに手放すんだから、優先的に CPU を回してやっ
ても全く何の問題ないんだよ。

> 画像のレンダリングとかをやるならCPUバウンドの方を優先した方がいい。

違うよ。CPU intensive なプロセスを優先すると、正帰還が起きて CPU を消
費しないプロセスには決して CPU が割り当てられないという致命的な状況が
発生するでしょ。対話的なプログラムなんかは、ほとんど入力待ちにいてCPU
を使わないから優先度が下がって、優先度の高い CPU intensive なプロセス
が終了するまで決してスケジュールされないことになる。つまり、ほとんどシ
ングルタスク OS 状態、しかも対話的なプロセスが常に一番後回しにされてし
まうという。そんな OS 決して誰も使わないよ。
もし信じられないなら、p->couter が大きい方を優先する代わりに p->counter
が小さい方を優先するように goodness() を書き換えて試してごらんよ。そん
なことをしなくても、ちょっと考えれば分かる筈だと思うんだが。

> 他のUnixはスリープ優先度でI/O intensiveを実現してるんだけどLinuxの場合は
> 違う方法でそれを実現しているってのもクセを作ってる一因だと思う。

これも違うなあ。I/O intensive なプロセスが優先されるのは、基本的にはそ
ういうプロセスが CPU を使わない (Linux の実装の言葉で言うと、
p->counterの値が大きい) からだよ。これは、Linux 以外の UNIX でも変わら
ない。Linux の異なる点は、他の UNIX が持っているもう一つの仕組み (スリー
プ優先度) を持ってないことであって、Linux 独自の特別な仕組みで I/O バ
ウンドなプログラムを優先させているわけじゃない。

あと、気になっているんだけど、Linux のスケジューラを、4.3BSD のスケジュー
ラに毛が生えたって表現するのは、かなり違うと思うな。ラウンドロビン以外
の優先度クラスがあるって意味では毛が生えているけど、逆に抜けている毛も
大きいと思うよ。ロードアベレージを勘案した decay なんてのは、すっぽり
抜け落ちてるでしょ。
0186login:Penguin01/11/14 21:32ID:BJD7Ro88
>>185
> を使わないから優先度が下がって、優先度の高い CPU intensive なプロセス
> が終了するまで決してスケジュールされないことになる。つまり、ほとんどシ
> ングルタスク OS 状態、しかも対話的なプロセスが常に一番後回しにされてし
> まうという。そんな OS 決して誰も使わないよ。

だからバランスよくと表現したんだけど。LinuxはPC用OSだよ?
DVDとか見るときとかどうするのさ。これってほとんどCPUバウンドなプロセスだよ。
ゲームとかもそうかもね。

こんなもんでいいやと手を打った結果だと思ってるんだけど。

なんでここまで粘着かというとオライリーの「LINUX カーネル」のP330に
「I/Oバウンド型プロセスを優先する仕組は万能ではない」
という節があるから。俺もこれを見て納得してたんだけどそうではないという。
それで混乱しているわけさ。

> もし信じられないなら、p->couter が大きい方を優先する代わりに p->counter
> が小さい方を優先するように goodness() を書き換えて試してごらんよ。そん
> なことをしなくても、ちょっと考えれば分かる筈だと思うんだが。

それって優先度が逆転してるじゃん(笑)

> あと、気になっているんだけど、Linux のスケジューラを、4.3BSD のスケジュー
> ラに毛が生えたって表現するのは、かなり違うと思うな。ラウンドロビン以外
> の優先度クラスがあるって意味では毛が生えているけど、逆に抜けている毛も
> 大きいと思うよ。ロードアベレージを勘案した decay なんてのは、すっぽり
> 抜け落ちてるでしょ。

こういう部分はLinuxの各所に見られるね。アルゴリズムをシンプルにするこ
とによって速く動かそうという感じ。VM とか。その代わり必要だと思ったら
ガンガン詰め込む。スケジューラの件も kernel-ml あたりでプリエンプティ
ブなスケジューラのパッチが流れてきてるんでそのうち入るのではないかな。

そういや君の案件ってリアルタイムプロセスにして動かすという手はなかったの?
0187login:Penguin01/11/14 22:18ID:IRaPmSaY
> だからバランスよくと表現したんだけど。LinuxはPC用OSだよ?
> DVDとか見るときとかどうするのさ。これってほとんどCPUバウンドなプロセスだよ。

それこそ、リアルタイム・スケジューリングを使うべきアプリケーション
じゃないの? 今はカーネルが、どう優先度を自動的に推測すべきかって
話をしているわけでしょ。リアルタイム・スケジューリングの場合、
ユーザーが指定した優先度が固定的に使われるんだから、そもそもそういう
問題は発生しないよ。

> なんでここまで粘着かというとオライリーの「LINUX カーネル」のP330に
> 「I/Oバウンド型プロセスを優先する仕組は万能ではない」
> という節があるから。俺もこれを見て納得してたんだけどそうではないという。
> それで混乱しているわけさ。

え? その記述は正しいよ。
俺は、ベストだとは言ったかもしれないけど、万能だなんて言ってないけどな。
カーネルの行う優先度の推測は、所詮推測に過ぎないんだから、向かない
応用はあるし、だからこそリアルタイム・スケジューリングとかが必要に
なるわけでしょ。
でも、TSS 用の優先度変動型スケジューリング・ポリシーとしては、I/Oバウ
ンド・プロセスを優先させる以外に良いやり方はないと思う。というか、CPU
バウンド型プロセスを優先させたら、取り返しのつかないことになる。

> > もし信じられないなら、p->couter が大きい方を優先する代わりに p->counter
> > が小さい方を優先するように goodness() を書き換えて試してごらんよ。そん
> > なことをしなくても、ちょっと考えれば分かる筈だと思うんだが。
>
> それって優先度が逆転してるじゃん(笑)

そう。君の主張していた、TSS スケジューリングにおいて CPU バウンド型
プロセスを優先させるっていう方針は、つまるところ、そういう意味なわけ。
やっと分かったかな。

> こういう部分はLinuxの各所に見られるね。アルゴリズムをシンプルにするこ
> とによって速く動かそうという感じ。VM とか。その代わり必要だと思ったら
> ガンガン詰め込む。

この、必要だと思ったらってところの判断基準に納得いかない点があるんだよなあ。
今回の応用の場合は作り込みで問題を回避できたけど、一般論としては回避で
きないこともあると思うんだが。

> スケジューラの件も kernel-ml あたりでプリエンプティブなスケジューラ
> のパッチが流れてきてるんでそのうち入るのではないかな。

プリエンプティブ化と この件は、関係ないのでは?

> そういや君の案件ってリアルタイムプロセスにして動かすという手はなかったの?

リアルタイム・プロセスにするにはルート権限いるでしょ。
この特定の問題のためだけに setuid root にするよりは、sched_yield() で
スケジューラの変な挙動を回避する方が、マシな解決策だと判断したわけ。
0188login:Penguin01/11/14 22:43ID:BJD7Ro88
>>187
> それこそ、リアルタイム・スケジューリングを使うべきアプリケーション
> じゃないの?
Unix的にはそうかも知れない。しかしLinuxはそういうプロセスにもCPUを割り振る
ようなスケジューラに*結果的*になっている。だからこの辺でいいんじゃないか
と手を打ったように見えるわけさ。それをクセと書いたわけ。

> この、必要だと思ったらってところの判断基準に納得いかない点があるんだよなあ。
> 今回の応用の場合は作り込みで問題を回避できたけど、一般論としては回避で
> きないこともあると思うんだが。
必要だと思ったらというより必要だと思ってパッチを出せる人がいたらってことかな。
却下されることはあまりないよね。

> > スケジューラの件も kernel-ml あたりでプリエンプティブなスケジューラ
> > のパッチが流れてきてるんでそのうち入るのではないかな。
>
> プリエンプティブ化と この件は、関係ないのでは?
あ。ごめん。>>154 の件。
0189login:Penguin01/11/14 23:16ID:IRaPmSaY
> しかしLinuxはそういうプロセスにもCPUを割り振るようなスケジューラに*
> 結果的*になっている。だからこの辺でいいんじゃないかと手を打ったよう
> に見えるわけさ。

これを、Linux のスケジューラのクセであって許容範囲内であると考えるか、
UNIX 古来の知恵を無視して手を抜いてるから信用できないって考えるかって
違いなんだよなあ。俺は old type、oldtimer だから、よく知られている筈の
知恵が使われてないのをみると、結構ガックリくるのね。
まあ、無視しても何の問題も出ないのなら、そういうのもありなわけだけど、
現実に、こっちとしては手間がかかってるわけだし。

> 却下されることはあまりないよね。

たとえば crashdump と kernel debugger が標準カーネルにいまだに入ってな
いのは、納得いってない。そりゃ Linus が必要としてないのは分かるが、
顧客に対してカーネル保守サービスを提供している場合には要るんだけどなあ。
0190login:Penguin01/11/15 01:29ID:L5cES50v
>そりゃ Linus が必要としてないのは分かるが、
>顧客に対してカーネル保守サービスを提供している場合には要るんだけどなあ

そりは君のお仕事では?
0191login:Penguin01/11/15 02:42ID:mJoL8gKI
>>189
> これを、Linux のスケジューラのクセであって許容範囲内であると考えるか、
> UNIX 古来の知恵を無視して手を抜いてるから信用できないって考えるかって
> 違いなんだよなあ。俺は old type、oldtimer だから、よく知られている筈の
> 知恵が使われてないのをみると、結構ガックリくるのね。
シンプルで高速にってのがLinuxのモットーだしね。VM論争だってRikのロバスト
なVMよりAndreaの高速なVMの方が採用されてしまった。まぁそれもアリだとう思う。
既存のUnix的なものを求めるのならLinuxは向かないのかも知れない。
0192login:Penguin01/11/20 10:07ID:VDFNCHJf
質問です。
Linuxのソースコードの中で読むと勉強になるファイルを紹介してください。
個人的にはlist.h、ghash.hが大変為になりました。
0193login:Penguin 01/12/07 04:50ID:pUngVfZJ
マルチメディア対応ってよく言われるけど、
スケジューラのどこをどう換えればよくなるの?
0194生徒A01/12/07 12:06ID:Gi93BTz7
懐かしいスレageたな.

>193 リアルタイム化ってことでいいんじゃない? 具体的には,
カーネルプリエンティブにして優先度付きスケジューラ(Linuxで
言う優先度とはちょっと違う)を搭載すればマルチメディア対応で
いいのかな.

優先度継承機能とかもいるね.
0195縞栗鼠(シマリス)の親方01/12/07 12:19ID:ohUthW+y
中央高等学院の従業員「西部」が女子トイレに闖入し
汚物入れを物色して女子生徒の使用済みタンポン・ナプキン等を
個人的に収集しているというのは事実。

中央高等学院では
生徒及びその保護者の個人情報を名簿図書館等に売却しています。

中央高等学院
http://www.chuo-school.ac/
http://chs-f.com/index.html 中央高等学院福岡校
0196login:Penguin01/12/11 19:44ID:PbCyuzo0
> 優先度継承機能とかもいるね.

割り込み処理に優先度をつけるのも必要でしょ。
割り込み処理を、優先度付きのスレッド化するってのでもいいけど。
0197login:Penguin01/12/12 20:53ID:VRHOlTvG
『詳細 LINUX カーネル』
買った age 。
0198login:Penguin01/12/12 21:32ID:6ixMAsTN
>>197
ずいぶん前に買ったけど、まだ読んでないや。
細かいけど詳細ではなく詳解です。

#それじゃあLinuxJapan 10月号と同じ間違いだよ。(w
019919701/12/12 21:50ID:VRHOlTvG
>>198
やっちゃった…。 訂正ありがとう。
0200login:Penguin 01/12/13 04:48ID:GDrY1kNC
おれも今同じの読んでる。
これとソースコードをつき合わせてるから、
年内かかりそうなかんじ。
がんばりましょう!
0201login:Penguin01/12/13 07:24ID:nHHZmC7z
本屋に行って実物見ると、禿厚だったのでウトゥ。
あんなのいつ読み終わるやら…。
現在、1章読み終わる!
残りページ見てまたウトゥ。

ま、ゆっくりと行きますか。
がんばりましょう。
0202login:Penguin01/12/13 07:26ID:nHHZmC7z
なんとなく。

『速読ってどう?』
http://ebi.2ch.net/test/read.cgi/rikei/969547091/l50
0203login:Penguin 01/12/13 07:31ID:GDrY1kNC
モノホンのハッカーはソースを読むのが早いね。
もうあっという間に理解してたりする。
あういった技能は本を速読するのとは
また別の能力の気がするよ。
0204login:Penguin01/12/13 17:28ID:3ZNfl0lP
でも『詳細 LINUX カーネル』ってカーネル2.2対応でしょ?
2.4もあまり変わりないの?
0205login:Penguin01/12/13 19:35ID:P41LkMkd
>>204
執筆の時点の安定版カーネルが、 2.2 だったらしい。
でも、初版が 2001 年 7 月だから、本としては
カナーリ新しいんじゃなかろうか。
漏れなんかには違い分からないだろうし…。
0206login:Penguin01/12/13 20:20ID:jXJ+WFgy
大まかな構造とかは同じだろうけど、
詳細な部分が違うだろうから本の趣旨からすると…
0207login:Penguin 01/12/13 20:35ID:GDrY1kNC
>>204
一応各章の最後に2.4.*のことについて書かれてる。
ほんの少しだけど。
>>205
原書は2001/1って書いてある。ってことは発売されたのは去年かな?
>>206
もとのタイトルには詳解なんて言葉はないです。日本のオライソーが
勝手につけた言葉です。

この本の目的はカーネルのソースを読めるようにすること
って書いてあるから、本だけ見て細部を隈なく理解できるように
なると期待するほうが間違ってると思う。
0208login:Penguin 01/12/14 09:22ID:pLOVOTkt
マルチメディア用のIOとは何ですか?
特別にシステムに関数とかを用意したりするんでしょうか?
0209login:Penguin 01/12/24 12:51ID:UsKcZqV7
パラダイムシフトはまだですか?
0210login:Penguin01/12/29 11:32ID:QLo22gE5
デバイスにアクセスするには
/dev以下のノードを介する方法しかないのでしょうか?
よろしくお願いします。
0211login:Penguin01/12/29 12:03ID:mYAbtgDl
>>210
/dev 以下以外にもデバイスファイルは作れます。
man mknod
0212login:Penguin01/12/29 12:19ID:4LQmsDwQ
他のマシンの/devをNFSマウントして、そこの/dev/hdcとかを直接
フォーマットとかしようと思ってmke2fsとかやったら
自分のところのマシンをフォーマットしちゃったわけよ。

デバイスファイルって結局そこにあるメジャー番号とかマイナー番号
とかしか参考にしないわけで、誰のものかなんて考慮してないよね。
(かならず自分のデバイスだと思ってる)

たしかネットワーク経由で他のマシンのデバイスを直接操作する
機能というか仕組みがあったと思うんだけど、なんて名前だっけ?
0213login:Penguin01/12/30 00:17ID:5UM9dPtt
>>210
最近はデバイスファイルでは扱いにくいハードが増えたから
(マルチメディア系・プラグアンドプレイ)
なんで、デバイスファイルじゃなくて、
そのハードを扱うシステムコール作って、
システムコールであつかうのもいいんじゃないかな?
0214login:Penguin01/12/30 00:30ID:vlB/mJ24
ネットナンパ必勝法を格安販売中!


出会いを求める男性へ!!


http://chevy.sites.cc/
0215login:Penguin01/12/30 00:55ID:L5DsFMps
みなさんレスありがとうございます。

>そのハードを扱うシステムコール作って、
>システムコールであつかうのもいいんじゃないかな?

これはカーネルに手をつけるということですよね。
そこまでしなければデバイスファイルを経由しないといけないという事でよろしいのでしょうか?
0216login:Penguin01/12/30 02:50ID:FBPpTPsC
>>212

>他のマシンの/devをNFSマウントして、そこの/dev/hdcとかを直接
>フォーマットとかしようと思ってmke2fsとかやったら
>自分のところのマシンをフォーマットしちゃったわけよ。

最初UNIX Kernelをわかってないなぁって思ったんだけど、でも、確かにネットワーク越しに相手のデバイスファイルを触るという発想はちょっと面白いかも。
Kernel側がどう一貫性を維持しようとするかが問題だけど。
021721201/12/30 03:07ID:UzGpkVqi
>>216
ネットワークブロックデバイス というのがあるみたいッスね。
(ようやく名前がわかったですよ)

カーネル2.2にもあるみたいなんだけど試すのおっかないなぁ
0218login:Penguin02/01/01 12:59ID:fIVu4F/o
カーネル空間とユーザー空間というのは頻繁に交代されているのですか?
また交換するには具体的にどのような過程を通しているのでしょうか?
お願いします。
0219login:Penguin02/01/01 20:33ID:BcEtv31+
しょっちゅう切り替わっているよ。切替えのタイミングは
ハードウェアによる割込み、ソフトウェア割込み (システムコールはこれ)、
モード切替え用の命令、メモリ保護違反、不正な命令の実行、等いろいろ。
まずは JF の
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel.html
読んで勉強しな。
0220login:Penguin02/01/01 20:57ID:fIVu4F/o
ありがとぅ
0221login:Penguin02/01/05 15:23ID:7OyjHkMf
カーネル初心者です。
以下の本は買う価値あるでしょうか?
実習Linuxカーネル 理論と実習カーネルを効率的に理解するための実習書
出版社名 : ピアソン・エデュケーション
0222login:Penguin02/01/06 03:54ID:Dq18r+Gi
っていうか、お前らLinuxカーネルの解析に役立つツール
カキコしてください。

とりあえず、global
0223login:Penguin02/01/06 03:56ID:I+MzFQ0/
>>222
grep
0224login:Penguin02/01/06 04:06ID:Yl828KDR
>>222
echo, printf
0225login:Penguin02/01/06 04:18ID:OZczuKpf
printk
0226login:Penguin02/01/06 04:51ID:QV/kUS0W
http://www.vogue.is.uec.ac.jp/~koike/papers/bit/vlinda.gif
↑こんな感じでLinuxカーネルを激しいインパクトと共に
表示してくれるツールないのか?
0227TOM02/01/06 05:29ID:VAV/Hk1R
インストール済みのlinuxでwindows同様にIPアドレスとサブネット
マスクを設定したいのですが、どのようにやればいいのでしょうか?
0228TOM02/01/06 05:31ID:VAV/Hk1R
すみません書くところ間違えました(m--m)。
0229global02/01/06 07:29ID:6O0PvUPf
cd /usr/src/linux
gtags
htags
って何時間ぐらいかかりますか?

5時間動かしてて、まだ、終らないんですけど。
0230login:Penguin02/01/07 02:12ID:9E3jZ+kY
っていうか、お前らglobalのオプションカキコしてください。
とりあえず、

htags -aF
-a:英字インデックス
-F:フレーム対応

linux2.4.17、Pen�V733で4時間ぐらいだった気がする。
023122902/01/07 20:12ID:hX8x2Oiv
再挑戦して半日経ちますが、まだgtagsが終りません。
linux2.4.17をPentium3 500でやってます。

よかったら
GPATH
GRTAGS
GSYMS
GTAGS
のサイズ教えてください。
僕のは今のところ
2 MB
92 MB
13 MB
19 MB
で、GSYMSがちょっとづつ増えています。

sortが遅いのかな?(2.0.16)
0232login:Penguin02/01/09 14:16ID:YpXVFRRT
task_struct構造体とproc構造体の違いと役割を教えてください。よろしくお願いします。
0233login:Penguin02/01/11 10:22ID:aBKMHgnQ
ISAボードのデバイスの自動検出ってどうやってやってるんですか?
やっぱり片っ端からチェックしてるだけなんでしょうか?
0234login:Penguin02/01/11 22:24ID:VauQghNo
interfaceでLinuxのデバイスドライバーの特集やってたね。
みんな買って読んでる?
0235login:Penguin02/01/11 22:34ID:OhKVZ3uP
デバドラのデバッグ方法がわかりやすくてベネ
0236login:Penguin02/01/11 22:43ID:J9+ERyxt
>>233
個々のドライバの初期化処理で、ありそうなアドレスを片っ端からチェックしてる。
0237デフォルトの名無しさん02/01/12 21:54ID:Osm3xSog
http://pc.2ch.net/test/read.cgi/os/996204956/27-
0238SsS02/01/13 16:44ID:1HgPfsgv
>234
デバックにprintfk を使うってほんと???
0239login:Penguin02/01/13 17:17ID:ften7Xof
>>238
ほんとう
0240セマフォ02/01/13 22:51ID:byNjLBNZ
セマフォについてわかりやすく実装方法を教えて!
0241デビットカトラー02/01/13 23:12ID:byNjLBNZ
Linux のスケジューラは、どのプロセスを走らせるかを一つのファイルの中で処理しているおもしろいプログラムだから。

といいますが、具体的にどのファイルで処理しているのでしょうか?
0242login:Penguin02/01/13 23:30ID:QSg7wIlW
>>241 SDのインタビュー記事からか?
linux/kernel/sched.o だろ(藁
ソースコードはlinux/kernel/sched.c だな
0243super02/01/14 00:12ID:d6cd8xHD
デバイスドライバを作るということは
open やclose などに対応したデバイス独自の関数を
作成しそれらへの関数ポインタをひとまとめにしたテーブルを
作成するということ
といいますが、
もうすこし、わかりやすく説明してください
0244login:Penguin02/01/14 00:34ID:/7fIIVht
qsort(3)は、第三引数に関数へのポインタをわたすよね。
これは「比較を行う関数」というものをqsort本体からは
抽象化して、実装は別にしているわけだ。

同様に、あるキャラクタディバイスに対してread()やwrite()
を行った際の動作を、カーネルが扱う際に抽象化する為に
関数へのポインタを渡すことで実現している。
0245login:Penguin02/01/14 01:00ID:HmpJulBQ
>>240
semaphoeで検索すれば、いくらでもヒットするんでは?
もしかして、test and set命令とか、そのレベルから
教えてという話?
0246login:Penguin02/01/14 01:24ID:qUNfVGwW
semaphore
■ このスレッドは過去ログ倉庫に格納されています