探検


SGI KDBを使ったカーネルデバッグスレ

■ このスレッドは過去ログ倉庫に格納されています
1名無しさん@お腹いっぱい。
垢版 |
NGNG
カーネルデバッグの話はここで存分にどうぞ
NGNG
Windows厨房なのかLinux厨房なのかどっちがどっちかを装ってるのか
全然分かんなくなってきたな>荒し

1は、最初のWin2kトラブルシュートスレがアホ丸出しだったから、
イメージが悪いんだよな。それと、他スレにまで
「オリジナルスレの1」なんてハンドル付けてスレ汚してくれるな。
1が来ると必ず不毛な煽り合いになるしな。
必要以上に突っかかるのは止めて欲しい。
イタイユーザーなんてLinuxにでもWinにでもいるんだから。
(居ないとは言わせない。すぐそこらにいるからな。)
そのおかげで関係無いユーザーにまで迷惑かけてるのは事実。
荒しと言われてもしょうがない。

その他、このスレでの話は有益だし、
他のスレでも節度を持ってWinのお話をしてもらいたい。
これはLinux板の1住人としてのお願いなんだけど。
89login:Penguin
垢版 |
NGNG
>>88
ただの暇な人だと思うよ。

・・というか、これもコピペか? コピペニマジレス、カコワルイ?
90login:Penguin
垢版 |
NGNG
>>88
余も全くもってその通りと思う。Linuxは闘争の為に作られた物ではない。
余がWindowsの話をした途端にWin厨房と爆撃を貰うのは全く持って憤慨極まるものである。

我が犬達よ。おとなしくするがよい。
NGNG
荒らしの犯人はこいつだと思うぞ。
このスレの1の特徴は
・粘着
・下手くそな自作自演
・Win2Kは安定しているという信条
・M$への絶大な信頼
・Winのデバッグやドライバに関する知識
・書き込み日時からしてヒッキーか学生

いろんなスレでWin擁護をしてバッシングされたり無視されたり
した奴だ。
でこいつが今度はUnix板で
「UNIX版に立てるUNIXトラブルシュートスレッド」
を立ててわざとらしく8で登場している。
スレを立てたのが05/26(土) 22:25から8の発言の2001/05/27(日) 06:06

Linux版に立てるWin2Kトラブルシュートスレッド
 http://cocoa.2ch.net/test/read.cgi?bbs=linux&key=989048022
SGI KDBを使ったカーネルデバッグスレ
 http://cocoa.2ch.net/test/read.cgi?bbs=linux&key=989748178
NGNG
1 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/27(日) 23:06
Linux厨房が一杯釣れました


2 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/27(日) 23:08
もっと魅力的なスレを考えろ。


3 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/28(月) 00:16
釣られage


4 名前:hanajan_特科連X 投稿日:2001/05/28(月) 00:25
今日から仕事です


5 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/28(月) 00:29
そういえば昨日、今日と一人で荒しまくって
誰にもまともに相手して貰えてないのに、
釣れた釣れた、と言ってる可哀想なWin厨房が
いた気がするんだけど、気のせい?
NGNG
ちょっと刺激すると神経過敏なLinux厨房が無差別攻撃してくれるから、この板はとても荒らしやすい。尋常じゃないというか、単純というべきか。Win厨は嫌いだ!と主張するLinux厨房が私の思惑通りに動いて、Linuxユーザー同士気分の悪い思いをする方向に自体が簡単に転がっていく。便利な人たちだね、Linux厨って。これからも頑張って初心者の立ち入りを許さない刺々しい最悪の雰囲気を作り出してくれ。

このカキコにもたっぷりと負け惜しみのレスがつくだろうけど、そいつらが私の思惑通りに動いてくれる犬たちだ :p
94login:Penguin
垢版 |
NGNG
我が犬>>91よ。それは削除要望に書きたまえ。
NGNG
ちょっと刺激すると神経過敏なLinux厨房が無差別攻撃してくれるから、この板はとても荒らしやすい。尋常じゃないというか、単純というべきか。Win厨は嫌いだ!と主張するLinux厨房が私の思惑通りに動いて、Linuxユーザー同士気分の悪い思いをする方向に自体が簡単に転がっていく。便利な人たちだね、Linux厨って。これからも頑張って初心者の立ち入りを許さない刺々しい最悪の雰囲気を作り出してくれ。

このカキコにもたっぷりと負け惜しみのレスがつくだろうけど、そいつらが私の思惑通りに動いてくれる犬たちだ :p
NGNG
ちょっと刺激すると神経過敏なLinux厨房が無差別攻撃してくれるから、この板はとても荒らしやすい。尋常じゃないというか、単純というべきか。Win厨は嫌いだ!と主張するLinux厨房が私の思惑通りに動いて、Linuxユーザー同士気分の悪い思いをする方向に自体が簡単に転がっていく。便利な人たちだね、Linux厨って。これからも頑張って初心者の立ち入りを許さない刺々しい最悪の雰囲気を作り出してくれ。

このカキコにもたっぷりと負け惜しみのレスがつくだろうけど、そいつらが私の思惑通りに動いてくれる犬たちだ :p
NGNG
試してみたら、Linuxが落っこちちゃった。シクシク
誰か解説きぼーん。
------

main(){while(fork());}

でテーブルをいっぱいに出来てしまうのはかわらない。
しかもこれ、一般ユーザでシステムダウン可能なんだよ。
これをなんとかしてほしい。

rootでのメンテ用にプロセステーブルを少しだけあけておくことができれば
killできるんだけど・・・

------
9855
垢版 |
NGNG
>>97
だからシステムがおかしくなるよーってゆったじゃーん

解説しよう!(タイムボカンシリーズ風に)
fork() でプロセス生成します。
戻り値は子プロセス側は0、羽美の親プロセスの方はプロセスIDが
帰ってきます。
で、子プロセス側はwhileを抜けて終了するんだけど
親の死に目を見るまでは我慢するのでゾンビになります。
親は親でwhileを抜けないので子供を大量生産。

このときプロセスを生成してるからカーネルはプロセステーブルに
プロセス番号をメモっていきます。
で、そのテーブルは大きさが決まってるので(2.2.xなら1000くらい)
1000回くらいループしたらもう書く場所無いのでギブアップ。
(でもfork()は-1だかのエラーを返すので無限ループは続く)
プロセステーブルがいっぱいになるとプロセスが作れないので
lsもうてないしpsもうてない。当然killなんてもってのほか!
NGNG
帰ったらちょっと見てみるけど、こういうのってポリシーの問題なんだよね。
OSとして例外処理を認めずどうにもならない状態まで突っ走るか、
なんらかの例外処置を設けて抜け道を作っておくか。
まあ、うまい制限を設けられるか見てみましょ。
NGNG
11 名前: login:Penguin 投稿日: 2001/05/31(木) 04:35

   .'⌒⌒丶
_ ′从 从)_  もう寝る
| __ヽゝ・_・ν  |
|\ ⌒⌒⌒⌒⌒\
|  \         \
\  |⌒⌒⌒⌒⌒|
  \ |_____|
NGNG
>>98
ユーザが生成できるプロセスMAX数が設定できないの?
MagicKeyでも殺せないの?
NGNG
>>98
ソースを見てみてデバッグしてみた。101が正しいな。
fork.cのdo_fork関数に以下のようなコードがある。
  retval = -EAGAIN;
  if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur)
    goto bad_fork_free;
  atomic_inc(&p->user->__count);
  atomic_inc(&p->user->processes);
でp->userはsched.hを見るとuser_structだから、user_structの定義を見ると
これもsched.hにある。
struct user_struct {
  atomic_t __count;   /* reference count */
  atomic_t processes;  /* How many processes does this user have? */
  atomic_t files;    /* How many open files does this user have? */
  /* Hash table maintenance information */
  struct user_struct *next, **pprev;
  uid_t uid;
};
これらよりコメントを見れば分かるけどprocessesはこのユーザコンテキスト
上でいくつのプロセスが走っているかを示している。それを
p->rlim[RLIMIT_NPROC].rlim_cur と比較してそれ以上になったら
fork処理を失敗させている。rlim_curはfork_initでイニシャライズ
されていてmax_threads/2になっている。
NGNG
実際にデバッガでどう動いているか見てみよう。
まず main(){while(fork());} をコンパイルし実行する。
pauseキーでブレイクインし、do_forkにブレイクポイントを張る。
[1]kdb> bp do_fork
Instruction(i) BP #0 at 0xc0115270 (do_fork)
  is enabled globally adjust 1
gで、再実行。先ほど実行したプログラムでforkが実行されまくってる
からねすかさず止まるはず。
Instruction(i) breakpoint #0 at 0xc0115270 (adjusted)
0xc0115270 do_forkint3

Entering kdb (current=0xc5f82000, pid 15240) on processor 1
               due to Breakpoint @0xc0115270
止まったら
  if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur)
の行までトレースする。ソースをみるとこの条件判断はalloc_task_structの
次の次の条件判断であることが分かる。この辺りのコードでアロケートしてるのは
0xc01152ee do_fork+0x7ecall 0xc012fbe0 __get_free_pages
0xc01152f3 do_fork+0x83mov %eax,%ebx
0xc01152f5 do_fork+0x85test %ebx,%ebx
0xc01152f7 do_fork+0x87je 0xc01158d8 do_fork+0x668
のコードだ。test %ebx,%ebx jeはif (!p) gotoであることは容易に分かる
このコードの次の条件判断は
0xc0115314 do_fork+0xa4mov 0x4(%edx),%eax
0xc0115317 do_fork+0xa7cmp 0x300(%ebx),%eax
0xc011531d do_fork+0xadjae 0xc011596b do_fork+0x6fb
だから、ここまでトレース。トレースはssコマンドだ。
NGNG
俺は実際にはトレースするの面倒だから 0xc0115317にブレイクポイントを
設定し実行した。
[0]kdb> bp 0xc0115317
Instruction(i) BP #1 at 0xc0115317 (do_fork+0xa7)
  is enabled globally adjust 1
[1]kdb> g
Instruction(i) breakpoint #1 at 0xc0115317 (adjusted)
0xc0115317 do_fork+0xa7int3

Entering kdb (current=0xc5f82000, pid 15240) on processor 1
               due to Breakpoint @0xc0115317
次に実行されるインストラクションはこれ。
0xc0115317 do_fork+0xa7cmp 0x300(%ebx),%eax
レジスタの内容を見てみよう。eaxが&p->user->processesのはず。
[1]kdb> rd
eax = 0x00001000 ebx = 0xc2bd0000 ecx = 0x00000000 edx = 0xc6d0dfc0
esi = 0xc5f82680 edi = 0xc2bd0680 esp = 0xc5f83f50 eip = 0xc0115317
ebp = 0xc5f83fa4 xss = 0x00000018 xcs = 0x00000010 eflags = 0x00000286
xds = 0xc5f80018 xes = 0x00000018 origeax = 0xffffffff ®s = 0xc5f83f1c
eaxは0x1000つまり4096だな。0x300(%ebx)も見てみよう。メモリダンプはmdだ。
[0]kdb> md %ebx+0x300
0xc5aaa300 00001000 00001000 00000400 00000400 ................
p->rlim[RLIMIT_NPROC].rlim_curも0x1000,4096であることがわかる。
つまりこのマシンでは1ユーザーコンテキスト上では4096個以上のプロセスは
立ち上げられないことになる。実際にpsコマンドでみても4096以上は
立ち上がっていない。
NGNG
まあ、こんなもんだ。まあまあの題材だったね。
2.2.19にも
  retval = -EAGAIN;
  if (p->user) {
    if (atomic_read(&p->user->count) >= p->rlim[RLIMIT_NPROC].rlim_cur)
      goto bad_fork_free;
    atomic_inc(&p->user->count);
  }
ちゅうコードがあるからちゃんと動くはずだけどなあ。
NGNG
             ∩
                 | |
                 | |
        ∧_∧   | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ( ´Д`)//  <  先生!クソレスがついてます!
      /       /     \  やはりちゃんころですか!?鬱だ、sageます!
     / /|    /       \_____________
  __| | .|    |
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
NGNG
   .'⌒⌒丶
_ ′从 从)_  もう寝る
| __ヽゝ・_・ν  |
|\ ⌒⌒⌒⌒⌒\
|  \         \
\  |⌒⌒⌒⌒⌒|
  \ |_____|

108login:Penguin
垢版 |
NGNG
>>105
ところで、その
1ユーザが生成できるプロセスの上限
はどこで設定できるの?
109オリジナルスレの1
垢版 |
NGNG
rootユーザーの場合はulimitコマンドで設定することが可能。
一般ユーザーは設定できない。一般ユーザの最大プロセス数を変更したい場合は
2.2系では最大値はtask.hで
#define MAX_TASKS_PER_USER (NR_TASKS/2)
と定義されてるからここを適当にかえて再構築。
2.4系では>>102で書いたようにfork_initの中で物理メモリの搭載量をもとに
max_threadsが計算され、その半分に設定されている。
変更したい場合は物理メモリの搭載量をかえましょう。
どうしてもメモリをそのままでプロセス数だけ変更したい場合はfork.cのfork_initの
  init_task.rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
  init_task.rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
のmax_threads/2を適当な値に変えて再構築しましょう。
NGNG
>>109
減らす方向にはユーザレベルで可能なはずだが、
現在手元にソースが無いので確認できず
NGNG
>>110
確かに。減らす方向には一般ユーザでも設定できる。
NGNG
>>オリジナルスレの1
ちょっといい?
NGNG
>>101=110か?
オリ1が一人突っ走っていたが、キミのおかげで
会話が成り立つようになって、良スレ化してきた。
114login:Penguin
垢版 |
NGNG
晒しage
115オリジナルスレの53
垢版 |
NGNG
>>88
やんわりと同意。
このスレはLinuxのことやってるんだから、興味ない人や
他のスレの発言から1が嫌いな人は放っておけばいい。
恥ずかしい論理でLinux厨房ぶりを晒さないことだ。

確かに1は>>35-37みたいな恥ずかしい自作自演をする輩ではある。
だいたい>>36は前スレの190だろ。
http://cocoa.2ch.net/test/read.cgi?bbs=linux&key=989048022&st=190&to=191&nofirst=true
文体が変わってるし急に馴れ馴れしくなってるよ。キャラは一貫性を持たせろ。

>たまにリロードして窺ってました。
>5時間くらい人がこなかったので誰もいなくなったのかと思ってました。

俺は前スレの190=1のこの粘着ぶりをみて気持ち悪くなり
手を引いた。確かにおもちゃにするにはおもしろい相手だけどな。
だからあまり刺激するな。
1は反論するやつはみんな俺に見えてるみたいだが、そんなに君を
傷つけて心に深い傷を負わしてしまったかな。
ごめんな、がんばれよ。

まあ2chの掃き溜めで1もいろんな意味で英雄になったな。嬉しいぞ。
NGNG
>>115
やめろって。。。また。。
11755
垢版 |
NGNG
>>115
盛り上がってるとこ悪いけど、おれは前スレの190で、このスレの36だけど
ここでも前スレでも 1じゃないよ。
NGNG
>>117
言うだけなら1でも出来るな。
NGNG
>>35-37
つうか午前4時にあの間隔のカキコはなあ。
12037
垢版 |
NGNG
>>115

>>37
は俺だが、さすがにあの間隔は疑われてもしょうがないとは思うが…
でも別人よ。
NGNG
>>120
36の次が37か…。
なんか、ますます胡散臭くなってきたなあ(w
NGNG
間隔&月曜の午前4時だぜ。
そんでまた偶然36、37が出てくる。
君たちはデムパで繋がってるの?
NGNG
確かに。その限られた中で、さらに数少ない1に同意した人間がねえ。
決めつけるのは良くないが、かなり不自然であるとだけ。
12455
垢版 |
NGNG
いいじゃん。このスレためになるし。
NGNG
>>117,>>120
おいおいおいおいおいおいおいおいおい
ちょっと面白いな(w
NGNG
そんじゃ55=1ってことか。
自分でネタフリして自分で答えるのはスレを盛り上げるために
使われる手段ではあるので、別に批判はしない。
12737
垢版 |
NGNG
>自分でネタフリして自分で答えるのはスレを盛り上げるために
>使われる手段ではあるので、別に批判はしない。

まあ、つまらん煽りや正体探しより遙かに有益だわな
NGNG
開きなおった(藁
面白いなー
NGNG
トリッキーの1か?もしかして
130126
垢版 |
NGNG
ただ、みっともないだけの自作自演はカコワルイ。
テクニカルな話題の自作自演はいいけどね。

みっともないのは>>35-37みたいなのね。
NGNG
>>127

>>35-37のどこが遥かに有益なんだ…?
見てて恥ずかしくなるんですけど…。
開き直ってるのがダメ押しだな…。
132login:Penguin
垢版 |
NGNG
age
もっとしゃべって
13337
垢版 |
NGNG
>>131
有益な情報を書いてくれる人にエールを送るのはダメなのか?
NGNG
>>133
自作自演だからダメなんだろ馬鹿(w
NGNG
そうそう、温かいエールも自作自演だとひたすら寒い。
13655
垢版 |
NGNG
そろそろ 1にきてもらいたいなぁ
NGNG
時間から見て、1は>>28を発見。カーッっとなってしまい、
感情的な書き込みのあと、フォローしてくれる人がいそうにないので、
自分にはこれだけ支持者が居るんだぞ、
俺の発言は有益なんだぞ、と見せ付ける為に、
>>35-37の自作自演を展開、感情的になっていて間を空けるのを忘れた。
と見るのが妥当かな。

いや、所詮ただの妄想だから無視してくれて結構。ほっほ。
NGNG
>>136
ここで1が登場して、弁解するに1票。
(この書き込みを見て、しばらく時間を空けてくるに300ガバス)
NGNG
そろそろカーネルの話に戻してよ
NGNG
…などと1らしき人が発言してますが、皆さんいかがでしょう?
NGNG
>>140
こんな事やってると何も書けんぞ。
Win厨、Lin厨よりもタチが悪いな。
NGNG
>>141
いや、カーネルデバッグ以外でLinuxの話ならOKでしょ(w
それに匿名掲示板における自作自演指摘の無意味さは
ここにいる全員が知っている。まあ、ネタまがいの遊び
だよ。
NGNG
>いや、カーネルデバッグ以外でLinuxの話ならOKでしょ(w

カーネルデバッグの話はいやなのか?
NGNG
>>142
1発見!!
ごまかそうとしてもだーめー
NGNG
だって1がうざいんだもん。
146login:Penguin
垢版 |
NGNG
>>115->>142

カーネルデバッグネタに付いてこれない連中の嫌がらせ。
NGNG
>>146
やめとけ、1。
素直に謝れ。
NGNG
>>146
Lin厨にはテクニカルな話は理解不能です。
NGNG
オリ1とは無関係です
NGNG
>>149
いや、判ってるって。
文体違うし文短いし
NGNG
>>148
1必死だな。
NGNG
>>138
ほれ、出てきてやったぞ。どうすんだ。
NGNG
本物かどうか試験してやろう
jiffies が10倍早く回るようにする為にはどうすればいい?
154138
垢版 |
NGNG
>>152
やった!空けたな。
155あおりじゃ無いぞ
垢版 |
NGNG
なかなか面白いな。このスレ。
>オリジナルスレの1
煽りはほっといて質問
プロセステーブルが一杯になったからと言ってシステムの動作がおかしくなるのは何故だ?
psやkillが上がらないのは当然として、kernelの挙動には影響無いはずだが。
デバッグの格好の対象だと思うがどうだ。

あと、プロセスを上げず(killコマンドじゃなくて)にシステムを正常に戻す方法はないのか?

>エセLin注
プロセステーブル一杯でプロセスが上がらなくなるのはLinuxだけじゃないぞ。
NGNG
うん、もうやめようよ。
1の自作自演はもう限りなく有力ではあるが、
これ以上ひっぱるのはやめよう。
優しく1を見守ってやろう。
「>>115 1発見!」とかもなしな。
言いたいのはわかるが、おさえろ。
本来の趣旨に戻してやってくれ。
15755
垢版 |
NGNG
>>155
デーモンとかが新規プロセスを立ち上げられないからじゃないの?
inetdもフォーク出来ないっしょ。多分。
もとから動いてたプロセスは死なずに生きつづけてるよ。
こうなったときに正常に戻す方法はオレも>>1に聞きたい。
158login:Penguin
垢版 |
NGNG
>>156
ゲキウザ
NGNG
>>153
まあ、答える義理はないけど、一応な。
timer.c のdo_timer関数をみましょう。すぐわかるよ。
NGNG
>>157
デーモンはforkに失敗して死ぬことはあると思う。
ただ、inetdが死んだからってkernelには影響ないと思う。
inetdもユーザプロセスだからな。

initがプロセス作ろうとして失敗するからか?

>オリジナルスレの1
本物かどうかのチェックなんてどうでも良いからこっちやろうぜ。
NGNG
>>155
うーん、俺のところではそういう状況になってないからはっきりとした
ことは言えないが、2.2系ではプロセステーブルが一杯になっても
確かにカーネルの挙動には影響ないはず。
2.4系ではforkが落ちる=メモリ確保失敗だから、他のカーネルモードドライバ/
ファイルシステムもメモリ確保できないはずだから挙動はおかしくなるはず。
こうなったらもう、どうにもならない。仕様だね。
NGNG
>>161
こらこら適当に回答するんじゃない。なんだか投げやりだぞ。頑張れ

if (atomic_read(&p->user->processes) >= p->rlim[RLIMIT_NPROC].rlim_cur)
    goto bad_fork_free;
これでなんでメモリ確保のエラーなのだ?
メモリは空いてるはずだが。

おれもカーネルソース見てみるかな。ちと興味が湧いた 藁
  
NGNG
違う違う。落ちる可能性があるのはその前の
  p = alloc_task_struct();
  if (!p)
    goto fork_out;

NGNG
ちょっと補足すると。俺の環境ではRLIMIT_NPROCがちゃんと働いてメモリを
使い切らない程度にしかプロセスは立ち上がらない。この時にはすでに
立ち上がってるデーモンや、カーネル/カーネルモードドライバにはなにも
影響がなくおかしな挙動もない。
もし、RLIMIT_NPROCを非常に大きな値に設定した場合はforkが落ちるのは
メモリ確保失敗だから他のメモリ確保も失敗する。そうなったら挙動は
当然おかしくなる。
NGNG
2.2系ではお手上げってことか
NGNG
>>163
alloc_task_struct()のソースみてみるよ。面白そうだから。
俺のとこは2.4.5なのだがバージョンは同じかな?

もう寝る。あとは明日。
NGNG
>>166
一応情報。上のデバッグログをみても分かるようにalloc_task_structは
只単に_get_free_pages に行くだけ。
168親切君
垢版 |
NGNG
まとめ
>>3-8
カーネルデバックの方法
>>26
なぜか荒しがこのスレの自作自演に反論。
>>88
結構良いことを言ってる。
>>115
良いことも言ってるが煽り入り。
>>127
自作自演を認めるような発言。
NGNG
36,37に迷惑がかかるのは嫌なので言っておく。
俺は最近この板に書き込むときにはちゃんと"オリジナルスレの1"を使ってる。
だから 36も37も全く別の人。他の人に噛み付くのは止めてくれ。
NGNG
もう結論が出たネタに間隔をおいて反論してみる1。
>>123,>>126,>>130
このあたりが結論でしょう。
限りなく黒に使いグレー
NGNG
Linux板にはカーネルデバッグを嫌う奴がいるみたいだな。
人それぞれだから、それはそれで良いとしても、
オープンソースを掲げるLinuxの板がこれではなぁ...
NGNG
>>171
カーネルデバックがダメって主張してるのは一人ぽい。
他の人はオリジナルスレの1がうざいとか、
おもしろい素材だから煽って遊んでるってな感じじゃないの?
前科なくこのスレを建てていたら好意を持って迎えられていたでしょう。
NGNG
前科ねえ(笑。そういう俺が何かレスしたら煽るって粘着っていうんじゃないの?
17455
垢版 |
NGNG
>>173
雑音は気にせず頑張ってください。
あと、2.2系でプロセスいっぱいになった時の対処も教えてください。
NGNG
>>35-37
これは凄い気持ち悪いと思う・・・
粘着厨房は私も嫌いだったけど・・・
ある意味それより嫌な人間性・・・
粘着より粘着してるよ・・・
傍から見てても。
NGNG
某所の「オリジナルスレの1 うぉっちスレ」も盛り上がってきました。
NGNG
いまちゃんと2.2系のソースを見てみたら、こんな風になってる。
static inline struct task_struct ** find_empty_process(void)
{
  struct task_struct **tslot = NULL;

  if ((nr_tasks < NR_TASKS - MIN_TASKS_LEFT_FOR_ROOT) || !current->uid)
    tslot = get_free_taskslot();
  return tslot;
}
MIN_TASKS_LEFT_FOR_ROOTはtasks.hで#define MIN_TASKS_LEFT_FOR_ROOT 4
と定義されてるから、4つのプロセスだけROOTのメンテ用に残されてる。
だから、ちゃんと動くはず。
これでも動かないとなると、搭載物理メモリ量に対して起動できるプロセスが
多すぎるんだね。メモリアロケーションで失敗するよりも、
  retval = -EAGAIN;
  if (p->user) {
    if (atomic_read(&p->user->count) >= p->rlim[RLIMIT_NPROC].rlim_cur)
      goto bad_fork_free;
    atomic_inc(&p->user->count);
  }
こっちのチェックで失敗するようにNR_TASKSを小さな値にして再構築するべきだね。
2.4系ではNR_TASKSは搭載物理メモリ(MB)*64になってる。例えば32MB積んでるなら
32*64で2048個。
でも512個って8MBのメモリのマシン用の設定なんだよね。55がそんな少ないメモリの
マシンを使ってるとは思えないんだよなあ。または既に増やして再構築済みとか?
NGNG
自作自演疑惑の煽りとかコピペの煽りじゃなくて、もうちっと技術的な煽りは
出来ないんかい?ちょっと難しい題材提示するとかさあ。
これじゃあ技術的な話に付いてこれないって言うのを認めてるようなもんだぞ。
でもjiffiesの増分を変えるとかいう、ソースサーバーの電源を立ち上げて
3分で分かるような簡単な質問はやめてくれよな。つまんないし勉強にもならない。
あと、全く情報がないのとか不可能な題材も勘弁な。
179login:Penguin
垢版 |
NGNG
>>178
3分でわかる って思ったからこそ出題したんだよ。
ここに来てるヤツの80パーセントはちんぷんかんぷんだったと思うよ。
180login:Penguin
垢版 |
NGNG
>>オリ1 殿
デバイスドライバ作りにおいて、カーネルスレッドを起こしたとき
rmmodするときはまず先に殺しとかないと文句垂れられるけど
あれってシグナル受け取るか共有メモリ使うかとかする必要が
あってけっこうめんどくさいよね。
かといって手を抜くわけにもいかないし。

なんかいいスケルトンとか、サンプルになるソースってある?
NGNG
>>180
とりあえず、サンプルは探してみる、ちょっとまってな。
なかったら自分でこさえてみるよ。
でもそこまで分かってるんなら、多分それ以外の方法はないし、自分で
出来るんじゃないか?(笑
ところでLinuxってNT/W2KでいうWaitForMultipleObjectsみたいな
関数はないの?これがあれば、カーネルスレッドのWorkItemでの待ちと
終了用のイベントの待ちを同時に行えてエレガントなコードに出来ると
思うんだけど。
NGNG
>>181
>NT/W2KでいうWaitForMultipleObjectsみたいな関数
wait,wait3やwait4のことでわ?
NGNG
>>181
一応自分でも作ったんだよね〜。
でもジュウザなみに我流なんで、何とかしたいなあと。

今使ってる方法は共通エリアに終了フラグを作っといて、
終わりたいときはcleanupモジュールでそのフラグ立てて
インたら_sleep_onですぐ寝ると。で、カーネルスレッド側で
ループの先頭でそのフラグを見たら適当に終了処理して
cleanupで寝てる人を起こす。

なんか危なっかしい(正常ルートしか考慮してないし)ので
上手い方法ご教示プリーズ
NGNG
>>178
そうやって反応するからまた煽られるのですよ。
少し1擁護派だったけどやっぱり馬鹿厨房だな。
NGNG
>>183
それで正しいと思うよ。多分100人中80人くらいがその方法をとるだろうね。
NGNG
>>185
ループの最中に必ずスケジューラを呼ぶついでに
そのへんの終了プロセスを一手に引き受けてくれるような
便利な仕組みがあったら欲しいんだよね。
そういう便利ルーチンが用意されてないとなると、自分で
適当に作るしかないってことかな? ・・・なんで用意してないんだろ。

余談だけどRT-Linuxはその辺が標準でサポートされてて、
ブッ殺すって心の中で思ったならッ!
その時スデにプロセスは終わっているんだッ!
って感じで便利だったよ。
187login:Penguin
垢版 |
NGNG
まだやってんのか(ププ
NGNG
>>187
うるせえよ、ヴァカ。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況