1 :
login:Penguin :
01/10/02 17:44 ID:38KkZsUQ メモリ管理、プロセス、ファイルシステム色々ありますが カーネル全般について語り合うスレッドです。
2 :
先生 :01/10/02 17:57 ID:eJtCpXEo
知ったかぶるなよ
3 :
login:Penguin :01/10/02 18:33 ID:E7mCRr2I
>>先生 メモリ管理について教えてください。 仮想メモリってなんですか? もはやメモリをケチる必要がないので 仮想メモリシステムは過去の遺物なのでは?
hayaku nihonngo ga tukaeru youni naritai
5 :
生徒A :01/10/02 18:43 ID:ozLMsuOI
>>3 先生は逃げたみたいなので代わりに回答.
仮想メモリがないとメモリが分断されまくる.
あ,でもメモリ空間が64ビットならば不要?
いや,年単位で連続運用するならやっぱいるか.
6 :
login:Penguin :01/10/02 18:51 ID:E7mCRr2I
>>5 レスありがとうございます。
でもなかなか難しいですね。
カーネルの勉強するにはどこから入ればいいのでしょうか?
引き続きレスありがとうございます。 しかしこれまた難しそうですね(笑 でもカーネルを勉強するからにはやっぱり避けられないのでしょう・・・・ 頑張って読んでみます。ありがとうございました。
9 :
生徒A :01/10/02 19:15 ID:ozLMsuOI
Linuxカーネルは巨大なので,OS全般について学びたい なら,マイクロカーネルのITRONやMINIXなど,小さいもの から学ぶのが良いと思われ. ファイルシステムも標準出力も無いが,メモリやプロセスの 管理など,基本的な部分が学べる. ところでこのスレには,先月のLinux Kernel Conferenceに 参加した猛者はおらんのか? 漏れは猛者では無いが参加 した.カーネルの概要など,一般的な部分が多かったが, 勉強になった.
10 :
login:Penguin :01/10/02 19:47 ID:OjgDyI7M
11 :
login:Penguin :01/10/02 22:28 ID:6FKAXCY.
12 :
login:Penguin :01/10/02 22:30 ID:6FKAXCY.
カーネルまでいくと流石に簡単じゃないね。 でもカーネルに踏み込んでいって初めてLinuxの楽しさがわかりますなぁ。
13 :
名無しさん :01/10/02 22:46 ID:zSfn87tE
slab accellarator のことを くわしくおしえてください
14 :
login:Penguin :01/10/02 23:05 ID:5C40lEU6
>>13 slab allocatorなら教えてあげられるけど・・
16 :
login:Penguin :01/10/02 23:17 ID:oluBGeaw
別にプログラムするのにカーネルのお勉強なんて無駄だよ(藁 なにお熱くなってるんだ?
>16 興味ない奴は、別に気にしなくてもいいよ。
18 :
login:Penguin :01/10/02 23:49 ID:wFiCO6hI
>13 slab ってのは、 ページサイズより小さな領域を効率よく割り当てる 仕組み。いくつかの「オブジェクト」をまとめて割り当てて、そこから割り当てるようになってる。 特徴的には、Linuxだと - キャッシュラインをずらしてキャッシュヒット率を上げてる。 - 2.4 だと CPU ごとのプールがあって、競合しにくくなってる。 ぐらいか。 オリジナルは Sun のやつで、論文がでてる。slab allocator Sun とかで検索かければたくさんヒットするよ。 Sun のは、無駄な再初期化を減らす方に主眼が置かれてたみたいだけど、Linux はそういう使い方はしてない。
この板のレベル高い人は本当にレベルが高いからほんと勉強になります。
20 :
login:Penguin :01/10/03 00:29 ID:qmOPlmH.
>>15 LinuxJapanのやつだよね。
雑誌のほうがきちんとかかれているので、高いけど我慢して買ってます。
21 :
login:Penguin :01/10/03 00:30 ID:qmOPlmH.
22 :
login:Penguin :01/10/03 00:49 ID:hQhC8R6E
小学館から出ている オープンソースコメンタリー(?)とかいうヤシは 参考になりますか?
23 :
login:Penguin :01/10/03 15:39 ID:OoBvWckA
一昔前の(とはいっても未だに最先端に近い) UNIX カーネルの話題は、 UNIX Internals: The New Frontiers / Uresh Vahalia (邦訳:最前線 UNIX のカーネル) 一冊でほとんど網羅してるので、質問する前に必ず読め。
24 :
login:Penguin :01/10/03 19:06 ID:2CGhO19g
>>23 UNIXカーネルとLINUXカーネルは別物ではないですか?
25 :
生徒A :01/10/03 20:26 ID:L1U0davc
>24 どうしてもLinuxのカーネルでないとだめ? OSの構造なんて,大体似たようなもんだから,1つわかれば 別のOSについてもわかるので,わかりやすい物から攻略すべし. って漏れも修行中なんだけど. Solarisなんかは結構すっきりしていて良いかと.
27 :
22 :01/10/03 20:56 ID:hQhC8R6E
>>26 立ち読みしてみたけど。あまりよくないみたいっす。小学館。
詳解Linuxカーネル、買おうと思っていたんだけど、
ギリギリ足りなかったので、
「Lions' Commentary on UNIX」ってのを買いました。
最初、「ヤッチマッター」とか思ったんですが、
よく読むと結構面白いデス。
29 :
login:Penguin :01/10/03 21:15 ID:WC8.1bjo
>最初、「ヤッチマッター」とか思ったんですが、 どの本も高いからね。失敗は許されない(笑 ところで生徒Aさんは理系の学生ですね? 「 . 」と使うのは理系の学生ということを最近知りました。 全然関係ないのですが・・・・・・ 学生のあいだじゃないとKernelの勉強する余裕も暇も無いんだろうなぁ
30 :
login:Penguin :01/10/03 21:33 ID:7HwwpjBY
>>27 Lionsの本はいいよ。まだ小さいころのUNIXだから楽に読める。
ただ、うちの学生に読ませるとPDP/11の構造とか昔のCの
特異なシンタックスとか、ユーザー空間とカーネル空間の
マッピングなんかが分かりにくいから少し丁寧に解説しなくては
ならなくてめんどい。
>>18 誤爆だよ。
>>13 はslab accellarator って書いてるんだよ。
31 :
22 :01/10/03 21:36 ID:hQhC8R6E
#別にコテハン名乗る必要ないですが。
>>29 Lions' Commentary on UNIX 、イイです。
他のカーネル解析本が5、6、7千円する中、
3800円という値段だし、ソースのコメントも、
解説も、厨房の漏れにも簡単に理解できます。
UNIX6thEditionのソースだけど。。。
ま、まぁ、かなり良書だと思います。
PDP-11モッテルヒトニトッテハナー (・∀・)
ヒガイシャハオレダケジャイヤダナー(・∀・)
カッテクレーカッテクレー (T∀T)
32 :
:01/10/03 21:59 ID:6FwjUW2s
そんなほんよんだところでやくにはたたへんで。 ほんまむだやで。
33 :
login:Penguin :01/10/03 23:58 ID:eXoVUEs6
>>32 そうそう。カーネルを勉強したからといってどうせOSを作るわけでもないんだろ?
はっきりいって仕事でそんな知識は必要ありません。必要なのは体力、根性です(藁
>>33 カーネルハックして、自分の環境に
より適合させたいってのはあるんですが。
それに、コンピューター関連の仕事なら
かなり役に立つらしいですよ。
35 :
login:Penguin :01/10/04 00:19 ID:IJ/BVV8A
>>34 御意。カーネルを読むことによってプログラミング
することが楽しくなり、おまけにコンピュータに
関する様々な知識が得られるでしょう。
36 :
login:Penguin :01/10/04 01:37 ID:TP.JpGmU
37 :
生徒A :01/10/04 02:20 ID:BnS2BE2U
自宅から書き込んでいるので「、。」です。それはともかく、 本棚からお勧め書籍を紹介。 ●A.S.タネンバウム, A.S.ウッドハル/ オペレーティングシステム ・設計と理論およびMINIXによる実装, ピアソン, ¥8,800 個人的にはOSの本を1冊かうならコレ。マイクロカーネルのUNIX (下位)互換のOS、MINIXの解説本。図版も適切でわかりやすく、 巻末に解説付きソースコードとCD-ROMが付属。 ●A.S.タネンバウム / 分散オペレーティングシステム (プレンティスホール)¥6,400 基本的に分散アーキテクチャの本だが、スレッドやセマフォ、 メッセージパッシングなどといったOSの基本を学ぶのに最適。 マルチプロセッサに関してもかなり詳しい。 ほかにも色々あるけど、とりあえず2冊。
>>32 カーネルデザインってのはソフトウェアエンジニアの一般教養の一つだろ。
一般教養はえてして practical には見えんもんだけど。
でも、物事に対する造詣の深さってのはそういう一般教養の積み重ねなんだよ。
薄っぺらいつまらんエンジニアで一生を終えたいんなら必要ないけどな。
41 :
4 :01/10/05 00:23 ID:gYIiu.Dk
3日もかかった。
43 :
41 :01/10/05 19:30 ID:b1Ltl45Y
(*^_^*)
44 :
41 :01/10/05 19:30 ID:b1Ltl45Y
(*^_^*)
46 :
生徒A :01/10/08 17:37 ID:ckosTg1k
駄レスしか付いとらんな…。 >「C言語初歩段階」の私が、Linuxのカーネルを「読んで理解出来るよ >うになる」段階に到達するには、一体どんな本を勉強すればよろしいの >でしょうか? 別スレの質問だが、「C言語初歩段階」なんて言っているくらいなら C言語をマスターするのが先。プログラム板でC言語関連の書籍を捜す べし。 とりあえずC言語で1万行くらいのプログラムを書け。話はそれからだ。 期待しているよ。
47 :
login:Penguin :01/10/08 17:59 ID:b/ngw8PE
ははは、言えてる。 classぐらいは理解できんときついわな!!
48 :
login:Penguin :01/10/08 18:40 ID:a7vO/utY
>>46 コード数、UNIX6Editionの主要部分より
多いし。
49 :
login:Penguin :01/10/08 21:03 ID:x5IDA3B2
SH4用のLinuxに使われている、IRE-Based IRQについて、 解説してくれる人いますか? SE用の実装で、ILRの向こうの8259をどう扱えば良いか、悩んでるんですが。
50 :
login:Penguin :01/10/08 21:04 ID:x5IDA3B2
↑IPR-Basedの間違いでした。
51 :
生徒A :01/10/08 22:34 ID:YM3gMNoM
10さんのファイル萌えるうううううううう・・・・・・ハァハァ
53 :
52 :01/10/09 00:16 ID:bLcM5DEQ
あ、、、でもLinusの自伝に、 できたてのころのカーネルはデバイスドライバがバグりやすいとか書いてあったなあ、 入れるのに少し抵抗が、、
54 :
生徒A :01/10/09 01:04 ID:3eF2sAZg
>53 VMWare
55 :
53 :01/10/09 01:09 ID:bLcM5DEQ
>>54 なるほど・・!
VM上で動かせばディスク死んだりすることも無いということですね!
(勘違いだったら死脳ッ戸
レスありがとうございます。
56 :
生徒A :01/10/09 03:03 ID:3eF2sAZg
>いまならオブジェクト指向言語で見通しよく書かれた >OSを採用するべきではないかとおもうのですが 別スレの質問。技術的には言っていることは正しい(多分)。 ただ、そのような言語を理解できる人が少ないため、カーネルの メンテナンス要因が激減すると思われ。 そのデメリットがメリットを上回っているのが現状。 「いいや違う」という反論はソースコードでのみ受け付ける。 もちろん、君がオブジェクト指向言語で書いたOSのコードでね。
57 :
login:Penguin :01/10/09 20:44 ID:z4CgcBHE
アゲル アゲレバ アゲルトキ
何ヶ月か前にマ板C++スレでC++ではメタオブジェクトがないから そんな言語でOS作ったら悲惨なことになるっていう結論が出てた
59 :
login:Penguin :01/10/09 23:01 ID:z4CgcBHE
Objective-Cで作りませう!
60 :
login:Penguin :01/10/09 23:43 ID:bAzeTfP6
Rubyで作りませう!
61 :
:01/10/14 09:30 ID:q04qm9lH
なるほど、今となってはOSの処理は相対的に 軽いから、デバイスドライバー部分とCPU周辺 チップのところ以外では、OSをインタープリター言語 で書いても十分実用になるのかな?
62 :
login:Penguin :01/10/14 23:50 ID:bKvEFw2k
質問させてください。叩かれ覚悟です。 カーネル部分を作るには、アセンブリがわかる必要がありますよね。 全部Cってわけにはいかないと思うのです。どこで勉強すればよいか教えて ください。(Cはわかります。) それから、OSがどんな風に立ち上がるのか(ローダーってやつ?)なんかも どこで勉強すればよいのでしょう。ハードディスクの先頭に何かアセンブリで 書いておくのでしょうか? スレを汚してすみません。でも初心者スレでは無視されるだけだと思いますので。 お願いします。
>>62 http://www.linux.or.jp/JF/ 読み漁れば脱初心者にはなれる。
>それから、OSがどんな風に立ち上がるのか(ローダーってやつ?)なんかも
>どこで勉強すればよいのでしょう。
上のサイトにも書いてあった気がするけど。
今月号のLinuxMagajineが特集してた。悪くない。
64 :
62 :01/10/15 00:12 ID:KoDPieN3
>>63 やさしいご指導ありがとうございます。
がんばります。
66 :
62 :01/10/15 00:30 ID:KoDPieN3
>>65 ありがとうございます。
>別に初心者スレでも無視しないけど。
すみません。
67 :
login:Penguin :01/10/15 00:30 ID:RTj/vcxR
つーか、Linuxカーネルに学ぶことなんてないじゃん。 NetBSDの方がおもしろいぞ。いっぺん見てみろ。
LinuxとNetBSDを読み比べるのも一興かと。 OSの勉強するんだったら、BSD勧めとく。 386の勉強するんだったら、Linuxも悪くない。
RT-Linuxってどう?
>>68 確かに。ソースを読むのもいいけど、とりあえず、
-current の man.tgz を持ってきて、/usr/share/man/cat9 を
覗くだけでも宝の山。
hard link が多いから、ファイル選んで読むべし。
71 :
login:Penguin :01/10/15 07:44 ID:RTj/vcxR
MINIX -> 386BSD -> NetBSD -> FreeBSD -> Linux -> Solaris の順番で勉強せい。 MINIX、386BSDの挙動を完全に理解できたら、後のものはソースコードを眺めるだけでよし。 いきなりLinuxカーネルはきつすぎる。 良い意味で実用主義、悪い意味で「とりあえず動けばOK」。 ただひたすら読みにくい。 Linux、*BSDを読み終えたらSunだ。ちゃんと金払えよ。 そしてスレッドの美しさに酔いしれろ。
>>71 Solarisんとこ、machやl4の方がいいと思うけど。
UNIXの構造を勉強したい人にはthreadは関係ないんじゃねーの?
74 :
login:Penguin :01/10/15 09:47 ID:1RSiSLer
Jolietの2byte文字を読めるように改良しようと思って、 ソースを眺めているがサパーリわからん。 やはりVC++で500行程度のコードを書いたことが有る。 と言うレベルの俺には難しすぎる(わらぃ
75 :
74 :01/10/15 10:17 ID:1RSiSLer
って、必死にソース追ってたらちゃんと多byte文字対応してやがる。 ああ、今まで必死にソースを追った作業は何だったんだろう? 鬱出汁脳
76 :
login:Penguin :01/10/16 00:45 ID:B9OVQJ4u
77 :
login:Penguin :01/10/16 00:59 ID:0iRzhq4a
>>73 Solaris とか NetBSD だと scheduler activation というネタもあるし、
FreeBSD にも KSE っていうネタがあって、おおよそ最近のスレッド技術は
深くカーネルと関係してるから、一概にそうともいえないよ。
ここまでくると上級レベルだから、構造の勉強というようなレベルは超えてるかもしれないけど。
79 :
login:Penguin :01/10/16 10:28 ID:W7jl/1HX
このスレいい!! あげ
80 :
login:Penguin :01/10/16 21:00 ID:+8viyP9S
スレッドとスケジューリングがごっちゃになってるのか?
81 :
login:Penguin :01/10/16 22:02 ID:tFjq3kLf
いきなりカーネルのソースコードからはじめるのは、 ちょっと厳しいんじゃないかな。 大まかにOSの構造を説明してある良書ってないん ですかね。機能を知ってからソースを見ると、関数 名や変数名がヒントになるから、ぐっと理解が早い と思うんですけど。 それとも、「これから勉強したい」人も、そこまで は出来ているという前提?
ケンタッキーと関係あるの?
83 :
login:Penguin :01/10/17 00:03 ID:p7GUM0P4
>>81 2種やら1種のテキストに書いてあるレベルの知識と、ソース読むことの
間を埋めてくれるのって、どんな知識でしょう?
個人的にはCの知識かな、と思うけど、ケーススタディとしてカーネルを
使うのは厳しそうだと気づいた今日この頃です。
>>84 >間を埋めてくれるのって、どんな知識でしょう?
努力と根性と経験です。
人が作ったものなんだから理解できないはずはないという信念
87 :
login:Penguin :01/10/17 01:12 ID:0KcBObcy
88 :
login:Penguin :01/10/17 01:17 ID:BOPoQ/5Y
>>87 おなじおらいりーでも、でばどら本から入っていくってのも
手だな。ちょっと古いけど。
売りポイントとしては、「実際に自分で作ったものを動かせる。
動かすことで理解が深まる」ってとこかな。
>>89 気になるのは、元にしてるのは2.2系なのか2.4系なのか、かな。
92 :
♯6411 :01/10/17 11:04 ID:Nt5BAsRN
>>91 悪魔本でも、和訳の
「4.3BSDの設計と実装」
は、初心者には(もちろんエキスパートにも)
オススメじゃないよね?
…って、まだ版を重ねてんだろか?
原書嫁。
Linuxのカーネルがある意味読みやすいというのは
同意。386の教科書が傍らにあるとベターかな。
ただ、ネットワーク周りは、読んで脱力したこともしばしば。
シンプルで読みやすいって観点だったら、MINIX 読むべきだけどな… たしかに、4.4BSD みたいに抽象度が高いとまっすぐ読めなくなるから総体的な知識が必要になるし、 Linux はベタだから、前提知識なしにパッと見て quick hack する場合は楽だけど、 Linux は全体的にソースが汚いし、ベタなんであまり勉強にはなりません。
>>91 今なら、Linux VM でも FreeBSD の Mach VM でもなくて、
NetBSD の uvm を読んだ方がいい。
たしかに UVM は面白いが何故それが面白いのかがわからなければ意味がない お前は本当に UVM を読みたいのかと問いたい。問い詰めたい。小1時間問い詰 めたい。お前、UVM って言いたいだけちゃうんかと。 まあお前らド素人は、Linux VM でも読んでなさいってこった。
96 :
login:Penguin :01/10/19 02:01 ID:TH1cXybv
agetemiyou
97 :
MINIXカーネル解読中 :01/10/24 16:18 ID:XFF6eHt3
OSってタスク使ったゲームに微妙に似てる気がする・・・
98 :
生徒A :01/10/24 16:49 ID:Sk/5JNlU
>97 そうだよ.だから色々と共通の概念が使える(もちろん 全部じゃないが).
99 :
login:Penguin :01/10/24 19:35 ID:4dNCtF18
>>71 MINIXと386BSDのソースのありか(URI)きぼーん
103 :
gea :01/10/26 01:49 ID:M11l2acb
age
104 :
login:Penguin :01/10/26 03:17 ID:/MJaN4Ug
UVMってdelphiライクな言語ダターケ?
106 :
完全気密性型個室チャット設置 :01/10/26 09:00 ID:JKN2MAJ4
107 :
某スレの12 :01/10/27 11:12 ID:eYNUQGN3
沈まないようにあげ。
ageた先がコピペ広告だったってのが涙をさそうよ...
もしかして完全気密性型個室チャットでLinuxカーネルの仕組みを勉強しろと言いたいのか?
110 :
login:Penguin :01/10/27 15:21 ID:5IDha0Op
in,outでハード制御してるコードがさっぱり理解できない・・・。
112 :
カーネル初心者 :01/10/27 16:27 ID:Hh35ZjqY
カーネルがわかっちゃうと自分でディストリビューションとか つくれますか?
113 :
login:Penguin :01/10/28 02:14 ID:ntdohsRl
>>112 カーネルはそのままでも、自分でディストリビューション作れますよ?
>>110 具体的に、どのあたり?
114 :
110 :01/10/28 02:37 ID:v7FYjkut
Linux 0.0.1カーネルだけど hd.c とか。 HDDコントローラ?の仕様とか見ながら書いたのかな 仕様って手に入るのかな・・。
116 :
login:Penguin :01/10/28 02:53 ID:cJ0fmml8
>>114 0.0.1って....
あまり古すぎじゃないか?移植どころか、「とりあえず動かす」
ころのだろうから、ちょっと読むにも大変なんでわ?
コントローラの仕様ってのは、どっかで手にはいりそうだね。
とりあえずは、
CQ出版社のインターフェース増刊
TECH I vol.10 ATA(IDE)/ATAPIの徹底研究
でどーよ?
117 :
110 :01/10/28 04:40 ID:v7FYjkut
114さん115さん情報どうもです。 0.0.1のカーネルって小さいから読みやすいかな、 と思ったけどMINIXのほうを読むことにしよっと・・。 インターフェースの増刊かなり最新ですね・・すぐ手に入りそうだ。 っていうかインターフェースって雑誌、今はじめて知りました・・ バックナンバーの目次とか眺めたけどすごく面白そう、何で今まで知らなかったんだろう・・ 116さんに感謝・・。
118 :
117 :01/10/28 04:41 ID:v7FYjkut
↑の1行目 115さん116さん だった(恥
119 :
login:Penguin :01/11/05 04:47 ID:zk7Lax0s
120 :
教えて!!! :01/11/06 23:49 ID:seaNFRBf
PHP4のインストールをしようとしているんですが、 rpmのバージョンアップをしろといわれてしかなたく rpmのバージョンアップをしようとしています。 環境はTLJ6.0で、Pentium 166MHzです。 現在は3.0.3なんですが、これを3.0.4以上にしなければなりません。 でも #rpm --rebuild rpm-3.0.6-15.src.rpm の実行中に /usr/include/bits/string2.h:XXX warning : pointer of type 'void *' used in arithmetic といった種類のメッセージがダぁーっと出てきます。それでも処理はずっと続いて3分くらいしたらとまるんですが、非常に不安です。このとき実は渡さなければならなかった引数とかありますか? わかんないんでしょうがなくある方に教えていただいて rpm -Uvh rpm-3.0.6-15.i386.rpm を実行しました。 そしたらこんな表示が・・・・ libpopt.so.0 is needed by rpm-3.0.6-15 どないなってまんねん??? i?86のところの*は環境によって違うということですが、それは具体的にどういう意味ですか? ほんとにタコタコで申し訳ありません。どうかこの哀れなタコを助けてください。*_* それからも一つ質問! どうしてこんなにリナックスは難しいんですか?
123 :
login:Penguin :01/11/07 10:07 ID:D4X9uT1H
デバイスドライバをgdbで動かしたり止めたりしたいのだけど・・・
124 :
login:Penguin :01/11/07 11:58 ID:D4X9uT1H
125 :
login:Penguin :01/11/07 12:35 ID:HqCHYej/
>>124 124は記事内容を理解していない。よって終了。
126 :
login:Penguin :01/11/07 13:03 ID:D4X9uT1H
>>125 解説してください。お願いします。理解したいんです。
>安定版カーネルの管理 >は,これまでもグループで行ってきたことで >あり,これからもそれは変わらない
128 :
login:Penguin :01/11/07 15:29 ID:FmMqLr+t
右腕というより両腕? > AC
129 :
login:Penguin :01/11/07 18:21 ID:EVaWvNem
linusが死んでも大した影響なさげ。 acが逝くとかなりピンチ。
130 :
login:Penguin :01/11/07 23:16 ID:9nIeZqmz
-acにはお世話になりまくりなのでちと残念。
132 :
login:Penguin :01/11/08 04:38 ID:OuhnMvOV
OSよむなら、最初はl4-kaとかおすすめ。 簡単だし、どうせマイクロカーネルだからっていう割り切りで、仮想化しまくってないのが、見通しの良さにつながってるように思う。 そのぶん癖はあるけど(IPCとか)、とりあえずどんなことやる必要があるかがわかるとおもう。 でも、モノリシックカーネルでの優先度制御とか、複雑なvmまわりとか勉強したいなら、NetBSDかなぁ。 わりと読みやすいけど、完全に理解するはなかなか・・・。
133 :
login:Penguin :01/11/10 00:06 ID:GrwBKvex
ようっし、このスレもりあがってなから、カーネル2。5を語るスレにしよう。 2.5の機能のメインっていったら、INPUTデバイス! こいつが入力関係を一手に引き受けてくれるもんで、USBやらjoystickやらkybodeやらマウスやらが シンプルになって、手軽にrawレベルで入力デバイスにアクセスできるようになるんだよう〜 そこの厨房な君も、他になにが追加されるか予想してみよう。
134 :
login:Penguin :01/11/10 00:10 ID:I2bxXvg2
135 :
login:Penguin :01/11/10 00:10 ID:YzLCB467
136 :
133 :01/11/10 00:20 ID:GrwBKvex
な、なんで、/dev/inputがついてんだよ〜、おいらのついてないんだけど。
137 :
133 :01/11/10 00:25 ID:GrwBKvex
>>134 モタイブリッコ!発見!ハゲじゃなくって吐け、何をしってるんだ。 ゴラァ!
・誤字脱字 ・全角アルファベット ・そもそも提案が意味不明 これだけ揃ってれば痛いだろ(w 個人的にはIDE CD-Rの扱いが楽になって欲しい。 ide-scsi使わないといけないのはめんどくさい。
139 :
login:Penguin :01/11/10 01:48 ID:P+u86UuI
実装されて欲しいのは。 ・スケジューラのマルチメディア対応とマルチキュー化 ・暗号化ファイルシステム ・n:mカーネルスレッド(無理か)
141 :
login:Penguin :01/11/11 01:23 ID:gpvCOaba
/dev/input ってのは、今は、USBにしか使われてないけど、 これをPS/2とかの、USB以外のマウスとかキーボードに対応させて、 inputでイベント処理をさせるってことですなぁ ちがうか?汗 /dev/eventXで、流れて来たイベントを拾って、処理できるようになるから、 フレームバッファ関連のアプリが充実するのに期待しちゃうYOU。
142 :
login:Penguin :01/11/11 01:35 ID:H6R3aNYW
>>139 IBM が gnu のをベースにやってる n:m スレッドは
ユーザランドのスレッドだっけ?
143 :
login:Penguin :01/11/11 01:49 ID:gBx3tRWz
>/dev/input ってのは、今は、USBにしか使われてないけど、 カーネル2.4になったら、Sound Blasterのゲームポートに差したアナログジョイスティック の/dev/js0も/dev/input/js0へのシンボリックリンクになてたよ。
144 :
login:Penguin :01/11/11 12:02 ID:Vp1d/juk
145 :
login:Penguin :01/11/11 12:59 ID:gpvCOaba
>>143 そか、ジョイステックも対応してたのか〜、
今のシステムってキーボードからの入力を拾うのってかなりメンドウでない?
たとえば、svgalibでもXでも、一度RAWモードで、キー入力を握られると、
他はどうにもできないのさ、それでXがエラーでおちたりしたら、
PCの後ろにシリアルケーブルつないでどうにかするしかないし。
それが改善されるんだよ〜っていいたかったのだ。
今は、まだ、 keybdev.cからhandle_scancodeっていう、
char/keyboard.cの関数を呼出ちゃってるウンコ仕様なんだけど、
この変がシンプルになるんだよ〜
シッタカブリしてしまったかのぉ、なははは。
ネタはこの辺↓
http://cvs.sf.net/cgi-bin/viewcvs.cgi/linuxconsole/ruby/linux/
146 :
login:Penguin :01/11/11 12:59 ID:ZFz8sYwI
>n:mカーネルスレッド(無理か) 本家MLで議論されてるのを何回か見たが、 永久に実装される日はこなさそうだ。 確かに実装されればパフォーマンスは向上するけど、 別に今のままでも充分パフォーマンスいいから必要ないって結論らしい。 つーか、ボランティアで開発するには手間と暇が・・・
ごめん。すごく基本的なことがわからない。 n:mカーネルスレッドってなに?
148 :
login:Penguin :01/11/12 12:37 ID:IjOleHL1
>>147 実際に平行して走るスレッド数と、スレッド数が違う。
Linuxの今のカーネルスレッドの場合は、両方同じ。
149 :
login:Penguin :01/11/12 17:24 ID:IV1WKQEx
> つーか、ボランティアで開発するには手間と暇が・・・ んなことないっしょ。 Linux よりもよっぽど人手のなさそうな FreeBSD (KSE) とか、さらに 人手のなさそうな NetBSD (nathanw_sa) でも開発が進んでいるんだし。 問題は人手というよりも、Linux カーネル開発メンバーの石頭 (N:M スレッド が大嫌いな奴が結構多い) じゃないの?
150 :
147 :01/11/12 18:57 ID:JAFYYv/Y
>>148 > 実際に平行して走るスレッド数と、スレッド数が違う。
> Linuxの今のカーネルスレッドの場合は、両方同じ。
いやそれは n:m のスレッドだよね。
カーネルスレッドは常に 1:1 では?
もしかしてスケジューラアクティベーションとかの話題?
スレッドの実装には3つあって one-to-many ユーザー空間スレッド one-to-one カーネルスレッド meny-to-meny 上記のハイブリッド だと思ってたんだけど俺の認識は間違ってるか? Solalis なんかは meny-to-meny だよな。 その為にスケジューラアクティベーションのような複雑な仕組を持ち込んでる。 Linux 的にはそんな複雑なものを持ち込んで性能を出せるかどうか… ってのがまずあるんだろう。SMP とのバランスも取らないといけないしな。
> スケジューラアクティベーションのような複雑な仕組を持ち込んでる。 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
>>152 > ここ意味わかんないなあ。バランスって何?
> SMP と N:M スレッドって、トレードオフの関係にはないと思う。
今のプロセスモデル(カーネルスレッド含む)で SMP をうまく使うようにデ
ザインされているスケジューラで n:m スレッドを使うにはまた手間がかかる
くらいのハナシ。
> 蛇足:
> s/Solalis/Solaris/
> s/meny/many/g
スマソ(照
154 :
login:Penguin :01/11/12 20:08 ID:JAFYYv/Y
>>139 > 実装されて欲しいのは。
> ・スケジューラのマルチメディア対応とマルチキュー化
なんか具体性に欠けるけどプリエンプトなスケジューラは今実装中だぞ。
> ・暗号化ファイルシステム
loop.c をハクれ
> 今のプロセスモデル(カーネルスレッド含む)で SMP をうまく使うようにデ > ザインされているスケジューラで n:m スレッドを使うにはまた手間がかかる > くらいのハナシ。 そのためのスケジューラアクティベーションなのでは? スレッドのスケジュー リングを、CPU の割り当ても含めてユーザーランドのスレッドライブラリで決 定できる (カーネルの実装で変な知恵を回す必要がない) というのがメリット の一つなんだし。 あと、個人的に Linux のスケジューラはあんまり信用してないっす。 他の UNIX 系 OS と比べて、I/O intensive なプロセスに CPU が回ってこな い傾向があると思う。(2.4 は調べてないので直ってたらスマソ)
156 :
login:Penguin :01/11/12 20:21 ID:JAFYYv/Y
>>155 > そのためのスケジューラアクティベーションなのでは? スレッドのスケジュー
> リングを、CPU の割り当ても含めてユーザーランドのスレッドライブラリで決
> 定できる (カーネルの実装で変な知恵を回す必要がない) というのがメリット
> の一つなんだし。
あーそうだった。前言撤回。
> あと、個人的に Linux のスケジューラはあんまり信用してないっす。
4.3BSDのスケジューラに毛の生えたようなモノだからね。
さすがに毎秒キューを再計算したりはしないけど。
> 他の UNIX 系 OS と比べて、I/O intensive なプロセスに CPU が回ってこな
> い傾向があると思う。(2.4 は調べてないので直ってたらスマソ)
キューの再計算をなるべく遅延させているからその点で違いが出てくるのかな。
> キューの再計算をなるべく遅延させているからその点で違いが出てくるのかな。 検証したわけじゃないので、なんとも言えないんだけど、sleep_on() に priority 引数がないあたりにも問題があるのかもしれない。 (例えば *BSD 系だと sleep/tsleep に priority 引数があり、I/O 処理が 完了した直後は優先度が上がる) もしそうだとすると、I/O 処理に関わる sleep_on 呼びだしを全て直さないと 解決できない、構造的問題ってことに…
158 :
login:Penguin :01/11/13 04:18 ID:Rt2iJ7Br
素朴な疑問なんですが、スケジューラアクティベーションじゃなくて、M:Nスレッドを実装するって、どーやるでしょうか・・・。 あと、Linux的なら、とりあえず実装してみて、性能でなかったらまた考えるでいいんじゃないんですかね。 よく考えて実装するのは、*BSDにまかせたらいいのでは(笑) だれかやんないんだろうか。
159 :
login:Penguin :01/11/13 16:25 ID:Istj8zje
>>158 だから、IBMのがあるって。
あれじゃだめなの?
160 :
login:Penguin :01/11/13 16:52 ID: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.
161 :
login:Penguin :01/11/13 17:50 ID:lF+3mjBQ
>>155 I/O Insentive ってどのレベルをいってるんだ?
もしかして tty すか?プ
> I/O Insentive ってどのレベルをいってるんだ? 経験したのは、ネットワーク I/O。 なんか latency 的に性能悪いなあと思って調べたらそういうことだった。 > もしかして tty すか?プ ん? その心は?
>>157 > 検証したわけじゃないので、なんとも言えないんだけど、sleep_on() に
> priority 引数がないあたりにも問題があるのかもしれない。
これはシステムコールの違いでしょう。
Linuxには他にいくつかシステムコールが追加されているよ。
> これはシステムコールの違いでしょう。 ああ、理解されてない。;_; いいけど。
>>165 > ああ、理解されてない。;_;
ん? よくわかんないんだけど。スリープ優先度がないってこと?
> ん? よくわかんないんだけど。 そもそも sleep_on() ってシステムコールじゃないでしょ。 > スリープ優先度がないってこと? そうっす。 スケジューラの方を直すのは別に難しくないんだけど、sleep_on() を呼び出 しているところを全部書き換えるのが果てしなく面倒そう。それとも比較的単 純な置き換えで済むからなんとかなるのかなあ。 ちなみに問題のシステムでは、CPU 食っているプロセスの方もシステムの一部 だったので、そっちで適度に sched_yield() することにして、問題を回避し たっす。というわけで、自分で直そうというモチベーションは出ないのね。
>>163 > 経験したのは、ネットワーク I/O。
> なんか latency 的に性能悪いなあと思って調べたらそういうことだった。
I/O InsentiveってネットワークI/OやDiskI/Oにも高い優先度を割り振った方が
いいスケジューラなの? 俺はそう思わんけど。
>>167 > ちなみに問題のシステムでは、CPU 食っているプロセスの方もシステムの一部
> だったので、そっちで適度に sched_yield() することにして、問題を回避し
> たっす。というわけで、自分で直そうというモチベーションは出ないのね。
応答性が重要ならそもそもOSの選択に間違いがあったと思われ。
> I/O InsentiveってネットワークI/OやDiskI/Oにも高い優先度を割り振った方が > いいスケジューラなの? 俺はそう思わんけど。 うーん、うーん、うーん。頼むから OS の教科書ぐらい読んでくれー。 > 応答性が重要ならそもそもOSの選択に間違いがあったと思われ。 それって、Linux よりも、商用UNIX やら *BSD やらを勧めてるってこと? 該当システムってハードリアルタイム性は全く必要ないので、UNIX で十分なんだが。
>>169 > うーん、うーん、うーん。頼むから OS の教科書ぐらい読んでくれー。
ごめん。OS はほとんど自学なので基本的なことがわかってないかも知れない。
しかし多量のディスクI/Oや,遅いネットワークI/Oってのは短い応答時間が
必要だろうか? ってハナシ。
> それって、Linux よりも、商用UNIX やら *BSD やらを勧めてるってこと?
> 該当システムってハードリアルタイム性は全く必要ないので、UNIX で十分なんだが。
Solaris なんかを使えばプリエンプトできるからずっとよいと思うけど。
I/O intensive なプロセスに優先的に CPU を与えることは、 システム全体の「スループット」(not only 応答性) も向上させるのよ。 これ常識。 まともなハードウェアなら I/O と計算処理は並列動作できるから (PC 用の 安物ハードウェアには、駄目なものも多いが)、こうした方がシステム全体の並 列性が上がるんよ。I/O intensive なプロセスに CPU が回ってこないと、 本来発行できる筈の I/O 要求が発行できないので、並列度が落ちるわけ。 > Solaris なんかを使えばプリエンプトできるからずっとよいと思うけど。 実はそのソフトウェアは、開発段階では Solaris と BSD でも動かしてたんだ が (最終版は Linux のみ)、Solaris だけじゃなくて BSD でも問題なかったのね。 だから、これに関してはカーネルレベルでのプリエンプティブ性は必要ない。 Linux 版がなんか遅いなあと気づいたのは、比較対象があったせいなわけ。
>>171 でも、システム全体のスループットをあげるのが必ずしも良いとは限らないよね?
そうすると公平性が損なわれない?
> でも、システム全体のスループットをあげるのが必ずしも良いとは限らないよね? 一般的にはスループットと応答性はトレードオフになることが多いからね。 でも、この件に限って言うと、スループットも応答性も両方とも向上する ので、当てはまらない。 > そうすると公平性が損なわれない? 失われない。 sleep priority は、sleep から目覚めてからユーザーモードに戻るまでの間 しか適用されないから、もしそのプロセスが I/O するだけでなく CPU も沢山 使っている場合は、(sleep priority じゃない方の) 優先度が下がっているの で、ユーザーモードに戻る時に、より優先度の高いプロセスにスイッチしてし まうから。
>>171 > I/O intensive なプロセスに優先的に CPU を与えることは、
> システム全体の「スループット」(not only 応答性) も向上させるのよ。
> これ常識。
ん〜じゃほとんどI/OせずCPUをガンガン使うタイプのプロセスはあまりCPUを
使えなくなるような気がするのだけど。
175 :
login:Penguin :01/11/14 00:13 ID:LEvOTgWY
2.2しか調査してないんなら、wake one が出来るようになった 2.4 で比較してみたら?
176 :
login:Penguin :01/11/14 00:22 ID:LEvOTgWY
しかし、良く読めば、kernel 2.2 でネットワークの 性能があんまし出てないって話だったのね。 2.4 ではカードによっては zero copy が出来るようになったし、 32bitマシンで64bitDMAのbounce buffer なしのデータのやりとり とかもできるようになってきてるし、ソフト開発で今更 2.2 がターゲットというのもどうかとおもわれ。
> ん〜じゃほとんど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 を比べた ・少なくとも直接の原因はスケジューリングにあった ってことから導けるんだけど、面倒だからこれ以上の説明は省略。 これだけ書いとけば、あとは自分で考えれば分かる筈だからね。
ちょっと勉強したいのでSolarisのソースコードをMXに載せてくれないかな? もうソース公開おわっちゃったみたいなので。 UNIX板だと煽られそうだからここの有志に期待。
ライセンス違反じゃん
まぁそうかたいこといわずに・・
>>177 > その通り。UNIX のスケジューラは、どれも基本的には、こうなっているよ。
> Linux だってそう。嘘だと思ったらスケジューラのソースを読んでくれ。
つーか良いスケジューラかどうかってハナシをしてるんだけど。これでいいの?
> つーか良いスケジューラかどうかってハナシをしてるんだけど。これでいいの? 良いからこうなってるんだ YO。 そんなに疑わしいなら、君の考える理想のスケジューリングと、それが既存の スケジューリング戦略と比べて、どう優れているかを、ここで提案してごらん YO。
>>182 > そんなに疑わしいなら、君の考える理想のスケジューリングと、それが既存の
> スケジューリング戦略と比べて、どう優れているかを、ここで提案してごらん YO。
やはりCPUバウンドとI/Oバウンドなプロセスがバランスよく動くことが理想だ
と思うわけ。画像のレンダリングとかをやるならCPUバウンドの方を優先した
方がいい。SVR4なんかはI/Oでなくて「イベント」でプライオリティを増減し
ているらしいけどこういう戦略の方が今っぽくはないかというハナシ。
例えばLinuxのsched.cなんかを読むと以前実行したプロセスとメモリを共有し
ているプロセスの優先度を上げるようになっているけどこういうのは駄目なの?
あと前も言ったけどLinuxのスケジューラは毎秒キューを再計算してないので
(再計算するのは全ての実行可能プロセスがカンタム時間を使いつくした時だ
け)プロセスが多くなると設定しなおす頻度が下がるからレイテンシが下がる
んだろうと思ったんだけど。こういうのも毎秒計算するよりはアリだと思う。
まぁ問題と言えば問題なんだけどそれはスケジューラのクセであって信用に値
するかしないかという問題ではないと思ってるんだけどどう?
おはよう
>>177 > その原因として Linux に sleep priority がない (他の UNIX には、全て
> ある) ことを疑っているんだけど、
他のUnixはスリープ優先度でI/O intensiveを実現してるんだけどLinuxの場合は
違う方法でそれを実現しているってのもクセを作ってる一因だと思う。
> あと、今回の件は wake one とか zero copy とか bounce buffer なしとか
> は、たぶん関係ないよ。どうしてそう想像できるかは、
俺も関係ないと思う。つーわけで出勤だよヽ( ´ー`)丿続きはまた今夜。
> やはり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 なんてのは、すっぽり 抜け落ちてるでしょ。
>>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 あたりでプリエンプティ
ブなスケジューラのパッチが流れてきてるんでそのうち入るのではないかな。
そういや君の案件ってリアルタイムプロセスにして動かすという手はなかったの?
> だからバランスよくと表現したんだけど。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() で スケジューラの変な挙動を回避する方が、マシな解決策だと判断したわけ。
>>187 > それこそ、リアルタイム・スケジューリングを使うべきアプリケーション
> じゃないの?
Unix的にはそうかも知れない。しかしLinuxはそういうプロセスにもCPUを割り振る
ようなスケジューラに*結果的*になっている。だからこの辺でいいんじゃないか
と手を打ったように見えるわけさ。それをクセと書いたわけ。
> この、必要だと思ったらってところの判断基準に納得いかない点があるんだよなあ。
> 今回の応用の場合は作り込みで問題を回避できたけど、一般論としては回避で
> きないこともあると思うんだが。
必要だと思ったらというより必要だと思ってパッチを出せる人がいたらってことかな。
却下されることはあまりないよね。
> > スケジューラの件も kernel-ml あたりでプリエンプティブなスケジューラ
> > のパッチが流れてきてるんでそのうち入るのではないかな。
>
> プリエンプティブ化と この件は、関係ないのでは?
あ。ごめん。
>>154 の件。
> しかしLinuxはそういうプロセスにもCPUを割り振るようなスケジューラに* > 結果的*になっている。だからこの辺でいいんじゃないかと手を打ったよう > に見えるわけさ。 これを、Linux のスケジューラのクセであって許容範囲内であると考えるか、 UNIX 古来の知恵を無視して手を抜いてるから信用できないって考えるかって 違いなんだよなあ。俺は old type、oldtimer だから、よく知られている筈の 知恵が使われてないのをみると、結構ガックリくるのね。 まあ、無視しても何の問題も出ないのなら、そういうのもありなわけだけど、 現実に、こっちとしては手間がかかってるわけだし。 > 却下されることはあまりないよね。 たとえば crashdump と kernel debugger が標準カーネルにいまだに入ってな いのは、納得いってない。そりゃ Linus が必要としてないのは分かるが、 顧客に対してカーネル保守サービスを提供している場合には要るんだけどなあ。
>そりゃ Linus が必要としてないのは分かるが、 >顧客に対してカーネル保守サービスを提供している場合には要るんだけどなあ そりは君のお仕事では?
>>189 > これを、Linux のスケジューラのクセであって許容範囲内であると考えるか、
> UNIX 古来の知恵を無視して手を抜いてるから信用できないって考えるかって
> 違いなんだよなあ。俺は old type、oldtimer だから、よく知られている筈の
> 知恵が使われてないのをみると、結構ガックリくるのね。
シンプルで高速にってのがLinuxのモットーだしね。VM論争だってRikのロバスト
なVMよりAndreaの高速なVMの方が採用されてしまった。まぁそれもアリだとう思う。
既存のUnix的なものを求めるのならLinuxは向かないのかも知れない。
192 :
login:Penguin :01/11/20 10:07 ID:VDFNCHJf
質問です。 Linuxのソースコードの中で読むと勉強になるファイルを紹介してください。 個人的にはlist.h、ghash.hが大変為になりました。
193 :
login:Penguin :01/12/07 04:50 ID:pUngVfZJ
マルチメディア対応ってよく言われるけど、 スケジューラのどこをどう換えればよくなるの?
194 :
生徒A :01/12/07 12:06 ID:Gi93BTz7
懐かしいスレageたな. >193 リアルタイム化ってことでいいんじゃない? 具体的には, カーネルプリエンティブにして優先度付きスケジューラ(Linuxで 言う優先度とはちょっと違う)を搭載すればマルチメディア対応で いいのかな. 優先度継承機能とかもいるね.
195 :
縞栗鼠(シマリス)の親方 :01/12/07 12:19 ID:ohUthW+y
> 優先度継承機能とかもいるね. 割り込み処理に優先度をつけるのも必要でしょ。 割り込み処理を、優先度付きのスレッド化するってのでもいいけど。
197 :
login:Penguin :01/12/12 20:53 ID:VRHOlTvG
『詳細 LINUX カーネル』 買った age 。
>>197 ずいぶん前に買ったけど、まだ読んでないや。
細かいけど詳細ではなく詳解です。
#それじゃあLinuxJapan 10月号と同じ間違いだよ。(w
199 :
197 :01/12/12 21:50 ID:VRHOlTvG
200 :
login:Penguin :01/12/13 04:48 ID:GDrY1kNC
おれも今同じの読んでる。 これとソースコードをつき合わせてるから、 年内かかりそうなかんじ。 がんばりましょう!
本屋に行って実物見ると、禿厚だったのでウトゥ。 あんなのいつ読み終わるやら…。 現在、1章読み終わる! 残りページ見てまたウトゥ。 ま、ゆっくりと行きますか。 がんばりましょう。
203 :
login:Penguin :01/12/13 07:31 ID:GDrY1kNC
モノホンのハッカーはソースを読むのが早いね。 もうあっという間に理解してたりする。 あういった技能は本を速読するのとは また別の能力の気がするよ。
204 :
login:Penguin :01/12/13 17:28 ID:3ZNfl0lP
でも『詳細 LINUX カーネル』ってカーネル2.2対応でしょ? 2.4もあまり変わりないの?
>>204 執筆の時点の安定版カーネルが、 2.2 だったらしい。
でも、初版が 2001 年 7 月だから、本としては
カナーリ新しいんじゃなかろうか。
漏れなんかには違い分からないだろうし…。
大まかな構造とかは同じだろうけど、 詳細な部分が違うだろうから本の趣旨からすると…
>>204 一応各章の最後に2.4.*のことについて書かれてる。
ほんの少しだけど。
>>205 原書は2001/1って書いてある。ってことは発売されたのは去年かな?
>>206 もとのタイトルには詳解なんて言葉はないです。日本のオライソーが
勝手につけた言葉です。
この本の目的はカーネルのソースを読めるようにすること
って書いてあるから、本だけ見て細部を隈なく理解できるように
なると期待するほうが間違ってると思う。
208 :
login:Penguin :01/12/14 09:22 ID:pLOVOTkt
マルチメディア用のIOとは何ですか? 特別にシステムに関数とかを用意したりするんでしょうか?
209 :
login:Penguin :01/12/24 12:51 ID:UsKcZqV7
パラダイムシフトはまだですか?
210 :
login:Penguin :01/12/29 11:32 ID:QLo22gE5
デバイスにアクセスするには /dev以下のノードを介する方法しかないのでしょうか? よろしくお願いします。
>>210 /dev 以下以外にもデバイスファイルは作れます。
man mknod
212 :
login:Penguin :01/12/29 12:19 ID:4LQmsDwQ
他のマシンの/devをNFSマウントして、そこの/dev/hdcとかを直接 フォーマットとかしようと思ってmke2fsとかやったら 自分のところのマシンをフォーマットしちゃったわけよ。 デバイスファイルって結局そこにあるメジャー番号とかマイナー番号 とかしか参考にしないわけで、誰のものかなんて考慮してないよね。 (かならず自分のデバイスだと思ってる) たしかネットワーク経由で他のマシンのデバイスを直接操作する 機能というか仕組みがあったと思うんだけど、なんて名前だっけ?
213 :
login:Penguin :01/12/30 00:17 ID:5UM9dPtt
>>210 最近はデバイスファイルでは扱いにくいハードが増えたから
(マルチメディア系・プラグアンドプレイ)
なんで、デバイスファイルじゃなくて、
そのハードを扱うシステムコール作って、
システムコールであつかうのもいいんじゃないかな?
214 :
login:Penguin :01/12/30 00:30 ID:vlB/mJ24
215 :
login:Penguin :01/12/30 00:55 ID:L5DsFMps
みなさんレスありがとうございます。 >そのハードを扱うシステムコール作って、 >システムコールであつかうのもいいんじゃないかな? これはカーネルに手をつけるということですよね。 そこまでしなければデバイスファイルを経由しないといけないという事でよろしいのでしょうか?
216 :
login:Penguin :01/12/30 02:50 ID:FBPpTPsC
>>212 >他のマシンの/devをNFSマウントして、そこの/dev/hdcとかを直接
>フォーマットとかしようと思ってmke2fsとかやったら
>自分のところのマシンをフォーマットしちゃったわけよ。
最初UNIX Kernelをわかってないなぁって思ったんだけど、でも、確かにネットワーク越しに相手のデバイスファイルを触るという発想はちょっと面白いかも。
Kernel側がどう一貫性を維持しようとするかが問題だけど。
217 :
212 :01/12/30 03:07 ID:UzGpkVqi
>>216 ネットワークブロックデバイス というのがあるみたいッスね。
(ようやく名前がわかったですよ)
カーネル2.2にもあるみたいなんだけど試すのおっかないなぁ
218 :
login:Penguin :02/01/01 12:59 ID:fIVu4F/o
カーネル空間とユーザー空間というのは頻繁に交代されているのですか? また交換するには具体的にどのような過程を通しているのでしょうか? お願いします。
219 :
login:Penguin :02/01/01 20:33 ID:BcEtv31+
ありがとぅ
221 :
login:Penguin :02/01/05 15:23 ID:7OyjHkMf
カーネル初心者です。 以下の本は買う価値あるでしょうか? 実習Linuxカーネル 理論と実習カーネルを効率的に理解するための実習書 出版社名 : ピアソン・エデュケーション
222 :
login:Penguin :02/01/06 03:54 ID:Dq18r+Gi
っていうか、お前らLinuxカーネルの解析に役立つツール カキコしてください。 とりあえず、global
225 :
login:Penguin :02/01/06 04:18 ID:OZczuKpf
printk
226 :
login:Penguin :02/01/06 04:51 ID:QV/kUS0W
227 :
TOM :02/01/06 05:29 ID:VAV/Hk1R
インストール済みのlinuxでwindows同様にIPアドレスとサブネット マスクを設定したいのですが、どのようにやればいいのでしょうか?
228 :
TOM :02/01/06 05:31 ID:VAV/Hk1R
すみません書くところ間違えました(m--m)。
229 :
global :02/01/06 07:29 ID:6O0PvUPf
cd /usr/src/linux gtags htags って何時間ぐらいかかりますか? 5時間動かしてて、まだ、終らないんですけど。
230 :
login:Penguin :02/01/07 02:12 ID:9E3jZ+kY
っていうか、お前らglobalのオプションカキコしてください。 とりあえず、 htags -aF -a:英字インデックス -F:フレーム対応 linux2.4.17、PenV733で4時間ぐらいだった気がする。
231 :
229 :02/01/07 20:12 ID:hX8x2Oiv
再挑戦して半日経ちますが、まだgtagsが終りません。 linux2.4.17をPentium3 500でやってます。 よかったら GPATH GRTAGS GSYMS GTAGS のサイズ教えてください。 僕のは今のところ 2 MB 92 MB 13 MB 19 MB で、GSYMSがちょっとづつ増えています。 sortが遅いのかな?(2.0.16)
232 :
login:Penguin :02/01/09 14:16 ID:YpXVFRRT
task_struct構造体とproc構造体の違いと役割を教えてください。よろしくお願いします。
233 :
login:Penguin :02/01/11 10:22 ID:aBKMHgnQ
ISAボードのデバイスの自動検出ってどうやってやってるんですか? やっぱり片っ端からチェックしてるだけなんでしょうか?
234 :
login:Penguin :02/01/11 22:24 ID:VauQghNo
interfaceでLinuxのデバイスドライバーの特集やってたね。 みんな買って読んでる?
デバドラのデバッグ方法がわかりやすくてベネ
236 :
login:Penguin :02/01/11 22:43 ID:J9+ERyxt
>>233 個々のドライバの初期化処理で、ありそうなアドレスを片っ端からチェックしてる。
238 :
SsS :02/01/13 16:44 ID:1HgPfsgv
>234 デバックにprintfk を使うってほんと???
240 :
セマフォ :02/01/13 22:51 ID:byNjLBNZ
セマフォについてわかりやすく実装方法を教えて!
241 :
デビットカトラー :02/01/13 23:12 ID:byNjLBNZ
Linux のスケジューラは、どのプロセスを走らせるかを一つのファイルの中で処理しているおもしろいプログラムだから。 といいますが、具体的にどのファイルで処理しているのでしょうか?
242 :
login:Penguin :02/01/13 23:30 ID:QSg7wIlW
>>241 SDのインタビュー記事からか?
linux/kernel/sched.o だろ(藁
ソースコードはlinux/kernel/sched.c だな
243 :
super :02/01/14 00:12 ID:d6cd8xHD
デバイスドライバを作るということは open やclose などに対応したデバイス独自の関数を 作成しそれらへの関数ポインタをひとまとめにしたテーブルを 作成するということ といいますが、 もうすこし、わかりやすく説明してください
244 :
login:Penguin :02/01/14 00:34 ID:/7fIIVht
qsort(3)は、第三引数に関数へのポインタをわたすよね。 これは「比較を行う関数」というものをqsort本体からは 抽象化して、実装は別にしているわけだ。 同様に、あるキャラクタディバイスに対してread()やwrite() を行った際の動作を、カーネルが扱う際に抽象化する為に 関数へのポインタを渡すことで実現している。
245 :
login:Penguin :02/01/14 01:00 ID:HmpJulBQ
>>240 semaphoeで検索すれば、いくらでもヒットするんでは?
もしかして、test and set命令とか、そのレベルから
教えてという話?
semaphore
>>243 そういうテーブルを作ると、ドライバの親分が
必要に応じて呼び出してくれるんです。
248 :
super :02/01/14 22:10 ID:hh4sVRcA
age
249 :
login:Penguin :02/01/15 21:02 ID:blfk2QjY
250 :
login:Penguin :02/01/15 21:07 ID:blfk2QjY
sched.c は 1269ステップ数あります みなさん249のページをコピーして 秀丸に貼り付けて下さい!
251 :
login:Penguin :02/01/15 21:08 ID:blfk2QjY
98行目 static union { struct schedule_data { struct task_struct * curr; cycles_t last_schedule; } schedule_data; char __pad [SMP_CACHE_BYTES]; } aligned_data [NR_CPUS] __cacheline_aligned = { {{&init_task,0}}}; では何をやっているのでしょうか?
252 :
login:Penguin :02/01/15 21:13 ID:blfk2QjY
static inline struct task_struct *find_process_by_pid(pid_t pid) は何を意味していますか?
253 :
login:Penguin :02/01/15 21:43 ID:blfk2QjY
あげ
>251 具体的にどの部分が分からないのか不明。 currにn番目のプロセッサで実行中のタスクが入る。 unionで__pad入れてるのは、構造体のサイズをcache境界の単位にあわせるため。 __cacheline_aligned は構造体そのものをcache境界に整合した番地に置くため。 NR_CPUS定数はCPUの数。 >252 >find_process_by_pid 関数名そのまんま。PIDからタスク構造体を取得するだけだと思うが。
255 :
login:Penguin :02/01/15 23:06 ID:iytjqY0j
>> 251
/*
* We align per-CPU scheduling data on cacheline boundaries,
* to prevent cacheline ping-pong.
*/
>>252 pidが0なら、現在のタスク情報の構造体へのポインタを、
そうでないなら、指定されたpidがしめすタスクの構造体への
ポインタを返してる。
256 :
login:Penguin :02/01/16 00:02 ID:NXnK8I7n
sched.c について Lionsに紹介されている(P94)のsched.c とLinuxのSched.cとは全然違うように思います これはLinuxが独自の仕様ということでしょうか? Bach本でスケジューリングのアルゴリズムを説明しているソース はLion本に近いソースで説明しているのですが
257 :
login:Penguin :02/01/16 00:03 ID:NXnK8I7n
unionで__pad入れてるのは、構造体のサイズをcache境界の単位に あわせるため もう少し詳しく!
258 :
名無しさん@お腹いっぱい。 :02/01/16 00:13 ID:MlDa/kr2
259 :
login:Penguin :02/01/16 00:15 ID:lZaXRnQU
>>257 cacheの問題だっていってるんだから、そこに因われることは
無いと思われ。
「あー、高速化の為に、unionつかってイイ感じにやってんのねー」で
十分じゃねーの?
260 :
login:Penguin :02/01/16 00:38 ID:NXnK8I7n
smpって言葉がでてるけど、mp環境だから 256のいうように、ソースが複雑になっていると いうことでしょうか? ちなみにSCHED.C ってlINUXの中ではわかりずらいソースなのでしょうか?
261 :
名無しさん@お腹いっぱい。 :02/01/16 00:58 ID:MlDa/kr2
__padによるCache単位(キャッシュライン)への整合はMP環境で大きな意味を持つ。 つまり、キャッシュラインに対して構造体1つがピッタリはまっていれば その構造体以外のアクセスで、その構造体があるキャッシュラインがフラッシュされることがなくなる。 もし、構造体のサイズ!=キャッシュラインサイズであれば、 あるプロセッサによって無関係のデータの読み込みが行われた場合でも 他のプロセッサ全てのキャッシュラインの更新が行われてしまう可能性がある。 そしてメモリアクセスが増えて性能が落ちる。わずかだけど。 キャッシュラインのイメージ図(*が構造体の部分 Xが無関係のデータ) (1). [**********][XXXX] <-構造体のサイズ!=キャッシュラインサイズの場合 (2). [****************] <-構造体のサイズ==キャッシュラインサイズの場合 (1)の場合は無関係のデータにアクセスされてもそのキャッシュラインがフラッシュされてしまうので無駄。 (2)の場合は構造体にアクセスする場合だけそのキャッシュラインがフラッシュされるので効率がいい。 ∧_∧ ( ´Д`) <わかったかな? / \ _ | | ∬ | |_..∬ |\ ̄ ̄ ̄旦 ̄ ̄ 旦.\ ./..\\ \ / \|================| \ ノ \ \ .\ \ ..\_ """"""""""""""""""″″′
262 :
login:Penguin :02/01/16 01:09 ID:DfshrX4d
>261 thank you
263 :
Be名無しさん :02/01/16 22:11 ID:NXnK8I7n
あげあげ
264 :
Be名無しさん :02/01/16 22:31 ID:NXnK8I7n
static inline int goodness(struct task_struct * p, int this_cpu, struct mm_struct *this_mm) { int weight; /* * select the current process after every other * runnable process, but before the idle thread. * Also, dont trigger a counter recalculation. */ weight = -1; if (p->policy & SCHED_YIELD) goto out; /* * Non-RT process - normal case first. */ if (p->policy == SCHED_OTHER) { /* * Give the process a first-approximation goodness value * according to the number of clock-ticks it has left. * * Don't do any other calculations if the time slice is * over.. */ weight = p->counter; if (!weight) goto out; #ifdef CONFIG_SMP /* Give a largish advantage to the same processor... */ /* (this is equivalent to penalizing other processors) */ if (p->processor == this_cpu) weight += PROC_CHANGE_PENALTY; #endif /* .. and a slight advantage to the current MM */ if (p->mm == this_mm || !p->mm) weight += 1; weight += 20 - p->nice; goto out; } /* * Realtime process, select the first one on the * runqueue (taking priorities within processes * into account). */ weight = 1000 + p->rt_priority; out: return weight; } なにをやっているか解説して下さい 140行目からです sched.c
265 :
Be名無しさん :02/01/16 23:00 ID:NXnK8I7n
struct mm_struct {
int count;
pgd_t * pgd;
unsigned long context;
unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack, start_mmap;
unsigned long arg_start, arg_end, env_start, env_end;
unsigned long rss, total_vm, locked_vm;
unsigned long def_flags;
struct vm_area_struct * mmap;
struct vm_area_struct * mmap_avl;
struct semaphore mmap_sem;
};
構造体の中に構造体がある場合はどう理解すればいいのでしょうか?
sched.h
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-15.html
266 :
もなー君@お腹いっぱい。 :02/01/16 23:37 ID:MlDa/kr2
>264 goodnessは、指定されたタスクが実行し続けるにふさわしいか判断するための関数。 戻り値が大きいほど「実行しつづけた方がいいよ」という意味になる。 この関数だけ見てもしょうがないので全体的に説明すると。 #RTプロセス周りは省略 > weight = p->counter; このcounterは可変優先度式スケジューラの動的優先度に相当する。 動的優先度については>171あたりを参照。 >#ifdef CONFIG_SMP > (省略) > if (p->processor == this_cpu) > weight += PROC_CHANGE_PENALTY; >#endif プロセッサはそれぞれにcacheとTLBを持っているため、 1つのタスクがいくつものプロセッサにまたがって実行されると性能が低下してしまう。 従って、「なるべく同じプロセッサ上で実行し続けた方がいいよ」という意味。 >if (p->mm == this_mm || !p->mm) > weight += 1; これも同様に、別のメモリ空間(ページテーブル)に切り替えるとTLBが無駄になってしまうから 「なるべく切り替えない方がいいよ」という意味。 ∧_∧ ( ´Д`) <PROC_CHANGE_PENALTYとかの値は推測的に決められているから / \ <どれほど性能が改善されるのかをLinus君に問いたい、問い詰めたい、 _ | | ∬ | |_..∬ <小一時間ほど問い詰めたいところではある。 |\ ̄ ̄ ̄旦 ̄ ̄ 旦.\ ./..\\ \ / \|================| \ ノ \ \ .\ \ ..\_ """"""""""""""""""″″′
267 :
あげあげ :02/01/17 13:09 ID:fKwmqdxC
>266 Thank You
実際に使っているけど、結構いい感じ。 気に入った。
270 :
Be名無しさん :02/01/18 23:07 ID:SjcLc3oq
>linux/kernel/sched.o だろ(藁 >ソースコードはlinux/kernel/sched.c だな 自分で,sched.c を一部書き換えて、sched.o を作って linux/kernel/sched.o と置き換えてもうまく動作しますか? ソースを一部書き換えて、それをリナックスでコンパイル させる方法教えて下さい。 例えば、sched.c
271 :
login:Penguin :02/01/18 23:11 ID:SjcLc3oq
272 :
270 :02/01/18 23:21 ID:SjcLc3oq
>>272 1. time.c を編集
2. /usr/src/linux あたりで make vmlinux
でダメかい?
274 :
270 :02/01/19 00:44 ID:jiC3xKcw
>273 sched.cを編集したので、sched.c をコンパイルして sched.o をつくってと言う流れにはならないのでしょうか?
>>274 sched.c編集後に kernel/
でmakeって打ったらどうなる?
276 :
:02/01/19 03:29 ID:EPNncPjO
親切な分厚い本が何冊かでているから、それを読んで勉強 するのがもっとも効率がよいぞ。それでも判らないところは メーリングリストや掲示板で尋ねなさい。
277 :
login:Penguin :02/01/19 10:14 ID:s4mGpeNh
>>256 なんとか本は読んだことがないのだけれど、
伝統的なUNIXなら、スケジューラにはMLFQ
を使っているんじゃないでしょうか?
LinuxのスケジューラとMLFQは違うの? と
いう質問に対する答は、「違うよ」です。
MLFQ:Multi Level Feedbak Queue
278 :
penguin :02/01/19 10:27 ID:Nn4Hdk9S
>276 以外にsched.c を編集して差し替える方法ってのはのってないです オらいリーにも、バッハにはもライオンにも
279 :
perl :02/01/19 19:19 ID:6UZoY/KQ
>275 Target /Rules.make をmake するターゲットがありません と表示されます
280 :
login:Penguin :02/01/20 01:25 ID:PW5h4b9T
>>279 そうなるでしょ?
だから君は /usr/src/linux あたりで makeしろ
と言われるわけだ
なんでこうなるかは, Makefileなどを読めばわかるから読んでみなよ
>>274 もちろん そうすることもできる
があまり一般的でない気がするし
この程度のこと自分で調べるとか試すことができんと
先にすすめんと思うぞ.
202.221.45.130 俺のIPアドレスだ、おめーらの技量じゃハックデきね〜だろうけどw
>>281 プロバイダはケーブルネット新潟か、、
icmpが通らないどころかtcpのどのポートも開いてないじゃん。
283 :
A :02/01/20 18:44 ID:cVcKPlLa
284 :
T :02/01/21 12:53 ID:Wml0Xzg3
コンパイルされたカーネルはどのディレクトリにありますか? REaHATです
285 :
login:Penguin :02/01/21 20:15 ID:vTi6jywZ
>>284 /linux/arch/i386/boot/bzImage
ところであまり綺麗ではないと言われるLinuxのソースですが、
どのあたりが*BSD*やその他のカーネルと比べて不味いのでしょうか?
自分には十分綺麗にまとまっているようにも思いますが。
>>285 比較対象によるが洩れにもそんなに汚くは内容に見える
ただデバイスドライバの中には汚いのも散見する気がするので
ここらへんが不味いと言われるかもしれないです
287 :
Be名無しさん :02/01/21 22:15 ID:RLDBnvZL
goodness関数のソースを見たいのですが、どこにありますか?
288 :
login:Penguin :02/01/22 03:27 ID:sIyQ1wuj
kernel/sched.c
289 :
名無しさん :02/01/22 21:27 ID:qC2FYqJq
最近カーネルに加わったっぽい bioとかdriverfsってどういうのですか?
290 :
safda :02/01/23 17:16 ID:FOpw4p0s
goodness って 140行目の static inline int goodness(struct task_struct * p, int this_cpu, struct mm_struct *this_mm) { int weight; /* * select the current process after every other * runnable process, but before the idle thread. * Also, dont trigger a counter recalculation. */ weight = -1; if (p->policy & SCHED_YIELD) goto out; /* * Non-RT process - normal case first. */ if (p->policy == SCHED_OTHER) { /* * Give the process a first-approximation goodness value * according to the number of clock-ticks it has left. * * Don't do any other calculations if the time slice is * over.. */ weight = p->counter; if (!weight) goto out; #ifdef CONFIG_SMP /* Give a largish advantage to the same processor... */ /* (this is equivalent to penalizing other processors) */ if (p->processor == this_cpu) weight += PROC_CHANGE_PENALTY; #endif /* .. and a slight advantage to the current MM */ if (p->mm == this_mm || !p->mm) weight += 1; weight += 20 - p->nice; goto out; } /* * Realtime process, select the first one on the * runqueue (taking priorities within processes * into account). */ weight = 1000 + p->rt_priority; out: return weight; } desune
291 :
login:Penguin :02/01/25 04:17 ID:dOURaakd
カーネルをコンパイルしたはいいけど、 どこが原因で止まっているのか分からないときは どのようにデバッグしたらいいのでしょうか? 起動時に 'PCI: Enabling device 00:07.2 (0000 -> 0001)' と表示して終わります。 (arch/kernel/pci_i386.cのpcibios_enable_resources()関数で出力) ここまではgrepだけでなんとか分かるのですが、この先どこでおかしく なっているのかさっぱり分かりません。 kernel debugオプションでログを解析したいのですがやり方等 分かる方がいらっしゃれば何か教えて下さい。
292 :
login:Penguin :02/01/25 06:15 ID:dOURaakd
293 :
safda :02/01/25 09:19 ID:SWm1VQvW
294 :
:02/01/25 10:44 ID:Cy8BPQOb
次は誰かがLinuxにタダ乗りすればいいのでは?
>>295
×295 ○294
297 :
anonymous :02/01/25 12:58 ID:SWm1VQvW
>プログラムとは、実行イメージとしてディスクに保存されたマシン語の命令とデータとのセットである。 上はメモリに保存されたとういことではないのでしょうか?>>ALL
298 :
login:Penguin :02/01/25 13:28 ID:GUMC5F4J
>>291 もう一台PCがあって、カーネルデバッガが起動できるようならリモートデバッグ
それ以外だと、オプションをOFFしまくった小さなカーネルが起動できるかチェックし、
起動できたら少しずつ足していくか、モジュール化しといてinsmod手打ちで落ちる所を捜す
動くカーネルとのオプションの違いや、コンパイラが腐ってないかなどはあらかじめチェックすること
>>297 ディスクで正しい、メモリをメタな意味で用いているならそれも正解
300 :
login:Penguin :02/01/25 13:52 ID:GUMC5F4J
>>293 実行イメージは単体(OSは介在していい)でプロセスの起動まで持っていける
プログラムとデータなどをまとめたもの。
LinuxでOSがプログラムとデータを認識できるようにELFというフォーマットを
主に用いる。ELFは複数のプログラムとデータをチャンク(セクションと呼ばれる)として
持つ、イメージ的にはプログラムやデータの個々のファイルを、アーカイバで1つにしていると
考えるといい。
ELF内のプログラムはフツー再配置情報へのリンクを含んだ実行コードそのものと、
再配置情報、シンボルなど複数のチャンクとして格納されている。データも同様で
初期化の他のデータや、あらかじめ獲得するデータ領域などに分けられ格納される。
その他、デバッグ情報や、チャンクの配置情報などもチャンクとして格納される。
デバッグ情報などチャンクのなかで、さらに別なフォーマット(coffなど)として
格納されているものもある。
OSは実行イメージをプロセスとして変換する際、これらの情報から実際に実行可能な
コードと適切に配置されたデータを生成し、実行スケジューリングに追加する。
301 :
anonymous :02/01/25 14:16 ID:SWm1VQvW
>300 Thank You
302 :
名無しさん :02/01/25 15:15 ID:IiT72Jq6
303 :
:02/01/25 20:29 ID:gMh2q5dU
>>302 話題のやつですね。使ってみた人います?
FreeBSDのcrashdumpやkerneldebuggerは使ってみたことあるんですが、
crashdumpは便利だったけどkerneldebuggerは・・・て感じだったんで、LKSTはどうなんだろう?と。
Docを読んだ限りではdebuggerではなくtracerだな、て感じでしたが。まあ名前のとおりなんですが。
>>300 実はELF-DOSはMZ形式のEXEじゃなくて、ELF(386)形式をサポートしてるんだYO!
とかいってみるテスト
305 :
kernel :02/01/25 22:45 ID:AiDxywi8
>>305 0x7c00は、ブート時にBIOSがディスクからIPLセクタを読み込んで配置するアドレス。
IPLセクタには、ブートマネージャやOSローダなどが書き込まれている。
つまり、BIOSによってディスクの先頭セクタ(IPL)が0x7c00番地にロードされ、実行される。
∧_∧
( ´Д`) <1セクタ512バイトしかないから、IPL上で他のセクタをロードして
/ \ <ブートアップしていくのが普通。
_ | | ∬ | |_..∬
|\ ̄ ̄ ̄旦 ̄ ̄ 旦.\
./..\\ \
/ \|================|
\ ノ \
\ .\
\ ..\_
""""""""""""""""""″″′
307 :
IBM :02/01/26 00:58 ID:qkQVL9nG
>306 Thank You
308 :
login:Penguin :02/01/26 01:36 ID:UX7CiKAA
309 :
IBM :02/01/26 02:08 ID:qkQVL9nG
310 :
login:Penguin :02/01/26 20:51 ID:zSXZ5gOy
age
311 :
login:Penguin :02/01/27 05:29 ID:r2XC415p
各モジュールの依存関係と参照関係を管理しているデータ構造がよくわからん。 struct module の depsメンバーと, refsメンバー だれか図に書いて教えて
312 :
login:Penguin :02/01/27 11:31 ID:Z/G/YqfA
age
313 :
login:Penguin :02/01/27 17:48 ID:jQmpel0O
VRAMに直接データを書き込んでディスプレイに描画するサンプルプログラムプリーズ
314 :
login:Penguin :02/01/27 23:16 ID:Frv9vH0P
315 :
login:Penguin :02/01/27 23:25 ID:sK7/TLsv
お前ら人に教えてもらうんじゃなくて 少しは自分で解析しろよw。 皆そうしてやってんだからさ。
皆さん一緒に「オマエモナー」
317 :
Su :02/01/30 20:26 ID:AvPSuSyK
あげ
318 :
APC :02/01/30 20:35 ID:AvPSuSyK
319 :
login:Penguin :02/01/30 20:59 ID:Lx5WPMzl
>>318 スケジューラなので kernel/sched.c
repeat_schedule: あたりか?
320 :
名無しさん :02/01/30 21:37 ID:650NkqOF
>>311 include/linux/module.h を眺めたが
struct moduleのdepsとrefsって
module_ref でこいつはただのlinked listちゃうの?
|module|
^
| dep
|
|module_ref|-next_ref->|module_ref|-next_ref->...
|
| ref
v
|module|
|module|-next->|module|-next->...
思いきり簡略化するとこんなかんじとちゃう?
322 :
login:Penguin :02/01/31 00:59 ID:o+EauUH6
どなたかLinuxデバイスドライバに関するスレを作っていただけないでしょうか。 当方大手プロバイダな物でnew Thread("Linuxデバイスドライバ")できません。 イーサネットドライバの書き方教えてくださいませ。 一応ソース読んだけど挫折中、、、
じゃ、作るよー。
324 :
323 :02/01/31 01:16 ID:t3s191ys
たてたよ。 いい加減で悪いけど。
326 :
anonymous :02/01/31 17:35 ID:XkNXES9H
>319 sched.cには repeat_schedule というモジュールはないです。 sched.cの何行目くらいでしょうか?
327 :
telnet :02/01/31 17:41 ID:XkNXES9H
mmap メモリマッピングは具体的に Linuxではどういうケースでどういうケースで使うのでしょうか? メモリマップの具体的なしくみははじめて読む486で理解しています
328 :
319 :02/01/31 18:01 ID:VzRMG8cD
gotoのlabelだからモジュールぢゃないと思うが、 vesion 2.4.17だとこんなかんじです。 603 repeat_schedule: 604 /* 605 * Default process to select.. 606 */ 607 next = idle_task(this_cpu); idle_task()を追いかければ分かると思われ。
329 :
anonymous :02/01/31 19:40 ID:bRdhNRMb
>328 Thank You
331 :
☆中身丸見えなネットキャバクラ嬢HP :02/01/31 21:55 ID:qyVVAuwK
332 :
login:Penguin :02/01/31 22:13 ID:VzRMG8cD
333 :
anonymous :02/01/31 22:24 ID:gjVN0d1d
リーナスは21歳でLinuxを書いたそうだが、 はっきりいって驚きです
334 :
login:Penguin :02/02/02 10:57 ID:ZMxM5ZSu
2つ質問させていただきます。 1.全てのプロセスはユーザースタックとカーネルスタックの2つのスタックを持っているという認識は合っていますか? 2.プログラムカウントレジスタが指しているアドレスは論理アドレスですか?それともリニア、物理アドレスですか? よろしくお願いします。
>>334 テスト勉強は、友達か先生に聞いてください。
336 :
login:Penguin :02/02/03 20:10 ID:urBW9ceP
mapファイルはいつ、どこに作られるのですか? System.mapは作られるタイミングわかったんですけど mapはどこで作られてるのか・・・さっぱり
337 :
336 :02/02/03 22:07 ID:urBW9ceP
たとえばCD-ROMインストールするときなどは CD-ROMからカーネルを持ってくると思うんですが カーネルをコピーしたあとに LILO を打つのに map=/boot/map のこのmapはどこから持ってくるんですか? とりあえずDebianのCD-ROMの中にはありませんでした。
338 :
オリスレ1 :02/02/04 16:32 ID:zNf2nkG9
少しでも技術的なスレをあげましょか。 厳密に言えばmapファイルはKERNELとはあまり関係がない。これはLILOが使う 情報ファイルであり、この情報を使わないローダーを作ることも可能。 /boot/mapは、lilo.confを変更した後に実行する"/sbin/lilo"により作られる。 この時に同時に1st loderに2nd loader、/boot/mapのセクタ位置も書き込まれる。 実際にLILOが/boot/mapを読むコードはsecond.sのldsc:というラベルの辺りにある。
339 :
login:Penguin :02/02/05 21:13 ID:JQSzVmkT
LINIXはノンプリエンティブ カーネル Widows9Xは プリエンティブ カーネル もう少しわかりやすく説明して下さい
>>339 Windows9Xカーネルは糞だということ。
341 :
login:Penguin :02/02/05 21:18 ID:cjWnFjQH
ん? Windows 9x の*カーネルが*プリエンプティヴなの?
Windowd9xは擬似(以下略)だね
343 :
login:Penguin :02/02/05 21:48 ID:xTemToT9
Mac OS 9 以下もね。
344 :
login:Penguin :02/02/05 22:09 ID:JQSzVmkT
>342 日経バイト(つまらん雑誌だが)に Windowsのロードマップを解説してあり、その中に Windowsをプリエンティブカーネルと紹介してあった
345 :
:02/02/05 22:36 ID:ac3U4odz
win9xのカーネルってどこまでを指すんだろね?
>>344
346 :
login:Penguin :02/02/06 00:15 ID:CkGAoDS/
Linux の*プロセス*はプリエンティブである!
348 :
login:Penguin :02/02/07 20:45 ID:KeZhLQ6z
age
349 :
REd :02/02/08 10:59 ID:SBI5gws8
make の意味が初心者にもわかりやすく解説してあるサイト、書籍希望
>>349 1987年あたりのOh!X12月号
85年だったかな?
352 :
login:Penguin :02/02/08 12:54 ID:yqzyJOrB
パッチ管理システムって何をするための物なんですか? cvsじゃ、だめなんだろうか。
353 :
@@@ :02/02/09 19:07 ID:BxQSwRbk
MINIXのソースのアセンブリ言語で書かれている部分て どんな文法ですか?(なんか変な質問) あと、MINIXのソースはどうやってコンパイルするのですか?
>>327 > mmap メモリマッピングは具体的に
> Linuxではどういうケースでどういうケースで使うのでしょうか?
FreeBSD PRESS 読め。
355 :
login:Penguin :02/02/17 03:11 ID:wXNMmwBm
age
356 :
login:Penguin :02/02/17 04:43 ID:q2RiODNo
,、
/ .\
/ζ 禿 \
/ ̄ ̄ ̄ ̄\.\
. ________,/ \\________
\ //\ \ / | ̄\ /
\ 叩 / ||||||| (・) (・) | \ 騙 /
\ / (6-------◯⌒つ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\/ | _||||||||| | < カツヲめ、またワシを召還しおったな!
/\ \ / \_/ / \___________
/ \ (( \____/ )) ./ \
/ 逝 \ / 煽 \
/ \ ________/ \
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\ 氏 ./
\ /
\/
http://www.puchiwara.com/hacking/
357 :
login:Penguin :02/03/02 22:12 ID:acfYBPiM
Lion's Commentary on UNIX を今日買った。
358 :
484 :02/03/03 01:05 ID:T7JEzMm9
Linuxカーネル2.2あたりをよむ方がいいような
359 :
login:Penguin :02/03/03 17:08 ID:WsSnuBVI
>357 多分学生さんだと思いますが, どうですか 読んでみて
360 :
login:Penguin :02/03/03 17:24 ID:1pDkR8wB
学生じゃないとLinuxのソース読むような暇は取れないよな 学生時代にどれだけ基礎体力を蓄えるかでSEとしてのその後の人生が決まると思ふ
361 :
357 :02/03/03 23:14 ID:1ClZlz9s
>359 malloc.cで挫折しました。 私にはまだこの本を読むだけの素養がないことを痛感致しました。
363 :
login:Penguin :02/03/06 00:04 ID:j2wxpcrr
>「メインメモリ」が不足した場合に、その不足部分をハードディスクの一部の領域に待避させて、代替させることができます。この場合に、ハードディスクの中の待避領域を「仮想メモリ」といいます。 Linuxカーネルを語るときに使う「仮想メモリ」と上記のWindowsでのSwapの意味での「仮想メモリ」って別物ですよね?
364 :
login:Penguin :02/03/06 00:36 ID:VoZ13GuD
365 :
login:Penguin :02/03/06 06:04 ID:pruE8kEE
>>363 仮想メモリ=リニアアドレス空間
っと思ったりする。
VM上のメモリ?
>> この場合に、ハードディスクの中の待避領域を「仮想メモリ」といいます。 > Linuxカーネルを語るときに使う「仮想メモリ」と上記のWindowsでのSwapの > 意味での「仮想メモリ」って別物ですよね? 確かにこの説明は、仮想メモリじゃなくて、スワップ領域の説明だが、 Windows が Linux と違うんじゃなくて、単にこの説明書いた奴が分かってないだけ。 Linux でいう場合の仮想メモリと、Windows でいう場合の仮想メモリは同じ物。 > 仮想メモリ=リニアアドレス空間 > っと思ったりする。 おいおい。 物理メモリだって、リニアアドレスだったりするだろう。これも変だ。
>> 367 多分365が言っているリニアアドレスはx86用語でのもの。 virtual address(?) -> セグメントによる変換 -> linear address -> ページングによる変換 -> physical address それにしても仮想メモリとリニアアドレスは違うけど。
369 :
login:Penguin :02/03/10 16:40 ID:XxAqk7rT
bootsect.S などで書いたコードを フロッピーのブートセクタに入れる場合と ハードディスクのブートセクタに入れる場合の 両方をそれぞれ教えてください。 よろしくお願いします。
370 :
:02/03/10 16:59 ID:KLNVRDiw
フロッピー dd if=bootsect.o of=/dev/fd0 ハードディスク dd if=bootsect.o of=/dev/hda1
371 :
login:Penguin :02/03/14 01:02 ID:SAjWxZmX
久しぶりにあげてみよう
372 :
365 :02/03/14 17:29 ID:8ZESikIV
>>368 リニア・アドレスってx86以外でも使われる
用語なのか。知らなかった。
リニア・アドレス空間って物理メモリorハードディスクなどに
マッピングされるよな。で、ハードディスクにマッピング
された領域が仮想メモリになるのだろうか。
なんとなくしっくりこないなぁ。
メモリ(物理メモリやハードディスクに問わず)を抽象化した
リニアアドレス空間ってのが仮想メモリ空間。<間違っているだろうか?
373 :
368 :02/03/15 22:07 ID:GKIFJfj9
>>372 おれも「リニアアドレス」という用語はx86以外では聞いたことはない。
ただ367がリニアアドレスを線形なアドレスという意味で書いているようなの
でx86では特別な意味があると書いただけだ。
仮想メモリというのはメモリを抽象化するというシステム、あるいは概念を
示す言葉であって手段(スワップファイルとかhogeアドレス空間とか)を示す
ものではないというように理解しているがどうよ?
仮想メモリってリニアとは限らないよね。 今時はふつうリニアだろうけど。
375 :
365 :02/03/16 08:51 ID:NOghNGWY
> 仮想メモリというのはメモリを抽象化するというシステム、あるいは概念を > 示す言葉であって手段(スワップファイルとかhogeアドレス空間とか)を示す > ものではないというように理解しているがどうよ? なるほど、”仮想メモリは概念”っていうのはすごくしっくりくる。 x86系だと普通はプロセッサのメモリ抽象化サポートと カーネルのページングメカニズムのサポート、この2つによって 仮想メモリは実現されるが、他のOSの場合はそうとは限らんしな。
376 :
login:Penguin :02/03/19 18:33 ID:GPZ5tDZe
377 :
login:Penguin :02/03/23 05:06 ID:U94iusfQ
カーネルに、main()はありますか?
379 :
login:Penguin :02/03/24 18:24 ID:p75aMmZg
>>378 マジっすか。
main()でなくてもいいんだけど、ここからスタート! っていう
目印なところが無いというか。
380 :
もなー君@お腹いっぱい。 :02/03/24 18:29 ID:FVW+u6eT
381 :
login:Penguin :02/03/26 12:05 ID:nV5s0H8I
BIOSコールというのはROMに書き込まれている関数を呼び出す事ですか? そうだとすればどんなBIOSコールがあるのでしょうか?
382 :
login:Penguin :02/03/27 14:43 ID:BgVFN3rf
385 :
login:Penguin :02/03/28 03:30 ID:ZK8cq26O
bootsect.S とLiloは別物ですよね?
387 :
login:Penguin :02/03/30 16:23 ID:SfYnsylz
結局どこからソースを読みはじれめればいいんだい?
ふつうならstart_kernelからでいいんでは?
389 :
login:Penguin :02/04/01 23:59 ID:8vevsllb
hage
本屋行ったらLinuxカーネル2.4インターナル とかいう本の訳本が置いてあったんですけど、 誰か買った人います? ちょっとプロセスの辺だけ眺めたたら 訳が下手だったんで買いませんでしたが。
392 :
名無しさん@お腹いっぱい。 :02/04/05 22:27 ID:8Q1S/UyJ
>391 読む目的がないとソースよんだって意味がない 目的は?
>>390 下手なんてもんじゃないだろ。排水溝の底のヘドロみたいな訳だ。
Solarisカーネルインターナル超面白いぞ!買え! そしてパクってLinuxにマージするのだぁ!
395 :
login:Penguin :02/04/09 00:20 ID:O0rtlCLU
「entry.S」のentryテーブルにあるシステムコールの定義はどのファイルでしてるの?
396 :
login:Penguin :02/04/09 01:04 ID:4N3q8p7g
>>359 ユーザーランド側はglibcじゃない?
カーネル側はsys_hogecall()を
asmlinkage void sys_hogecall()
としてそれぞれの関係するところで宣言してる。
asmlinkageはinclude/linux/linkage.h
かな。
397 :
login:Penguin :02/04/09 10:17 ID:Sk6YzNPZ
>>397 ありがとう。わかりやすかったよ、そこは。
399 :
:02/04/10 07:52 ID:0lkBeC02
400 :
login:Penguin :02/04/11 21:02 ID:paUG3Ip4
400get!!! ところでLinuxではトラップに対して切ってある定数は どこで定義してあるんでしょうか?
401 :
login:Penguin :02/04/12 01:05 ID:6kq0713T
>>397 漏れも勉強になた。ありがと。
ついでにSamba 3.0の記事も読んじゃったYO!
402 :
login:Penguin :02/04/12 05:44 ID:FjR6S1/8
>>394 それにはおれも同意。
あの本は凄いよ。
403 :
login:Penguin :02/04/12 18:03 ID:LUY70a8V
詳解Linuxカーネルの方が優れもの
404 :
login:Penguin :02/04/14 16:15 ID:1Jdu/56r
ありゃ,Linux2.4インターナル立ち読みせずに発注しちゃったYO... Lions Commentary はイイYO! 悪魔本とか読んで,イキナリカーネルソース読んで挫折して...を 繰り返した後読むと,スイスイと...
>>405 このパッチが出てきた文脈を知らないんだけど、なんか別のパッチの一部?
これ単体では意味をなさないような
408 :
login:Penguin :02/04/16 00:00 ID:Gq3Gz/c2
409 :
login:Penguin :02/04/16 00:09 ID:r9JjnCrt
>>408 スレッドの生成スピードだけが全てではないけれど、
それにしても意外なベンチマーク結果だね。
Windows もカーネルベースのスレッドなんだろうか?
410 :
login:Penguin :02/04/16 00:25 ID:r9JjnCrt
>>410 商用UNIXがあたりまえのようにtagged vlanに対応してるけど、
linuxの対応はちょとね
高橋さんのzerocopy NFS 速そうやね。
>>411 2.4.x にも 2.5.x にもモリモリ入ってるYO。
NICのハードウェアtvlanに対応しているのもあるし。
417 :
名無しチェケラッチョ :02/04/21 23:08 ID:ccHtxK1Q
418 :
デフォルトの名無しさん :02/04/23 12:39 ID:f2RdN7Qr
419 :
login:Penguin :02/04/27 23:04 ID:e5IKsX9A
420 :
名無しさん@お腹いっぱい。 :02/04/30 16:36 ID:0lZUrbHd
Linux システムコールプログラムって本どうですか?
421 :
login:Penguin :02/04/30 16:40 ID:ozCXgXAB
不要。APUE を読め。
422 :
login:Penguin :02/04/30 16:42 ID:MJcEiblG
>>420 似た名前の本がいっぱいあるから、amazoあたりへの
リンクぷりーず。
423 :
名無しさん@1周年 :02/04/30 21:11 ID:TGbiUZt2
>>422 アスキーから出ている本です。
かなり前に出版された本ですが、
版を重ねて新しいのが常に店頭にあります
読んだ感じは、わかり易い。
有名なシステムコールについて、わかりやすくかいている
fork ,exec
それ以外は421の言うとおりかもしれない
424 :
login:Penguin :02/04/30 21:25 ID:x3t7pobP
mallocに関して、 外人が、sbrkを使うとフラグメンテーションの問題があるから memmapを利用するという投稿をニュースでチラッと見た記憶が あるけど、これ間違ってない? 最近別スレで128kb境界問題が出てきて思い出した。
425 :
login:Penguin :02/05/15 15:53 ID:rs0ae66r
カーネルのソースって2.2系から比べてもどんどんと汚くなってることない? gccと比べたらまだいいのかもしれないけど。。。
具体的にどこがどう汚くなった?
427 :
もなー君@お腹いっぱい。 :02/05/20 00:01 ID:f4n8AHGc
良スレ保守
428 :
login:Penguin :02/05/27 03:28 ID:k9GgAUwV
良スレage
誰か解説してくれ! -------------------------------------------- TSSの制限: ・104バイトのメモリを一度にロード,アンロードする必要があり,遅い。 ・プロセスのカーネルスタックとタスク状態が,カーネルアドレス空間に存在しない。 ・各プロセスのスタックが,アクティブ時に同じ仮想アドレス空間に存在する。 ・ネスト可能な配置の複数プロセスからなるスレッド群を構築できない。 ・プロセス終了時に,終了しようとしているコンテクストでアドレス空間を復元できない。
431 :
login:Penguin :02/05/31 22:43 ID:AGbA9dZA
>>409 win32もカーネルベースのスレッド。
つか1スレッドの作成に1msもかからないのね。もっと遅いと思ってた。
432 :
login:Penguin :02/05/31 22:58 ID:sbY2Cg79
5/29(水)〜5/31(金)、「LINUX WORLD」をやっていましたが、 どうでしたか? 行きたくても、行けなかった、へぼな技術者より。
利ナック巣はノンプリエンティブなカーネルだが、プリエンティブな カーネルはどうして尾バーヘッドが大きくなってしまうのか
2.5カーネルではプリエンプティブ機能も取り込まれてるよ。 コンフィグで設定可能。 オーバーヘッドは大きくなるが、応答性やスループットがよくなる。
応答性やスループットがよくなる原因は?
436 :
login:Penguin :02/06/26 14:22 ID:knPs+H7Y
保全sage
age
440 :
login:Penguin :02/08/09 22:24 ID:NfDvV172
Linux Japan の Kernel2.4 解説記事の連載は, 書籍にならないのかな.
最終号で全連載のPDFがCD-ROMに収められたって事は 書籍にならないんじゃない? 連載時からだいぶ時間がたってるから今の2.4カーネルと食い違ってる ところもあるし。
442 :
login:Penguin :02/09/03 02:51 ID:rckhdKiC
>>435 ハードウェア割り込みにより、
カーネルモードで動作してるプロセスから制御を奪えるからかな。
間違っていたら訂正キボンヌ。
>>442 それは、応答性が上がる説明にはなっても、スループットが上がる説明には
ならんよ。基本的に、応答性とスループットは、チューニングの上では相反
することが多い。特にハード・リアルタイム性の保証というレベルで
応答性を重視した場合、スループットは犠牲になると考えるべきだ。
リアルタイム・カーネルを使ってスループットがもし向上したなら、それは
TSS的手法でのスループット向上の余地がまだまだあるということを意味して
いると考えた方が良い。
444 :
login:Penguin :02/09/03 08:25 ID:rckhdKiC
>>441 >連載時からだいぶ時間がたってるから今の2.4カーネルと食い違ってる
>ところもあるし。
改訂版が出る可能性も。
>>445 詳細を知りたかったら自分の興味あるバージョンのカーネルの
中に入っていかないとだめでしょ。うちはUnderstanding〜の
2.4 anticipatingでとりあえずは満足です。
447 :
login:Penguin :02/09/04 21:45 ID:LYCQm1JB
PS/2キーボードのaキーを押して端末にaの文字が表示されるまでの仕組み を教えてくれろ。
bならおしえてあげる (´ε`)チュッ
その先もきぼん。
450 :
login:Penguin :02/09/05 01:42 ID:OpRaeHU5
>>448 恋のB級アクション か・・・懐かしいな。 かーみーかーぜーのー
2.4になってからUSBとかかなり使いやすくなったけど 2.6で新しく入る機能でいちばんつかえるものってなにになるんだろ。。
そりゃもちろんACPI対応でしょう。これで腐れBSDより一歩抜きん出た。
AIBOが/dev/aiboで制御できるようになります。 2.6最大の目玉です。
AIBOクレ
455 :
login:Penguin :02/09/05 19:35 ID:DWBmmIUd
数年前に最前線UNIXのカーネル読んでみたけど、完全に忘れてるし 全く身についてない。 ソース読んでみても、何をやってるのかは分かるが、その後なんか 生かされたかっていうと、そんなこともない。 Linux Japan のカーネル解説は毎月読んでたけど、読んだだけでは 分かった気がしないし、身についてる気もしない。 単なるコンピュータ好きの理系学生です。 プログラミングするのは好きなんですが、 こーいうのは向いてないのでしょうか? なんか、楽しくカーネルハックする方法ってないですかね?
>>455 まず 2ch に来るのをやめれ。
そしてプログラミング以外の趣味を見付ける事だ。
458 :
へぼ :02/09/05 22:24 ID:yOuLsem/
>>455 カーネルはいじらないとわかんないとこが多いよ.
たとえば,コンソールに"Helo"と出力するだけのシステムコールを作ってみては?
うまくいったら,次は,cat /proc/helo で "Helo"を出力するカーネルモジュールを
作ってみよう.
>458 ありがとうございます。 なんか、温かい言葉をかけてもらって涙ぐみました。
462 :
login:Penguin :02/09/06 17:47 ID:Y7BSSDDG
このスレは絶対、Part2を立てるぞ、ゴルァ!
とりあえず
>>970 が次スレ立ててくれ。
464 :
login:Penguin :02/09/06 21:40 ID:J1Wkvxow
2.5.xでgrub-0.92で、MBRに書き込む方法教えて。 起動すると、固まるんだ。プロセスがSに成る。
466 :
login:Penguin :02/09/07 19:50 ID:KVnNwClL
>>465 2.4.xだと書き込めるんだけどね。
みんなLilo使っているのかな。
467 :
login:Penguin :02/09/18 10:38 ID:sPjt+sc2
2.5.35のソースについてのことです。 linux/fs/exec.cのde_thread( )関数内において wait_task_inactive( )関数を呼び出しているのですが、 この関数はlinux/kernel/sched.cにおいては CONFIG_SMPで囲われています。 つまり、SMPマシンでないとどうしてもコンパイルエラーが でるということになりますが、みなさんはどう対処され ましたか? 問題の関数を呼び出しているところだけCONFIG_SMPとした だけでいいものなんでしょうか。。。
467です。2.5.36のパッチがさっき出たようです。 とりあえずfs/exec.cの該当個所にも手が入ってるので それを試してみます。どうもすみませんでした。
469 :
login:Penguin :02/09/20 12:18 ID:DfRVVlpc
新しいスレッドPOSIXスレッドライブラリは 結局 N-on-M モデルではなく 1-on-1 に なった模様。
470 :
login:Penguin :02/09/22 05:27 ID:qgNMD4Z1
>>470 冷静に考えても N-on-M を採用するとは考えられないだろ?
理由がわからないならお前はLinux使う価値なし。
まーどうせわかんないんだろうけど(w
>>471 君もちゃんと勉強して早く理解しようね。
474 :
people :02/09/22 19:02 ID:RIhA1MQQ
N-on-M モデル について解説希望
複数のCPUで複数のスレッドが動くってやつか?
複数のスレッドを複数のLWPに割り当てるやつ。
スレッドとプロセスって何が違うの????????
このスレどんどん馬鹿になっていくな。
479 :
login:Penguin :02/09/23 00:11 ID:SuKTDRxG
4倍とは穏やかじゃないね。
スレッド NT プロセス UNIX
482 :
login:Penguin :02/10/05 20:06 ID:IheoajWb
現在カーネルをメンテナンスしている18歳のブラジル人について詳細希望
483 :
login:Penguin :02/10/05 20:25 ID:IheoajWb
485 :
login:Penguin :02/10/05 20:46 ID:IheoajWb
Unix のその他の実装 (AIX または Solarisのような) とは違って、Linux カーネル自 身は、複数のカーネル・スレッドを 1 プロセス内でまとめることができる抽象化機能 を持っていません。代わりに、fork() システム・コール (clone() とも呼ばれる) が 実装され、ユーザーは、子プロセスをその親と同じアドレス・スペースで実行するよう 指定できます。次いで、このシステム・コールは、Linux スレッド化ライブラリーによ り使用され、ユーザーにスレッド・プログラミングの抽象化機能を提供します。ユーザ ー・インターフェースの観点から見れば、すべての POSIX スレッド・インターフェー スは、実際、Linux の下で全面的にでサポートされていますが、実装面では 信号 に 問題があって、完全には POSIX に準拠していません
で Linuxカーネルが、 そのPOSIXとやらに完全準拠するとパフォーマンスが大幅に向上すると?
487 :
login:Penguin :02/10/05 21:02 ID:IheoajWb
NPTL(linuxthreads2)でPOSIX準拠とパフォーマンスの両方が 改善される.待つべし
489 :
login:Penguin :02/10/05 21:43 ID:IheoajWb
Linuxでプロセスとスレッドの違っている部分はどこかといいますと、 タスクを生成する時にメモリと、シグナルハンドラとファイルディスクリプタが 別個の存在になっていればプロセス、共有していればスレッドとなります。 処理単位(タスク)として見た場合だと、扱う側(スケジューラ)からは見分けが つかないようです。
>>489 kernel内なんかどうなっていても,user spaceが適切な機能を
正しく高速に実現できるような機能を提供できればそれでいいじゃん?
491 :
login:Penguin :02/10/06 02:07 ID:bFXVWfMC
Threads are "light weight processes" (LWPs). The idea is a process has five fundamental parts: code ("text"), data (VM), stack, file I/O, and signal tables.
492 :
login:Penguin :02/10/06 02:21 ID:bFXVWfMC
>>491 ,492
そのような一般論をお書きになっても、ここは/.JPでは
ありませんので誰もプラスモデレートしてあげられません。
Linuxの方針はアホだとかScheduler Activationや
KSEは所詮論文ネタにすぎないといった殺伐とした
カキコを期待します。
実は6〜7年前銭湯で幼稚園ぐらいの女の子に「パパー この人のちんちん大きー」と指をさされて大声で言われた。 確かに俺の息子は大きい方だったが、指をさされたのは初めてだった。俺は特にタオルで隠すことはしなかったので特に目立ったのだろう。 その子のお父さんは「すみません」と恥ずかしそうに謝っていた。 しかし、それだけでは終わらなかった。 俺が体を洗っているとその女の子が友達の女の子2人を連れてきて「ほら、この人のちんちんとっても大きいんだよ」とわざわざ見に来た。 お父さんが「やめなさい」と言ったのと同じくらいに女湯の方から「○○ちゃ〜ん、なにお話してるの?」と同じくらいの女の子の声が 聞こえてきた。すると「この人、とってもちんちんが大きいの。ゾウさんみたいなの」とありったけの大声で叫んでいた。 すると男湯、女湯の両方からくすくすと笑い声が聞こえた。 俺はとんでもなく恥ずかしくなって石鹸を流して早く上がろうと思い立ち上がったとき、不覚にも勃起してしまった。 その場にいた女の子3人から「わっ!」と声が上がり「○○ちゃ〜ん、大変〜、この人のちんちん 上にいっちゃったの〜、パオーンしてるの〜」と女湯に向かって叫んだ。男湯・女湯同時に 大爆笑がおこった。その女の子達は「すごーい! すごーい!」と俺の息子に向かって拍手をしていた。 それを見た男湯の人たちがさらに爆笑し、その爆笑につられて女湯でもいっそう大きな爆笑になった。 俺は逃げ出すようにして銭湯から出て行った。 その日以来、その銭湯へは行かなくなった…。
496 :
login:Penguin :02/10/20 19:44 ID:ibUwKkfe
Linuxのカーネル勉強ねえ。そんなこと勉強して何かに役に立つ? そんな時間あるなら、道路工事のバイトでもしてソープ行った方が何倍もいい。
>>496 は”正しい”
適性と本能とを十分に吟味すると・・・
>>496 なにをいっておるのか.カーネルをヨム.こんな悦楽は他にはない.
ヨムだけで飽き足らなくなったらカイてみるのだ.
カイたコードがパニックしてみろ.射精する.
コードをカクのは極楽だあ.セックスだあ.
..では今夜も逝ってくる.
501 :
login:Penguin :02/10/22 20:14 ID:AiS+bb4w
悔しいけど、やっぱり496は正しいと思う。 Linuxのカーネルなんかよりも、綺麗なネエチャンとHする方が絶対いいと思う。 つーか、Hするよりも、Linuxのカーネルに触れたいと思う香具師っているの??
>>501 そりゃ居るだろうよ。
世の中Hするのが面倒って香具師もいるし。
503 :
login:Penguin :02/10/22 21:16 ID:JDhHENtH
みもふたもない話だ
500はどう見てもイタ過ぎる。頼むからROMっててくれ
ねぇねぇ BitKeeper 使ってる人いる?
507 :
login:Penguin :02/10/24 19:57 ID:b/KVmODi
そりゃあセクースしてる時や美味いもん食ってる時は、誰だって幸福を感じるよ。 だけど、四六時中できるもんじゃないし、それだけじゃ、時間が余ってしまう。 だから他の楽しみを見つけるわけだ。音楽でも映画でも、ゲームでも何でもいい。 Linuxだって、いっぱいある楽しいことの中のひとつ。
508 :
login:Penguin :02/10/26 01:12 ID:rW1xbOyc
ここはカーネルの仕組みを勉強するスレです。
509 :
login:Penguin :02/10/26 06:57 ID:D0xVkV9N
勉強して、どうするのですか?
510 :
login:Penguin :02/10/26 15:04 ID:UK314aqB
勉強しないでどうするのですか。
スレッドを作る方法がいまいちわかんない Pスレッドで作ってもなんかプロセスが見えるんだけど そういうもんだっけ?
>>512 cloneで作ってるなら見える。
linux-threadはclone使うし。
>>513 (゚∀゚)サンクスコ
Pスッドレは中でclone呼んでるっぽいし
しょうがないのか
515 :
login:Penguin :02/10/29 06:45 ID:JuHHTy9a
LinuxをC++なぜで書かないのかって質問に、カーネル開発者は ・開発初期のg++コンパイラが良くなかった。 ・今から書き換えると、(コードの行数を作業時間で割って)とてつもなく無駄だ。 と言う理由らしいのは周知かと思いますが、 実際仮にC++でこれから書いたとしたら、どうなりますか。 実行速度や、開発のしやすさとか、いろいろありますが。 (質問が抽象的でゴメソ)
517 :
login:Penguin :02/10/29 14:33 ID:rOSc35bh
2.4.20-pre* のパッチって、何に当てるんですか? 2.4.20にあてるのかとおもったけど、まだでてないよ 2.4.19にあてるの?
C++でのメリットってあるかなぁ。
>>520 -preのイミをかんがえろ。
ここは勉強スレであって質問スレではない。
>>521 pre=前
だから、pre20だったら20個前、pre1ならひとつ前=最新
ということ?
523 :
login:Penguin :02/10/29 15:52 ID:kF5lRjj2
>>247 2.4.20は出てないけど、
2.4.20-preは出てる。
2.5.44でxconfigしようとするとエラーになるんだが..
せめてエラーの内容くらい書けや。 何とも言えん。 Tcl/Tkのバージョンが上がったとかじゃないのか? …あと、開発版カーネルで文句があるならさっさとバグレポートしてcontribute。
結論は 2.4.19のソースに2.4.20-pre*を当てるってことか
>>527 そんなのないじゃん
rc*って出てるやつにあたるんじゃないの?
>>529 見たよ。
rcってのもpreと同じく一つ前のにあたるってこと?
だいたいマスターした
532 :
login:Penguin :02/11/02 09:32 ID:HLU1eDtI
三連休、リナックスで遊んでるヤツは不幸だと思う。
>> 532 世の中は三連休。リナックスで仕事してる漏れは幸せだね。畜生!
3連休ってなんのこと?
535 :
login:Penguin :02/11/03 23:04 ID:I26+7Mmp
3Com(R) Megahertz(R) 10/100 LAN PC Card Product 3CCFE574BT をサポートするカーネルのヴァージョンが知りたいのですが いろいろ調べたのにわかりませんでした。 ちなみにSlackware 3.5.0 Ker.2.0.2 です。
>>535 スレ違いな気もするが…
まずは対応しているpcmcia-csを調べろ。
カーネルはたぶん2.2以降。
537 :
login:Penguin :02/11/03 23:32 ID:I26+7Mmp
ありがとです。一応2.2以降を調べたんですが。。。
538 :
login:Penguin :02/11/03 23:51 ID:eky+Yott
>>537 手元の pcmcia-cs 3.2.1 の SUPPORTED.CARDS によると
3c574_cs.o で使えるよ。
>>537 そいつのドライバが入ってるのは、pcmcia-csだから、
そっちからあたった方がいいよ。
2.4ならkernel pcmcia-csで対応してると思うが。
540 :
login:Penguin :02/11/05 18:27 ID:Mw3FkA2f
皆さんが優秀なハッカーの方たちと見込んでお聞きしたいのですが、
RedHat7.2上でデバイスドライバを作っていて、それを最近リリースされた
RedHat8に移植しようと思っているのですが、何故かコンパイルが
通ってくれません。
自分のソースに不具合があるのかと思い、
ttp://ime.nu/www.hemamu.com/dev/linux/pci/index.html で公開されているソースをコンパイルしようとしましたが、
それでもできませんでした。
どなたかこのような不具合の解決方法をご存知でしたら、
ご教授下さい。
>>540 たまにあるけど、構造体の定義が変わってるとか。
kernel-headerをインストールしてなかったと言うオチは禁止。
542 :
login:Penguin :02/11/05 18:41 ID:aQPE60cC
>>541 かなり落としてしまいますが、kernel-headerの意味が
わかりません(´д`)
たぶんOSのインストールの際の事だと思うのですが…。
現在のシステムは7.2からのアップグレードで、
少し不安があったのでフルインストール(Up Grage)
しました。
kernel-headerの意味が分からなくて、デバドラ作った君に乾杯。 (´・ω・`)
544 :
login:Penguin :02/11/05 20:18 ID:Kq5dWAfB
>>542 Red Hat 7.2 までは kernel-headers パッケージが存在したのだが、
Red Hat 7.3 以降では無くなってしまった。
代わりに kernel-source パッケージをインストールして、
/lib/modules/バージョン/build/include/ にあるカーネルヘッダを使え。
/usr/include/linux/modversions.h も見れ。説明が書いてある。
>>542 コンパイルが通ってくれません
であれば、原因しぼれるでしょ。動きませんなら少し難しいけど。そんなファ
イル無いとか、そんなstructのメンバ無いとか、そんなのとちがう?
>>544 カーネルのこと全くわからないのですが、glibc-kernheadersってのは代替じゃないのですか?
547 :
login:Penguin :02/11/05 23:30 ID:iivfSIhp
>>545 ええ、struct inode やstruct file
などのファイルがないと、いわれました。
それだけではなく、file_operationの構成も
違うって怒られました。
その他あげたらきりがないです(爆
エラーの予想は付いていたのですが、OSのインストールの際にも
Kernel開発用のパッケージをインストールしたのですが、
それでもダメでした。
>>547 kernel-source パッケージはインストールした?
/usr/src/linux-2.4 を/usr/src/linux にシンボリックリンク張ってる?
549 :
login:Penguin :02/11/05 23:43 ID:iivfSIhp
>>548 あります。
ちなみに7.2でコンパイルしたデバドラを
-f オプション付きでinsmod したら組み込むときに
文句をいわれましたが、正常に動作してくれました。
>>549 /usr/src/linux/include/asm
ある?
なかったら、そこでカーネルを一回作る。
551 :
login:Penguin :02/11/05 23:48 ID:iivfSIhp
549です。 しかしMakefileなどを使って自動的に インストールできるようにしたいので、 コンパイルの必要性が出て来たのです。
552 :
login:Penguin :02/11/05 23:51 ID:iivfSIhp
>>550 すいませんが、今すぐには確認できません。
そこでKernelを一回作るというのは、現在の
Kernelを再構築する、ということでよろしいのですよね?
そうするとasmディレクトリが構築される、
と言う解釈でよろしいでしょうか?
553 :
550 :02/11/05 23:58 ID:5JSfVnIm
>>552 そう。
configだけでもいいんだけど。
再構築しておけば、いろいろ試せるはず。
554 :
login:Penguin :02/11/06 00:02 ID:yIb370Cf
>>553 make configですね。
では試してみます。
ありがとうございました。
ここまで読んだ。 カーネルを全然知らない香具師がデバイスドライバを作ったと主張 する珍妙なスレであった。
556 :
login:Penguin :02/12/18 23:47 ID:cj+DVOLQ
どのソースから読み始めましたか?
557 :
Tovacox :02/12/19 00:00 ID:D9IEsFe0
./kernel/sched.cですね。 とりあえずカーネルの中身を見るときなどは、 なぜか。 %emacs kernel/sched.c って打ってしまいます。。。
>>556 init/main.cだったと思います。基本ですね。
最初に読んだのは1年以上前なので、よく覚えてないなー。
最近はarch/某archとかinclude/asm-某archしか見てません。
>>556 grep -r cache kernel
だったかと。
いやね、freeで表示されるbufferとcachedの違いがわからなくてさ。
560 :
login:Penguin :03/01/05 01:38 ID:CxZrKX7Y
スレ間違えたのでここで質問します。。。 Kernel構築してるんですが、ほとんどmoduleにしたらbzImageが2MB位。 そのmoduleってどこにあるんですか?
ほとんどモジュールにして、 どうして2Mもいくのかが不思議だ、、、
2.5.54だからかな...
564 :
login:Penguin :03/01/06 02:25 ID:polLPkwq
FreeBSDなのでスレ違いかもしれませんが、、、 カーネルを間違って、削除してしまいました・・・(TT; (ファイルを整理していたら、誤ってrm /* を実行してしまったようです。) カーネルを修復する方法はありますでしょうか?? 当然の如く、再起動したらカーネルが見つからないと言われ、起動できなくなってしまい。 WEBで調べましたが、再構築の情報ばかりで、削除してしまった場合の対処方法はあまり載ってませんでした・・・ 重要なデータが残って、仕事に影響が出るので、再インストールは避けたいのですが、 すいません、助けて下さい。。。
566 :
login:Penguin :03/01/07 16:55 ID:YuiOuLjn
IPの記録はまじでやめてほしい
泣くなよw>ID:ZBsKvw39
569 :
login:Penguin :03/01/13 21:12 ID:+j4oRwV/
Kernel 2.4.20でUDFのPacket Writeを有効にしたいんですが、 どうしてもチェックが入りません。なんで?
>>569 CONFIG_EXPERIMENTALを有効にしないとダメらしいが。
572 :
山崎渉 :03/01/15 11:22 ID:dWXij4Sa
(^^)
573 :
login:Penguin :03/01/17 22:57 ID:quy9Xyzw
575 :
login:Penguin :03/01/18 01:25 ID:xFnceJeM
>>574 あそこはいつも翌日の日付を付けてるみたいだ。
こまかいことは気にせず、まぁ読んでみ。
あ、図が動いてる。
576 :
login:Penguin :03/01/20 12:36 ID:+ihWiA7A
後編期待age
577 :
login:Penguin :03/01/26 14:47 ID:/P1ziCIb
579 :
554 :03/02/10 09:52 ID:XA+hpjDH
>555 今日久々にコンパイルの問題を考えてみました。 するとnetでgccの代わりにkgccを使えばいいとあったので つかってみたら、何の問題もなくコンパイルできました。 カーネルを全然知らない香具師のぼくには、何でかの原因は わかりませんが、とにかく解決してよかったです。 以上報告終りです。
>>579 赤帽ですか。
gccのバグに引っかかって失敗すると言うやつですな。
581 :
login:Penguin :03/02/22 01:02 ID:Aw4V0i4X
582 :
login:Penguin :03/02/22 05:16 ID:IqNw328W
> これはどこのやつを参照しているのですか? そこで正解。 基本的にカーネル内は一つの名前空間で作るので、どこのxtimeもそこを参照します。 > それは何か理由があるのですか? .h といえば extern か static inline だろー。それ以外に何を期待したの?
584 :
login:Penguin :03/02/22 15:40 ID:RdpbwtMM
レスありがとうございます. >583 >.h といえば extern か static inline だろー。それ以外に何を期待したの? externは「参照」であって「定義」ではないわけですよね. なぜヘッダファイルでexternをつけないで「定義」していないのかなあと思いまして. __attribute__で16バイト境界にxtimeを割り当てるのは.hファイルではできないとか? static inlineって普通のstaticとどう違うのですか?
585 :
login:Penguin :03/02/22 19:31 ID:U6el7Ruf
>>581 またアニメーションGIFが使われとるね。
後編が楽しみage
>>584 そもそもexternなんて付けなくてもいいんだから。
けど一応付けとくのが作法とされてるだけでは?
587 :
>586 :03/02/22 22:05 ID:kUvFWPe5
C言語では, 何も付けずに外部変数を宣言→実際にその変数のために記憶領域を割り当てる=定義 externをつけて外部変数を宣言→その変数のために記憶領域を割り当てない=参照 というのがルールですよね? その意味で付けると付けないのとは全く意味が違うと思うのですが・・ (実際にminixではEXTERNというマクロを宣言して区別しています) それともLinuxは特別なルールがあるのでしょうか?
>>587 .hの中で実体を定義すると、二ヶ所でインクルードした時悲劇がおきます。
と言うことでいいのかな?
気にした事ないけど、.hでは実体を作らないルールなんでしょうね。
589 :
>588 :03/02/23 01:52 ID:6VcEAka+
>気にした事ないけど、.hでは実体を作らないルールなんでしょうね。 そうなのですか.ありがとうございました. 実体の定義が一カ所にまとめられていないのを初心者なので何となく気持ち悪く思って. ここの掲示板は親切に答えてくれる人が多いのでいいですね. 他に日本語でカーネルに関するページ (JFなどの一般的な情報ではなく疑問を掲示板などで活発に議論しているところ) を教えていただけると嬉しいです.
>>584 そのexternの行はきっと参照ではなく宣言です。プロトタイプ宣言。
宣言は .h に
定義は .c で .hをインクルード(このときexternは嘘だが無視)
参照は .c で .hをインクルード
だろー。
なおstatic inline は、externに定義/参照されない真のinlineですよ。
だから 実体を定義をしてはいけない .h 内に書いても大丈夫。
>>587 嘘を無視なのでEXTERNはつかわないみたい。
ただし、extern inlineの場合は一箇所で定義して、他で参照しないといけな
いので、EXTERN_INLINE をdefineする例があるみたい。asm-alphaあたり参照。
>>589 補足
あ、「linuxのカーネルでは」という話ね。嘘を無視するかどうかは特に。
「嘘を無視する」というのはexternを使って参照宣言をしたくせに, 実体定義を同じモジュールでやるということですよね?
>>592 うん。そういう意味(外と宣言しておきながら中で定義をする)で使ったの。
Cの仕様もgccの仕様も読んだことないので、正しくないのかどうかは知らないの。
カーネルの前にC言語を勉強するひつおうがあるのではないかもし
596 :
login:Penguin :03/02/26 05:17 ID:xM3Oh9Db
自分で書いたカーネルモジュールがコンパイルできません. 自分で書いたコードより以前のヘッダファイルで大量のエラーが出ます. kernel-sourceもkernel-headersもあるし,includeファイルもリンクされているのですが・・ (以下statの出力の抜粋) File: "/usr/src/linux" -> "linux-2.4.18" File: "/usr/include/asm" -> "../src/linux/include/asm" File: "/usr/include/linux" -> "../src/linux/include/linux" 何かファイルがないのかと思い,試しにカーネルをコンパイルしてみましたが, 何の問題もなくカーネルイメージを作成できました. ネットで調べてみましたが,コンパイルでつまずくことはあまり無いらしく, 原因を突き止められませんでした. また,ネット上のカーネルモジュールのサンプルコードを使ってコンパイルしたときも ヘッダファイルに大量のエラーが出て,コンパイルできませんでした. 考えられる原因は何でしょうか? どうか宜しくお願いします.
-I/usr/src/linux/includeを付けるとコンパイルできました.馬鹿すぎる・・ すいませんでした.あまり本は信用できませんね. ってか,シンボリックリンク張ってるのになぜ??
598 :
login:Penguin :03/02/26 06:26 ID:awPWSoM5
>>597 $ man gcc
$ info gcc
>>598 マニュアルは質問する前に読みました.
問題は"/usr/include/linux" -> "../src/linux/include/linux"
というシンボリックリンクが張られているにも関わらず,
gccで-Iオプションを付ける必要があったということなんですが・・
私も同じsymlink貼ってあるけど-Iなしでちゃんと動くよ?
>>600 はい.カーネル本やサイトでのコンパイルの書式にも-Iオプションは含まれていませんでした.
シンボリックリンクがあるから当然なことかもしれませんが.
カーネルコンパイルの時にモジュールもコンパイルしたのですが,その時には-Iオプションを
付けていたのでもしかしたらと思い,-Iオプションを付けるとコンパイルできたのです.
>
>>601 リンク張った先がincludeの検索パスに入っていなかったとか。
>>602 /usr/includeがパスに入っていることは確かです.
他のユーザプログラムはちゃんとコンパイルできましたから.
/usr/includeがパスに入っていれば#include <linux/kernel.h>とすれば,
/usr/include/linux/kernel.hがインクルードされると思うのですが・・
で,"/usr/include/linux" -> "../src/linux/include/linux"なので,
/usr/src/linux/include/linux/kernel.hがインクルードのはず.謎です.
"/usr/include/asm" -> "../src/linux/include/asm"
"/usr/src/linux/include/asm" -> "asm-i386"
です.ちなみに今回のモジュールは
>>582 のやつです.
asmはincludeしませんでした.
コンパイル後は正常に動作しています.
>>605 おぷしょんは? -nostdinc がついてるとかいわない?
>>606 -Iオプションを付けない場合のエラーの行数が膨大すぎてよくわかりません.
出力のリダイレクトもできないようですし・・・
試しに-nostdincを付けてコンパイルするとincludeファイルが無いという
エラーが出るだけです.
>>607 ちょっとまった。
もとのエラーはなに? includeファイルがないってエラーじゃなかったのかな?
それと、リダイレクトなら make >& ファイル でできるとおもう。
>>608 includeファイルがないので、そこでの宣言に依存する部分が
山ほどエラーになるって事では?
>>607 リダイレクトするなら、-v付けて途中経過も見れた方がいいかも。
>>608 >もとのエラーはなに? includeファイルがないってエラーじゃなかったのかな?
はい.ヘッダファイル内での大量のparse errorやundeclaredです.
>>608 ,609
結局端末のスクロール行数をでかくして見てみました.エラーは
/usr/include/linux/kernel.h:73: parse error before `size_t'
/usr/include/linux/kernel.h:75: parse error before `size_t'
/usr/include/asm/string.h:47: parse error before `size_t'
/usr/include/asm/string.h: In function `strncpy':
/usr/include/asm/string.h:61: `src' undeclared (first use in this function)
/usr/include/asm/string.h:61: (Each undeclared identifier is reported only once
/usr/include/asm/string.h:61: for each function it appears in.)
/usr/include/asm/string.h:61: `dest' undeclared (first use in this function)
/usr/include/asm/string.h:61: `count' undeclared (first use in this function)
.....という感じです.
>>610 /usr/include/linux はもともとglibc-kernheaders に含まれるヘッダがおかれる場所だろ?
ユーザプログラムで使うヘッダだよ。
あと、-Iで指定するなら/lib/modules/`uname -r`/build/include の方がいいな。
>>612 >/usr/include/linux はもともとglibc-kernheaders に含まれるヘッダがおかれる場所だろ?
>ユーザプログラムで使うヘッダだよ。
そうだったのですか.
カーネル空間のプログラムを作るときは使うべきではないのですね.
>あと、-Iで指定するなら/lib/modules/`uname -r`/build/include の方がいいな。
そうします.リンク先をミスするのを防ぐためですね.
ありがとうございました.
>>612 マジスか。知らんかった・・・
というかどこかで
/usr/include/linux -> /usr/src/linux/include/linux
とすべし というのを見たことがあったので鵜呑みにしてた
ちょっと調べるかな
カーネルのincludeのなかでも、カーネル用とユーザでも使う定義と混在して いて#ifdef KERNEL 等できりわけてあるの。で、glibcとkernelの開発が順調 ならここは同期するので、コピーしてもいいのですよ。 新しいカーネルで古いglibcを使うとかなると、だめになる状況が発生するの。 glibc はパッケージ化するときに glibc-kernelheaders として、その glibc をコンパイルしたときに期待したカーネルのヘッダをとりこむので、どっちかっ ていうとこっちを使ったほうが安全だけど、基本的にはlibcはカーネルと合せ てつくらないとだめです。
616 :
login:Penguin :03/03/10 22:33 ID:/SdozaOc
617 :
:03/03/10 22:36 ID:2NUIK5HA
618 :
login:Penguin :03/03/17 21:44 ID:7QyIeJjo
619 :
login:Penguin :03/03/19 03:08 ID:suPCGW2S
2.4把握もしてないのに…厳しい
オライリーの「詳解Linuxカーネル」で勉強中なのですが、 この本はKernel2.2用にかかれています。 2.2を学んだあと、2.4になって変更された部分などを知るのに適した 書籍などってありますでしょうか?
621 :
login:Penguin :03/03/21 00:19 ID:DvPk6Xi8
622 :
Jet Charles :03/03/25 20:22 ID:Px5e54WH
カーネルモジュールに定義する関数で大きめの構造体を渡す とときどきpanicになってしまいます。再現性が低いのですが 構造はstruct {unsigned int spectrum[2048],int start,int end}; な感じです。 ポインタで渡すことにしたら問題は無くなったかに見えるのですが、 いまいちピンとしません。 C言語ではこういう配列わたしちゃいけないのですか?(仕様など) or カーネルではいけないのですか?(サイズなど) ユーザスペースで動くテストプログラムはうまく走るので バグ混入を恐れつつ開発継続中。 どなたかご存知の方がいればよろしくお願いいたします。
>>622 カーネルスタックはそんなに容量ないです。
でかい領域が欲しければ、素直にkmallocしましょう。
>>622 カーネルスタック小さいからだめ。Cの仕様ではかまわない。
でもね。実際的にはだめ。コストを考えなさい。
625 :
Jet Charles :03/03/27 06:23 ID:Kwn8SiQb
ありがとう。>623、624 おかげで不安は減りました。 スタックのサイズは同時にはしる全てのモジュールが 関わるにもかかわらず、OSが落ちるというのも考え ものですね、、
>625 なんのためのオープンソースなのですか?このプロセスがあるから、 キミのような腐ったモジュールが排除されるのです。 lkmlでは自動的にスタックをたくさん使っている関数を列挙するツールや、 それで見付かったスタック喰いの関数の書き直しを精力的にやってますよ。
>>625 確かに、ユーザ空間のようにスタックを保護してくれると便利かもしれないの
ですが、OSだったりファームウェアの場合は必ず、ユーザアプリも多くの場合
は、スタックの量を、事前にちゃんと設計しないとだめです。
それに、残念ながら、Linuxではドライバは、スタックに限らず、どんな破壊
工作でもできるので、スタックだけ保護してもさほど意味ないのですよ。弱ー。
>>625 ドライバでそういう事するのが、そもそも間違っているという説もあります。
>>627 カーネルとドライバが同じ権限で動いている限り、どのOSでも避けられない問題のような気がしますが。
>>627 > カーネルとドライバが同じ権限で動いている限り、どのOSでも避けられない....
うん。つまり、カーネルとドライバが違う権限で動いているOSでは避けられる。
632 :
山崎渉 :03/04/17 12:11 ID:PWISM87M
(^^)
633 :
山崎渉 :03/04/20 06:09 ID:X64WTq1+
∧_∧ ( ^^ )< ぬるぽ(^^)
そろそろ、2.6の季節なのですが。
インテル C++ コンパイラ で最適化したバイナリ群で構成されたディストリビューションってありますか? あるいはgccでガチガチ最適化カマしたやつとか。
>>636 Intelコンパイラは知らないけど、gcc で最適化するのなら自分でリビルドすればいいのでは?
イマドキのマシンなら30分くらいで終わるっしょ。
// 俺のじゃ丸半日掛かるけどなー
>636 そんな貴方にGentooLinux (iccも使える、、と思うけど、そっちはよーしらん)
>>636 なぜCではなくC++? なのかは置いておいて、
今のバージョンのintel C compilerだとLinux kernelがコンパイルできんので無理。
というか羊頭狗肉になっちまう。
次期バージョンでkernelがコンパイルできるようになったら
それを売りにするディストロも出てくるかもな。
gcc最適済ディストリは今は無き?stampede Linuxがやってたが、
gentooとかなら自分でできるだろ。
640 :
山崎渉 :03/05/22 02:18 ID:VfjbtMwi
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
641 :
login:Penguin :03/05/24 02:05 ID:pFXNmjMb
プロセスディスクリプタ構造体task_structに新しいメンバを加えたいのですが,普通に加えても大丈夫でしょうか? ソースのコメントに「これらのオフセットはハードコードされている.注意して扱うように.」みたいなことが書いてあるのですが.
>>641 忠告に従ったほうがいいかも。
どっかの地雷をふむかもしれないよ。(w
>>641 archによる。
アセンブラのコードで直接見ていることがある。
Cの方はオフセットがずれて困るところはないはず。
>>643 いぁ、ちょと見てみたんだが。
Cでtask_struct構造体ポインタに対してaddする個所があった。(ちなみにi386ね)
grepしてみたけど修正してできない量ではない。
けど、結構気をつけないといけないかも。
645 :
初めて :03/05/24 11:12 ID:3ITeRmp+
今カーネルの再構築しているのですが、 何度やっても Uncompressing ... Ok,booting the kernel. で止まってしまいます。 理由がわかりません。 なにかチェックする項目を飛ばしているのでしょうか? 2.4.20で起動するconfigからmake oldconfigで再度.configを作っているつもりなのですが。 これだけでの情報では原因を推測することは無理でしょうか? OSはRedhat9.0で、再構築したいカーネルは2.5.69です。 どなたかアドバイスを頂けないでしょうか? よろしくお願いします。
646 :
643 :03/05/24 11:21 ID:Ac66WbG3
>>644 そんな所あったっけ?
しばらくi386依存部分は触っていないから、記憶が薄れつつあるなー。
>>645 おとなしく2.4.20を使う。
2.5.69はハードウエア構成によっては、そういう問題がおきます。
>>645 問題が起きたらデバッグしてください。2.5シリーズというのはそのためのものです。
648 :
644 :03/05/24 15:13 ID:PMIRyT6T
>>646 copy_thread関数での以下の個所
int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
unsigned long unused,
struct task_struct * p, struct pt_regs * regs)
{
struct pt_regs * childregs;
childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p)) - 1;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ここ
649 :
644 :03/05/24 15:31 ID:PMIRyT6T
>>645 >2.4.20で起動するconfigからmake oldconfigで再度.configを作っているつもりなのですが。
>これだけでの情報では原因を推測することは無理でしょうか?
>OSはRedhat9.0で、再構築したいカーネルは2.5.69です。
make oldconfigではなくmake mrproperからmakeしてみては?
650 :
643 :03/05/24 17:06 ID:Ac66WbG3
>>648 ああ、それか。
先頭アドレスを使うだけなので、サイズが変わっても問題なし。
651 :
644 :03/05/24 19:06 ID:PMIRyT6T
>>650 ん、そうか。
これは、最適化するためのページサイズでのコピーか。
スマソ
652 :
645 :03/05/24 19:30 ID:3ITeRmp+
すいません。初歩的な質問なのですが、 make oldconfig というのは、 そのフォルダにある、.configをもとにして足りない所を補い,新たな.configを 作成するというのであっているのでしょうか? そのとき作成にしようした.configはoldとかにリネームして。 よろしくお願いします。
>>652 linux/scripts/Configure
読みなされ。
足りないところは聞いて来るはずだが。
>>645 の症状ってカーネル2.2の時の経験だと、
以降のboot messageがserialに出力されていた事があるけど、
これって2.4の話? 2.5の話?
654 :
643 :03/05/24 20:17 ID:Ac66WbG3
>>650 じゃなくて、お子さまプロセスのカーネルスタックの位置を計算しとるのですよ。
んで、計算した所に親の情報をコピーすると。
>>653 2.5はKconfigになってもーたので、scripts/Kconfig/confです。
挙動は変わらんが。
シリアルコンソールは、起動時に"console=〜"渡さないと有効にならないと思ったが。
655 :
644 :03/05/24 21:10 ID:PMIRyT6T
>>654 ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p)) - 1;
これって親のtask_structからレジスタ情報を取得してるってこと?
で、
struct_cpy(childregs, regs);
親プロセスの現レジスタを子スレッドのレジスタにコピーして、
childregs->eax = 0;
childregs->esp = esp;
子スレッドのスタックを初期化して、
p->thread.esp = (unsigned long) childregs;
p->thread.esp0 = (unsigned long) (childregs+1);
親のスレッドスタックに生成するスレッドとその次のスレッドを設定して、
p->thread.eip = (unsigned long) ret_from_fork;
親スレッドの実行開始ポインタにcloneの戻り値を設定して、
savesegment(fs,p->thread.fs);
savesegment(gs,p->thread.gs);
親スレッドのセグメントレジスタを子スレッドに設定して、
unlazy_fpu(current);
struct_cpy(&p->thread.i387, ¤t->thread.i387);
ここらがよくわからんが。
ってこと?
656 :
645 :03/05/25 00:25 ID:XrZOXyc/
646,647,649,653の皆様、お答えいただきどうもありがとうございました。
657 :
643 :03/05/25 00:59 ID:Ix3J6K8u
スレタイらしい話しになってきたな。
>>655 > ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p)) - 1;
自分のスタックのアドレスを計算してるのです。
task_structのアドレス=カーネルスタックの先頭アドレスなので、
そこにサイズを足してカーネルスタックの最終アドレスを求めて、
これからセットするデータの分だけ手前にもどす。
> struct_cpy(childregs, regs);
正解。
> childregs->eax = 0;
> childregs->esp = esp;
> p->thread.esp = (unsigned long) childregs;
> p->thread.esp0 = (unsigned long) (childregs+1);
大体正解。cloneの戻り値はeax
> p->thread.eip = (unsigned long) ret_from_fork;
自分に制御が回ってきた時、ret_from_forkから実行開始。
> savesegment(fs,p->thread.fs);
> savesegment(gs,p->thread.gs);
正解。
> unlazy_fpu(current);
> struct_cpy(&p->thread.i387, ¤t->thread.i387);
コプロのレジスタをコピーしているのです。
658 :
641 :03/05/26 12:16 ID:L9Tg8SeE
>質問に答えてくださった方々 ありがとうございました. 皆さん凄いっすね.
659 :
login:Penguin :03/05/26 22:52 ID:IXHBibv2
make のときのメッセージの出し方が変わったね。 CC kernel/timer.o CC kernel/user.o みたいな感じでなかなか新鮮
660 :
_ :03/05/26 23:12 ID:5mPv2JRl
661 :
bloom :03/05/26 23:13 ID:8OPOVfmH
>>659 そのへんもだいぶ変わったからねえ…
make depなくなったし。Makefileの書き方も変わったし。
まあ、そのへんはどうでもいいんだけど、Kconfigの書き方が未だによくわかりません。
昔のドキュメント位詳しい物を早く書いてくれ。
663 :
login:Penguin :03/05/28 02:46 ID:ZVfjfeIZ
2.4系でシステムコールをインターセプトしてコンソールに文字列を出力するモジュールを書きましたが, うまく動作しません.
664 :
login:Penguin :03/05/28 02:55 ID:ZVfjfeIZ
すみません.663は僕です. 以下がソースです. #define MODULE #define __KERNEL__ #include <linux/kernel.h> #include <linux/module.h> #include <linux/sched.h> #include <linux/types.h> #include <sys/syscall.h> MODULE_LICENSE("GPL"); int (*real_setuid)(uid_t); extern void *sys_call_table[]; int new_setuid(uid_t uid){ printk("system call was intercepted(setuid).\n"); return (*real_setuid)(uid); } int init_module(){ real_setuid = sys_call_table[SYS_setuid]; sys_call_table[SYS_setuid] = (void *)new_setuid; printk("system call intercept(setuid) attached.\n"); return 0; } int cleanup_module(){ sys_call_table[SYS_setuid] = (void *)real_setuid; printk("system call intercept(setuid) detached.\n"); return 0; } このモジュールをinsmodで組み込んでsetuidを実行する簡単なプログラムを実行してみましたところ,/var/log/messagesには意図した文字列が出力されません. 自分でもがいてみましたが,原因が分かりませんでした.どなたかご教授お願いします.
665 :
山崎渉 :03/05/28 16:40 ID:4u9ffZfO
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
>>664 モジュールから上書きしていいものかどうか知らないけど、
int init_module(){
real_setuid = sys_call_table[SYS_setuid];
sys_call_table[SYS_setuid] = (void *)new_setuid;
printk("sys_call_table=%p,sys_setuid=%p,new_setuid=%p\n"
,sys_call_table,sys_call_table[SYS_setuid],new_setuid);
printk("system call intercept(setuid) attached.\n");
return 0;
}
みたいにして、予定通り書き変わっているか確認するしか無いでしょう。
667 :
login:Penguin :03/05/29 06:56 ID:4nmgTop1
(・∀・)renice!
668 :
_ :03/05/29 07:04 ID:yrkPpXVA
669 :
bloom :03/05/29 07:13 ID:pdJrRzE3
670 :
login:Penguin :03/05/30 22:16 ID:fuM2ZNep
このスレなんか息吹き返してますな
671 :
login:Penguin :03/05/30 23:09 ID:XCgqHAqg
最近もうカーネルの勉強する暇が無いよ。トホホ…
672 :
直リン :03/05/30 23:13 ID:t6UbAlau
OpenBSDで"スタック領域実行不可能"っていう技術が取り込まれたらしいけど、 i386系はMMUで実行権限の可、不可ってできなかったように 思えたけど(実際には読み込み権限と書き込み権限があって、読み込み権限=実行権限) 実際、OpenBSDはどういう実装なんでしょうかね?
>>673 i386は実装中じゃなかったっけ?
思い付くのは、P落としておいて例外処理でごにょごにょ…って激しく遅くなりそう。
>>666 ありがとうございます.
やっぱりちゃんとアドレス自体は書き換えているようです.
で,他のシステムコールは正常にフックしています.setuidだけ(全てを確かめたわけではありませんが)が変なようです.
ライブラリを使わずに直接例外でsetuidを発行するとフックできました.
glibcのソースを見てみましたが妙なところは見あたりません.フツーのスタブのようです.
他のユーザID変更のシステムコールを使って発行しているのかな,とか思ったりします.
いずれ確かめます.
676 :
login:Penguin :03/06/02 15:53 ID:Sji9M+OK
ある負荷のとても高いサーバで、sysstatで監視をしだしたら午前5-6時に RT signalを100%使い切るという結果がでてます。。。 loglotateでこーなるのか??? RT signalってなに?? いろいろ探してみたのですが、なんでかわかりません。。。 だれかおしえてください。すみません。おねがいします。
スレ違いでつが?
678 :
login:Penguin :03/06/02 16:10 ID:Sji9M+OK
すみません。聞き直します。
RT signal = リアルタイムシグナル と想定、
http://www.mmjp.or.jp/sunami/linux/kernel/ によると、
なんらか(ソフトウェア、ハードウェア)のシグナルの割り込み処理が
いっぱいいっぱい発生しているものと理解。
loglotateなどディスクをすごく使いそうな処理でこういう自体が
発生しているものと予想。
カーネルにとってRT signalのリミット100%を使い切るような処理
は日常茶飯事であって別に心配するこたぁないのか。
なんらかの対策をするべきことなのか、知りたいのです。
/proc/sys/kernel/rtsig-max が現在1024ですが、使い切っている
から安易に調整するべきものなのか、それとも運用を変えるべきなのか。。。
早朝にslocateとか動いてるんじゃないの?cron.dailyなんかのスクリプト はずせば? 俺、リアルタイムで画像を記録するサーバ書いたんだが、slocateとかの おかげで取りこぼしがでたからスクリプトはずしたよ。
680 :
login:Penguin :03/06/12 03:53 ID:+ZjTB6j3
664のようにシステムコールをフックするモジュールを数十種類のシステムコールについて 試したのですが,唯一execveをフックするようにした時のみアプリケーションの起動で segmentaion faultが起きます.アプリケーションが何も起動できません. カーネルの中で起きているのでgdbが使えません. 皆さんはカーネルデバッグはどうしているのですか? やっぱりUML+gdbとかですか? それとカーネルモジュールのデバッグもUMLとかでやれるのでしょうか?
kgdbよろ
>>680 あの方法を使ったら、そうなるでしょうねえ。
(v)fork/clone/execveはアセンブラ使わないと無理でしょう。
デバッグは大体printkで。
kdbを使ってみたいなーと思う事もあるけど
2.5に対応していないので、使えない。
683 :
login:Penguin :03/06/12 11:20 ID:+ZjTB6j3
>>681 kgdbは確かデバッグを行う別のマシン(OS)が必要ですよね?
家は一台しかlinuxにさけるPCがないので,仮想マシンにするならUMLを使いたいです.
>>682 >あの方法を使ったら、そうなるでしょうねえ。
>(v)fork/clone/execveはアセンブラ使わないと無理でしょう。
なぜそうなるのでしょうか?
また,アセンブラでどのようにすれば実現できるのでしょうか?
というか,特定のシステムコールのフックは通常は
モジュールを使わずに直接sys_*の中を変更すべきなんでしょうが・・
684 :
682 :03/06/12 16:28 ID:uPg3Erb9
>>683 kgdbなら、i386-elfを読めるgdbが動けばlinuxでなくても使えるはず。
んで本題。
arch/i386/kernel/process.cを読めばわかりますが、
system_callの所で作ったスタックフレームの構造に依存しているので、
スタックの状態を維持したまま呼んであげないといけません。
アセンブラなら、
call 自前の処理
mov 元のアドレス,%%eax
jmp %%eax
てなかんじで呼べば問題無いはず。
(i386のアセンブラは最近書いていないので参考程度に)
もう少し汎用的な書き方にならないかなーと思いますが、
CPUコンテキストが絡む話なので難しそうだな。
知っている勇者いたら教えてくれ。 Linux2.5.64のソースにmachとかいうディレクトリがあるのだが、あれは一体なんなんだろうか。 ついでにもう一つ訊きたいのだがmach-voyagerとかいうのもあるのだが、あれは一体なんなんだ? 教えて君ですまん。
>685 machine architecture じゃないの? m68kのmacとかsun3みたいに。 voyagerは確か昔のia32の超SMPマシン(といっても32くらい)、 って、linux/Documentation/voyager.txt があるやん。
687 :
685 :03/06/15 16:25 ID:TNnPLPxB
>686 Think!ミスター。あんた最高だよ。
688 :
login:Daemon :03/06/15 18:47 ID:wufUnmIS
高橋さんの Linux V2.4 カーネル内部解析報告と同程度にざっくり *BSDのカーネルについてかかれたものはないですか?
スレタイ嫁
690 :
login:Daemon :03/06/15 18:51 ID:wufUnmIS
そんなこと言わずにおしえて(はあと
693 :
login:Penguin :03/06/16 04:49 ID:kWhRIl9x
>>684 ありがとうございます.
ユーザプロセスのTSSが保存されたカーネルスタックにforkの場合はcopy_threadで親プロセスのものをコピーし,
execveの場合は search_binary_handler(合ってますか?)でTSSが保存されたカーネルスタックを初期化するので,
これらの(struct pt_regs型を引数を持つ)システムコールをフックする場合は,
フックした関数の中でsys_*を呼び出してはいけないのですね.
で,アセンブラで書くにしてもどうやってモジュールで呼び出せばいいのでしょうか?
自前の処理の関数へのアドレスはどうやって取得すればいいのでしょうか?
それとも/usr/src/linux/arch/i386/kernel/entry.Sのcall *SYMBOL_NAME(sys_call_table)(,%eax,4)
の直前にアセンブリコードを入れるということでしょうか?
できるだけオーバーヘッドを避けたいので,これをやるなら特定のsys_*の中で処理を記述したいです.
>>693 そゆことです。
実際のコードは.cの中にインラインアセンブラで書くか、
別に書いてリンクすればいいのではないかと。
entry.Sをいじる必要はありません。
例のサンプルならnew_setuidをアセンブラで書けば目的は達成できます。
後はカーネルと関係なく、Cとアセンブラを混ぜる話なので、
その方面のスレで聞いて下さい。
#なんでシステムコールを書き換える必要があるのか謎ですが…
#libcでoverrideすれば間に合いそうな気もしますが。
>>695 その引用は2.4までのものでしょ?
2.4までは実行中のプロセスが完了するまで割り込めないと思うけど。
バッファにデータを転送する前にディスクアクセスするようにスケジュールされていたらそうなるんじゃない?
で、引用元には2.6ではカーネルプリエンプションが可能になるのでこういった事態を抑制できると書いてある。
プロセスA,B,C,DがA→B→C→Dの順でスケジュールされいて、Bの実行中にAが割り込みをかけたとする。
【2.4系以前】
Bの実行終了後に再スケジューリング。続いてAを実行する。
【2.5.4-pre6以降】
Bの実行を中断し、再スケジューリング。Aが実行された後でBが再開する。
最も優先順位の高いモジュールで他のモジュールのコントロールを行えば、
リアルタイムでI/Oをコントロールできるから組込みにも向いてると思ってるんだけど。
あってるかな?
697 :
login:Penguin :03/06/24 21:26 ID:/u6LQEV0
>>696 >その引用は2.4までのものでしょ?
ええ、そうです。
で、言いたかったのは、2.4以前だって、引用に書いてあるほどタコな動きは
してないでしょ、と。
2.4以前だって、disk I/Oを開始する時には、(preemptive ではないにしろ)
自主的にsleepして、CPUを他のプロセスに開放するから、ディスクI/Oの間、
他のプロセスが実行待ちになったりはしないでしょ、という意味なんですが。
698 :
login:Penguin :03/06/26 01:32 ID:9kOqx0yK
>>697 ディスクI/Oという点に限れば697の言うとおりだが、
non-preemptiveだと、なかなかsleepしないシステムコールが
他のプロセスの足を引っ張ることは実際にあるように思う。
例えばsyncとか、多分ディスクI/Oというより、バッファ周りの
話なんだろうけど…
>>698 それは解ります。
言いたかったのは、DiskI/O の話だけなので...
DiskI/O で他のプロセスが待たないって話は、タネンバウム論争でも、MINIXとは違う点
として、強調していたポイントなのに、なんで、2.4 -> 2.5 への preemptive 化の説明に
これを持ち出すかなぁ、と。
詳細Linuxカーネルの第2版が出ましたね。 まだまだ初心者なんですけど、 この本を全部読みきって70%理解したら大分詳しくなれるんでしょうか? 他にはどんなことを勉強すればいいのでしょうか? 厨房な質問ですいません。
702 :
743 :03/06/26 23:58 ID:Ryip/f5b
すいません、kernel.orgから落として来た linux-2.5.73.tar.bz2を コンパイルしようとすると、make modules のところで、 CC [M] drivers/net/defxx.o drivers/net/defxx.c:202:2: #error Please convert me to Documentation/DMA-mapping.txt make[2]: *** [drivers/net/defxx.o] エラー 1 make[1]: *** [drivers/net] エラー 2 make: *** [drivers] エラー 2 といったエラーを出して止まってしまいます。 ググッてみても解決につながる情報が見つからなくて・・・ そもそもこの#error Please convert me というのは 何なのでしょう? どうすればエラーを回避できますか?
kernel 2.5.73 を 入れてみた。 $ dmesg | head -1 Linux version 2.5.73 (root@=======) (gcc version 3.3 (Debian)) #1 Fri Jun 27 06:46:45 JST 2003 "module-init-tools" の0.9.9以上が入っていないとカーネルをコンパイルしたあとで最後にdepmodするところでこける。 その他 Documentation/Changes の"Minimal Requirement"に記載されている、特定のバージョンのパッケージが必要。 最初 "Preemptible Kernel" を試したが、bashをexitするときなどに ときどきカーネルがOopsとかナイスなメッセージを出すので、外した。 カーネルモジュールの名前がFreeBSD式の"なんとか.ko"になっている。 bdflushがどうので/sbin/updateがobsoleteだからinitscriptを直せ、とか警告される。 サウンドモジュールがなにやら"unsafe"とかで。 lsmod すると > cs4281 49152 1 [unsafe] のような間抜けなステータスが出る。rmmodできない。 i810のdrm/agpgartカーネルモジュールがまずいらしく、Xのdriを有効にできない。 > (II) I810(0): [agp] GART: no dcache memory found > (II) I810(0): [dri] Unable to allocate backbuffer memory. Disabling DRI. ~~ > (WW) I810(0): xf86AllocateGARTMemory: allocation of 1024 pages failed > (Cannot allocate memory) --- とりあえずvtを切替えても落ちることはない(以前はよく落ちた)。 dri.sourceforge.netにあるカーネルdriモジュールは kernel2.5では使えないようだ。 これ以外は、今のところちゃんと動いているが、ちょっとだけ不安。
704 :
702 :03/06/27 21:05 ID:z7RNnbMR
ひょっとしてカーネルコンパイルの設定とかはクダ質にすべきでしょうか?
>>704 親切に
Please convert me to Documentation/DMA-mapping.txt
と言ってくれているので、まずはドキュメントを読んで見ればいいのでは?
>>697 >初代Linuxから、1プロセスがディスクI/O待ちしている間、他のプロセスが停止したり...
もちろん。そして、そのもとの文も、そうはいってないと思う。
それは、プロセスaのdiskI/Oまちの間プロセスbが止まると読むのではなく、
(おそらくだれか(a)の要求に関連する)disk I/Oの処理がプロセスbのスケジュー
リングを遅延させることを言ってるのだとおもう。プリエンプティブカーネル
(と、プライオリティつきスケジューラ)はそれを改善するものだから。
>>706 >それは、プロセスaのdiskI/Oまちの間プロセスbが止まると読むのではなく、
>(おそらくだれか(a)の要求に関連する)disk I/Oの処理がプロセスbのスケジュー
>リングを遅延させることを言ってるのだとおもう。
うーむ。
何度読んでも、そうは読めないなぁ。それと、そもそも
>エンプティブカーネル (と、プライオリティつきスケジューラ)はそれを改善するものだから。
という理解も間違ってませんか?
2.4だって、I/O処理自体が、スケジューリングを遅延させているわけではないですよね?
自主的 sleep が入らないような類いのシステムコールが、再スケジューリングの遅れ
を発生させるのではありませんか?
http://www.atmarkit.co.jp/flinux/special/kernel26/kernel26_04a.html 上のURLでは、I/O処理完了にともなうハードウェア割り込み用ルーチンが起動した
場合にも、再スケジュールするようになりました、といっている感じですよね。
>>707 漏れの理解でもそうだと思う
2.4では、自分でsleepするか、システムコールの終わりの
ユーザランドに戻る直前でしか、コンテクストスイッチは起きない。
カーネル内でいくら割り込みが起きても、割り込まれたプロセス
の実行に戻る。
プリエンプティブカーネルならば、割り込みがおきたところが
クリティカルセクションでない時には、割り込みハンドラの実行が
終わった所で再スケジューリングされる。
>>708 割り込みから抜けるときも、ユーザーモード実行中でneed_resched立っていれば
schedule呼びます。
でないとcpu握ったままのプロセスがつくれてしまう。
710 :
login:Penguin :03/07/02 01:58 ID:VujfXoME
(・∀・)renice!
./arch/i386/kernel/smpboot.c, do_boot_cpu() の エイヤと、5秒待ち合わせ!みたいな良い加減さは Linux らしくて涙チョチョ切れるね。 2 - 4 SMP くらいだと、問題にならないのだろうけど。
712 :
login:Penguin :03/07/06 21:37 ID:VzJQlVRa
task_struct構造体に int did_exec:1; というメンバがあるんですが,これはどういう意味でしょうか?
713 :
直リン :03/07/06 21:42 ID:wYFJkOTE
>>712 bit fieldだね。
"int did_exec:1"と書くと
did_exec変数の下位1bitのみだけが有効になり、
0か1しか設定されないのさ。
>>716 普通は1に解釈しない?
どーせ1bitしかないからnot 0であればいいんだが。
718 :
712 :03/07/07 00:51 ID:CYZ75cVf
自分では使ったことがないので完璧忘れてました. アホな質問してすいません. 今度からはもう少し調べてから質問します.
>>717 うん。0,1でいきたいので struct { int a:1; } s = {1};とか初期化しちゃう
けど、結局のところ解釈はコンパイラがやるので、例えば s.a >0 ? は偽です。
てか s.a==-1? が真になる。上位1bitが符号だから、それで正しいんだと思う。
0,1にしたければ unsigned int ですね。初期化とも矛盾しちゃって気持悪いし。
720 :
717 :03/07/07 22:07 ID:XJtR7Wyv
>>718 そうか、単純に符号拡張すれば-1か。
実装依存なのかな。
>>712 ,
>>714-720 っていうか、task_struct構造体の
did_exec変数は、名前の通りフラグに使うわけだから
0か0以外の値で判定するだけいいわけです。
実際にsys.cファイルには
>if (p->did_exec)
> goto out;
ってなってるし。
ちなみにsys.cファイルのコメントには以下のメッセージが。(w
* Auch. Had to add the 'did_exec' flag to conform completely to POSIX.
722 :
login:Penguin :03/07/08 01:23 ID:a4iER9hA
(・∀・)renice!
723 :
login:Penguin :03/07/12 12:47 ID:Q71PnbZR
(・∀・)renice!
2.4.22-pre5を使ってみたけど、2.4.21よりもdisk I/O処理時に おいての応答性が上がったけど、コストパフォーマンスが落ちた ような気がする。 やはり、応答性とコストパフォーマンスはトレードオフなのかな。 以下は自作プログラムによるテスト結果 【1分間のファイル読み書き回数】 |2.4.22-pre5|2.4.21 ―――|――――――|――――― 1回 |2588771 |2808551 2回 |2573318 |2865419 3回 |2569311 |2878404 4回 |2576775 |2870706 5回 |2578199 |2868286 6回 |2571464 |2865638 7回 |2588162 |2868531 8回 |2595950 |2863878 9回 |2606366 |2878016 10回|2604069 |2869487 平均 |2585238.5 |2863691.6 2.4.22-pre5の方が1分間のファイル読み書き回数が減少している。
コストパフォーマンスの評価式は? それともパフォーマンスのことなのかな。 アレ(Xとかの応答性向上パッチ)がはいったんだっけ? もしあれなら、あれは いままで相対的にI/OにCPUが渡りすぎてたのを、そっちを減らしてかわりにX に割り当てる量を増やす"改善"をするパッチだから、当然I/O性能はおちます。
>>725 >コストパフォーマンスの評価式は? それともパフォーマンスのことなのかな。
自分が言いたかったのは、多重プロセスがI/O処理中におけるCPU応答性のことです。
>アレ(Xとかの応答性向上パッチ)がはいったんだっけ? もしあれなら、あれは
>いままで相対的にI/OにCPUが渡りすぎてたのを、そっちを減らしてかわりにX
>に割り当てる量を増やす"改善"をするパッチだから、当然I/O性能はおちます。
それは、agp関連の事ですか?
ちなみ、GUI環境ではなくCUI環境でテストしました。
>>725 ChangeLogを見る限りは入ってないなぁ。
io schedulerの修正入ってるから、そっちの影響かも。
関係あると思えないBUG fixなんだけど。
728 :
724 :03/07/13 23:29 ID:UrPfG9sV
しくりました。わけわかんないこと言ってました。
>>726 で言ってる、
>>コストパフォーマンスの評価式は? それともパフォーマンスのことなのかな。
>自分が言いたかったのは、多重プロセスがI/O処理中におけるCPU応答性のことです。
ではなくて、プロセスがdisk I/O処理が終了するまでの合計処理時間です。
729 :
login:Penguin :03/07/14 02:53 ID:YDflspfA
age
カーネルが非SMPでもプリエンティブになったんだっけ? ヤバくない?
もちろんやばい作りのものデバドラとかはヤバいですよ。 カーネルがサポートしたなら、それは今やデバドラのバグです。 でもSMP対応しているものなら大丈夫な"ハズ"ですよ。そーゆートリックですから。
732 :
山崎 渉 :03/07/15 11:16 ID:doz396Fq
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
733 :
login:Penguin :03/07/15 11:57 ID:Fo16Kpwc
(・∀・)renice!
>>730 >カーネルが非SMPでもプリエンティブになったんだっけ?
>ヤバくない?
SMP、非SMPのどちらであろうがカーネルはプリエンティブになっている。
何でやばくなるの?
>>731 >もちろんやばい作りのものデバドラとかはヤバいですよ。
>カーネルがサポートしたなら、それは今やデバドラのバグです。
もし、それでヤバくなるデバドラならそのデバドラの設計ミスでしょ。
>でもSMP対応しているものなら大丈夫な"ハズ"ですよ。そーゆートリックですから。
もしかしてテキトーに言ってますか?
>>734 > もし、それでヤバくなるデバドラならそのデバドラの設計ミスでしょ。
もち。そういう意図の発言です。
> もしかしてテキトーに言ってますか?
spinlockがプリエンプションのポイントになっていることを指して言っています。
要するにカーネルのソースにクリティカルセクションを 守るためのロックプリミティブがちゃんと書いてあれば いいということだろ。 SMPならばtest and setとかの本当のlockをすればいいし、 プリエンプティブのときにはプリエンプション可能かを見る。 従って、CONFIG_SMPとCONFIG_PREEMPT(?)は独立に できるはず。 と、テキトーに思ってみるわけだが。
>>736 SMPとPreemption-kernelは初めから独立して設定できる。
Preemption-kernelのコードはSMPとそれ以外で場合分けされてる。
Preemption-kernelのコードは2.4向けのパッチを見ると良いかも。
738 :
login:Penguin :03/07/22 11:26 ID:6WQ9WMDa
(・∀・)renice!
739 :
login:Penguin :03/07/25 12:51 ID:NH3LXVfX
(・∀・)renice!
740 :
login:Penguin :03/07/28 12:56 ID:YIr5Dzm4
(・∀・)renice!
∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
742 :
login:Penguin :03/08/02 10:31 ID:0p3phC6s
(・∀・)renice!
743 :
login:Penguin :03/08/10 11:15 ID:t5VAEY5s
(・∀・)renice!
744 :
login:Penguin :03/08/11 11:53 ID:5aoknCTf
今のkernelて、何stepくらいあるの?
745 :
login:Penguin :03/08/15 17:22 ID:aL8WrViO
(・∀・)renice!
746 :
abc :03/08/15 18:53 ID:D/wj3em9
747 :
山崎 渉 :03/08/15 22:11 ID:ep0zwfOh
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
748 :
山崎 渉 :03/08/15 22:35 ID:ep0zwfOh
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
749 :
login:Penguin :03/08/16 00:02 ID:+8Yy95I5
(・∀・)renice!
>>744 linux-2.6.0-test3+αで
find -name '*.[ch]'|xargs cat|wc -l
の結果。
5,254,674行
全部把握できたらまちがいなく神。
ちなみに、
find drivers -name '*.[ch]'|xargs cat|wc -l
が、2,516,767行なので、半分ぐらいはドライバだな。
751 :
login:Penguin :03/08/16 14:38 ID:oSWJJuxF
USAGIカーネル(ver2.4.21)を入れたのですが、USBマウスを認識できません。 Initializing USB Keyboard: modprobe: Can't locate module keybdev というNGが出ていたので、 make xconfig で Input core support を m Mouse support を m USB support の USB HIDBP Mouse (basic) support を m としたところ、エラーは消えました。 ですが、マウスを動かしても反応してくれませんでした。 m ではまずいのかと思い、上記のところを y にしてみると今度はNGが 出てしまいました。 もう一つ質問です。 IPv6対応にしたいのですが、Networking options の The IPv6 protocol(EXPERIMENTAL) を m とし それによって増えた項目全部を y としたところ make module_install 実行時 depmod: *** Unresolved symbols in /lib/modules/2.4.21/kernel/net/ipv6/ipv6.o depmod: find_transform_by_name_R027c72c5 と言われました。 これはどのように対処すればいいのでしょうか? ifconfigをやってもIPv6のIPがまったく出てこなくて・・・・・・・ 長い文章で申し訳ございませんが、ご指導よろしくお願いいたします。
752 :
login:Penguin :03/08/25 09:44 ID:ZYMvu5IH
(・∀・)renice!
しつもーん。 NFS経由の多段リンクとかしてたらスタックオーバーフロー とか言ってハングするのだが・・・スタック領域って拡張できるの?
>>753 カーネルスタック?
カーネル作りなおせば増やせるけど、どこに影響が出るかわからんぞ。
>>753 多段リンクの意味がよくわからない。
symlink -> symlink -> realfile ってこと?
756 :
login:Penguin :03/09/01 11:50 ID:MpWyDbPw
(・∀・)renice!
757 :
eiji :03/09/02 13:56 ID:DWK7xXkc
linuxとwindowsのカーネルの仕組みの違いについて教えていただけませんでしょうか。 お願いします。
>>757 そんな漠然とした質問に答えられる香具師は居ないと思われ。
カーネルといったって規模が大きいからな。
カーネルとは何ぞや、ということを先ず本か何か読んで調べるのが吉。
windowsといってもWindows/386の流れとNTの流れで別物だし。
>>754 >>755 ありがとー。実は客にきかれててさー。
カーネルスタックかぁー。触らない方がよさだよなぁ。
でも説明せんといけないし。なんか参考になるサイトないすか?
あ、あと多段リンクはこれであってる。
説明がなかったな。スマソ
一応、制限が5段までで怪しいパッチをあてると8段まで
いけるらしいんだけど、スタックオーバーフローになる。
762 :
login:Penguin :03/09/05 02:29 ID:sR5Y928W
>>761 スタックオーバーフローって、カーネルじゃなくて、
アプリケーションがタコなだけな気も。
カーネル的には、symlink は 20段程度やそこらは大丈夫だったと思ったけど。
(つーか、symlink の循環を検出するために、一応、限度を設定してるだけで、
カーネルでのスタック消費がどんどん増えていく、とかはないはず)
いずれにしても、カーネルで他段symlink限界を超えたときは、ELOOP でしょ。
単に、アプリケーションが自前で lstat() や readlink() を使った挙げ句、
爆死してるとかじゃない?
死んでるのは、なんてソフト/コマンドなの?
杖はどっちの手に持ってるんですか?
764 :
login:Penguin :03/09/06 02:38 ID:6wacLc6H
>>751 IPv6対応にしたいのですが、Networking options の
The IPv6 protocol(EXPERIMENTAL) を m とし
それによって増えた項目全部を y としたところ
usagi/doc/CONFIG.linux24
あたりを読め。意味がわからんやつをyにするな。
>>762 ありがとう!そんな答えが欲しかった。
実は客が何やってるのか今一つかめてないから
判ったらまた書くよ。またよろしく。
766 :
login:Penguin :03/09/15 10:49 ID:I+VNLCRD
(・∀・)renice!
アックス・・・やばいよ・・・
768 :
login:Penguin :03/10/18 22:04 ID:cV4cEMzM
>>767 アックスってやばいの? 死期神を作っている会社だよね?
お金関係は問題ないのでは? 広報は…昔からなのであきらめて下さい。
いや、なんつーか セミナーがあまりにアホ過ぎて 笑いを通り越した
それは提携している所の問題じゃないかと。
772 :
login:Penguin :03/10/24 01:06 ID:8mSLFw8A
ヘッダファイルでexternではなくstatic inlineで記述してある関数には何か理由があるのでしょうか?
inlineの意味を調べればわかる。
774 :
login:Penguin :03/11/01 18:25 ID:BY3sdtX9
task_struct構造体の最初の初期化はlinux/include/sched.hのINIT_TASKマクロっすか? それとメモリ領域の確保にはget_free_page、kmalloc、vmallocのどれがベターなんすかね? 調べた限りでは get_free_page ページフレーム単位での割り当て(4kB) kmalloc 連続したメモリ領域の確保 vmalloc 非連続メモリ領域の確保 たぶん割り当てるデータの種類・頻度によって使う方法が違うと思うんですが、 いまいちこういうデータにはこれがいい、という判断ができないもので。
おまいら、qemuのお話はしないのか。
> いまいちこういうデータにはこれがいい、という判断ができないもので。 というのがわかっているなら、 > それとメモリ領域の確保にはget_free_page、kmalloc、vmallocのどれがベターなんすかね? この質問では答えがないことがわかるだろう。
777 :
login:Penguin :03/11/01 21:56 ID:GycfD/6p
>776 だから、こういうときはkmallocとかいうような場合分けの判断の仕方を教えて欲しいわけです。 初期化の方は?
このスレの立った当時のkernelバージョンは何だったんだろう・・・
普通の構造体ならkmallocやkmem_cache_allocでいいんじゃないでしょうか? get_free_pagesとvmallocは意味がわからないのなら使う用途はなさそう。
780 :
login:Penguin :03/11/02 02:01 ID:c8ANRrTL
>779 char *とかはどうです?なまじページフレーム以下のバイト数割り当ててページフレーム内でのメモリ断片化を起こすより、ページフレーム単位で割り当てた方がいいんですかね? でも4kBはでかいものなあ・・・
781 :
login:Penguin :03/11/02 04:02 ID:mdTuavMg
オレも4kbはデカイなと思ってたけど 結局malloc系はみんな4kbずつ取られちゃうし そもそもPCならメモリはたくさんだから 1000枚とったって4メガじゃん とか思って もうめんどくさいしと考えて kmalloc
>>777 初期化はその通り
一時的に使うか大体1ページ埋まっちゃう時はget_free_pages
それ以外はkmalloc
かな。
細かいことを気にしたくないなら、kmallocでいいんじゃない?
>>781 ,782
そうっすね。kmallocを使うようにします。
ありがとうございました。
784 :
login:Penguin :03/11/12 19:11 ID:j+kuNkZG
デバイスのインストールをしようとしたときに、デバイスのソースコンパイルで sizeof(struct rs_table[]) でエラーがでます。 rs_table[]の定義が見つからないようです。 kernelのrs_table[]を参照しているのですが、 これはどこに書いてあるでしょうか? また、これはどのような意味でしょうか? わかる方がいましたら教えていただきたいです。 シリアルttyS??やリソースに関係しているっぽいらしいことはなんとなくわかったのですが。。。
785 :
784 :03/11/12 19:14 ID:j+kuNkZG
sizeof(struct rs_table[])ではなくsizeof(rs_table)でした。
カーネルといえば三ダースおじさん
linux/serialP.h をincludeしといて、かわりに sizeof(struct serial_state) を使う。
ぐはぁ、sizeof(rs_table[])ではないのね。ごめんなさい。 sizeof(struct serial_state)*RS_TABLE_SIZE あたりで手をうったらだめ?
789 :
login:Penguin :03/11/16 03:56 ID:rakWerCm
カーネル内からカレントプロセスがデーモンかどうかを識別する方法ってありますか?
>>789 current->ttyがNULLか見ればいけるかな?
791 :
login:Penguin :03/11/20 21:17 ID:F3gDXEit
現在のカーネル実行パスがカーネルスレッドによるものかどうかはどうやって分かりますか? それとカーネルスレッドはcurrent->*でpidなどを取得したりはできないのでしょうか?
current->mmがNULLかどうかで、kernel threadか判断できるはずです。 割り込みかどうかの判断であるin_interrput()関数と 合わせて御利用ください。 pidの取得も問題ないはずですが、current->tgidとcurrent->pidが 紛らわしいので注意してください。
>>792 swapperのmm==NULLでcloneのflags | CLONE_VMだからですね.ありがとうございます.
それとin_interruptは自分が注目しているコードの部分は例外や割り込みハンドラの部分ではないのですが,
それでも必要でしょうか?
tgidとpidが紛らわしいというのはどういう意味でしょうか?
>>790 789僕です.遅れましたが,ありがとうございました.
>>793 それなら、in_interrput()は使わなくてよいです。
2.6のgetpid()で取れるはtgidなのでtgidを使えば無難です。
今までのlinuxthreadsを使うとpid==tgidなんですが、
NPTLでは、何故かねじれてしまってpidがスレッドIDに
なっています。
795 :
login:Penguin :03/11/22 05:27 ID:Ra8noU1x
現在カーネル実行パスを実行しているプロセスの ユーザ空間におけるスタックフレームをカーネル空間からバックトレースして, それぞれのフレームにおけるリターンアドレスを調べていくことは可能ですか? またcurrent->mm->start_stack以外にスタックに関する情報はないのでしょうか?
詳解Linuxカーネルってトップダウンで書いてあるので、 流れを理解するにはうってつけだけど、長々と文章で説明するより 図とかソースの方が分かりやすかったりする。好みだけど。 たしか、この本が出たときにいろいろ批判をしたスレがあったと 思うけどどこですか?
>>795 それなら、ユーザー側のspを読んで追っかけたほうが簡単じゃないかと。
CPUに依存するけど。
>>797 ユーザ側のspの値はcpuの制御回路によってカーネルスタックに退避されるんですよね?
みようとしている部分がシステムコールハンドラのret_from_sys_callのところからなんですが,arch/i386/kernel/entry.S(自分のマシンのアーキテクチャはx86です)によるとそのときのカーネルスタックのレイアウトは,
0(%esp) - %ebx
4(%esp) - %ecx
8(%esp) - %edx
C(%esp) - %esi
10(%esp) - %edi
14(%esp) - %ebp
18(%esp) - %eax
1C(%esp) - %ds
20(%esp) - %es
24(%esp) - orig_eax
28(%esp) - %eip
2C(%esp) - %cs
30(%esp) - %eflags
34(%esp) - %oldesp
38(%esp) - %oldss
となっていて,このoldespがユーザ側のspの値でしょうか?
ところで,スタックに格納されているデータがリターンアドレスかどうかを判別するにはどうすればいいのでしょうか?
スタックフレームごとの区別の仕方もよく分かりません.gccのソースコードとかを読んでみれば分かりますか?
すいません.gcc->× gdb->○
800 :
795 :03/11/23 20:21 ID:DFb2kUzt
x86の場合はebp+4のアドレスにリターンアドレスがあるのでebpを元にして辿っていけばできそうです. というかlinuxカーネルの話題とずれた質問してすいませんでした.
>>798 どこに入るかもCPUによって違うので、必ずカーネルスタックに入っている保証はない。
ただ、コンテキストスイッチした時の値はthreadに入っているはず。
x86でret_from_syscallでみるならoldespでOK。
csも確認してring3に戻ることを確認したほうが良いかもしれない。
判別法は、アドレスが.textの領域に収まっているかどうか確認するのが一番簡単だと思う。
まじめに解析するならデバッグ情報をなめるしかないだろうね。
>>800 ebpは-fomit-frame-pointerされると使えないので注意。
>>801 ありがとうございます.
.textに収まっているかどうかというのは,
実行ファイルのコード+共有ライブラリのコード領域に収まっているかどうか
ということですよね?
実行ファイル中のコードはcurrent->mm->start_code,end_codeで参照できると思うのですが,
共有ライブラリの領域もまとめて収まっているかどうか確認する方法はあるのでしょうか?
それとも共有ライブラリのコード領域は別の方法で考慮する必要がありますか?
mmapの引数とかで.
>>802 shared libのロード位置はmm_struct追えばとれると思うけど、
やったことがないので、今一つ自信ない。
ld-linux.soから情報を渡してもらうのが一番確実だろうねえ。
>>803 ありがとうございます.
current->mm->mmap->vm_start,vm_endを使えば,検査したリターンアドレスが動的にリンクされたライブラリのテキストセグメントに収まっているかどうか確認できそうです.
mmapで確保されるメモリリージョンが共有ライブラリのテキストセグメントかどうかはvm_flagsメンバが読みとり・実行可能かつ書き込み不可・プライベートなマッピングであるかどうかで識別するつもりです.
805 :
login:Penguin :03/12/05 23:56 ID:JanVmuB0
質問させてください。 休眠状態のプロセスの.textや.dataを読み出そうとしています。 実行中のプロセスであればts->mm->start_dataをget_user()でいけるのですが、 休眠中なのでうまくいかないのです。(tsはプロセスディスクリプタへのポインタのつもり) adr=ts->mm->start_data; として ladr=pte_offset(pmd_offset(pgd_offset(ts->mm,adr),adr),adr); で得られたladrからget_user()すればいいと思ったのですが0読み出す値は0ばかりです。 何が悪いのでしょうか?
>>805 get_user()ってカレントプロセスを前提にしてなかったっけ?
手抜きな回答ですまぬが、
kernel/ptrace.cのaccess_process_vm()を参考にするよろし。
もっと言えば、デバッガがptrace経由でどうやって他のプロセスの
メモリをアクセスしているか見てください。
807 :
login:Penguin :03/12/09 00:36 ID:S+QZ9CO5
>>808 ありがとうございます。
とりあえず、ptrace_readdata()の動作を見てみようと思い、モジュールをでっち上げてみました。
しかしinsmod時にptrace_readdataのシンボル解決が出来ないと怒られます。
ちなみにptrace_readdataの行のみをコメントアウトするとinsmod/rmmodが成功します。
includeしてるのはlinux/sched.hとlinux/mm.hです。カーネルを作るときのオプションか何でしょうか?
ところで皆さんはモジュールをいじるような時は何を参考にしています?
やっぱりオライリーの2冊(詳解カーネルとデバドラ)?
ひたすらgrep?
>>807 EXPORT_SYMBOLされてないsymbolはモジュールからは見えないですよ
809 :
login:Penguin :03/12/09 01:20 ID:S+QZ9CO5
>>808 ぐぐってみました。
ビンゴのようです。
kernel/ptrace.hにEXPORT_SYMBOL(ptrace_readdata);という記述を加えてカーネルを再構築してみます。
810 :
1 :03/12/17 15:08 ID:krVj3++U
3
811 :
login:Penguin :03/12/18 00:07 ID:oQuTHDGh
カーネルの話なのでこちらにも書きます。 どうしても、コンパイルがうまく行きません。 どなたか、ご教授よろしくお願い致します。 TargetはSH4、Hostは、Linux7.2に組み込Linuxをインストールしてあります。 クロスコンパイル等の環境構築は終わっており、組み込みLinuxのカーネルコンパイルも コンパイルも無事通ります。それなのに、ドライバをコンパイルすると次の ようなエラーが出てしまいます。 {standard input}: Assembler messages: {standard input}:4144: Error: unknown opcode {standard input}:4235: Error: unknown opcode {standard input}:5719: Error: unknown opcode {standard input}:6018: Error: unknown opcode {standard input}:6295: Error: unknown opcode {standard input}:6693: Error: unknown opcode {standard input}:6780: Error: unknown opcode {standard input}:7053: Error: unknown opcode {standard input}:7085: Error: unknown opcode {standard input}:7103: Error: unknown opcode {standard input}:7239: Error: unknown opcode {standard input}:7725: Error: unknown opcode {standard input}:8404: Error: unknown opcode make: *** [linux_ud/sylx.o] Error 1 もちろん、ネットで検索はしました。 gcc,nm,ar,as,g++,gdb,ld,objcopy,objdump等に問題があるのでしょうか? よろしくお願い致します。
マルチは氏ね
>>811 sylxがナニモノかしらんが、インラインアセンブラでも使ってるんでねーの?
ソース見せれ。
815 :
login:Penguin :03/12/18 00:57 ID:wHzkPy4D
>>811 Linux7.2てのはRedHatLinux7.2って事?
この手の問題だったらホストとターゲットのカーネルのバージョンを明らかにすべき。
あとはgcc,binutils,newlib,glibcあたりも。
ドライバを作るってのは
make modules
ってやった時?それともどっかから落としてきたソースをコンパイルしてるの?
MakefileのCCをbfdnameにした?
情報不足で状況が掴めないです。
817 :
login:Penguin :03/12/18 01:11 ID:wHzkPy4D
>>816 組み込みスレにもマルチしてますね。
ただ、このスレにはお世話になった(なってる)ので、ついレスしてしまいました。
大局的に見るとやっぱりスルーすべきなんでしょうか・・・
ネットワーク関連のコードを読むのに良い解説サイトって無いですか? カーネル詳説では全然解説してないし。 例えば Netfilter を読むとっかかりになるようなサイトとか。 NIC ドライバは作った事あるんですが、ドライバより上位の層について 知りたいです。
「ソース」は「解説サイト」じゃない、とか屁理屈を言ってみる。 両方の条件を満たしそうなのは http;//lxr.linux.no/source/ とか?
822 :
818 :03/12/21 20:42 ID:R8FN9n5S
やっぱ無いですかね。プロトコル毎に全然違うから一々説明できないって事かも しれないですが・・・(あるいはいまさら TCP/IP の解説でもないだろって事かも) がんばって読んでみます
それならまずネットワークの本でしょ。 リチャードさんの本を読破しよう
>>818 >>823 の言うように"Guru of the Unix gurus"であるStevens先生の本を読むべき。
825 :
login:Penguin :03/12/23 00:32 ID:J48VmNLA
/procにオリジナルのエントリを作ってカーネルパラメータを読み出そうとしています. 出力するデータがもし4kBを越える場合,どのようにコーディングすればいいのでしょうか? 本を読んだり,ソースコードを眺めたりしたんですが,いまいちよく分かりませんでした. proc_file_readを読むと,越えていても最後まで出力してくれそうな感じですが・・ どうかよろしくお願いします.
826 :
825 :03/12/23 00:39 ID:J48VmNLA
えーと,すいません. 「コーディング」というのはread_procの所です. というか,proc_file_readでwhileループしているので,read_procではcount以下の読み込みを実装するだけでいいのでしょうか?
>>823-824 どっちかってゆーと、各プロトコルの実装の説明でなく、sk_buff の
各フィールドの使われ方とか Netfilter とかみたいな割とジェネリックな部分の
説明があればな、と。贅沢いってスンマソン
>>826 proc_file_read を読んだんだったら、それを信じて書けば動くよ。変な挙動だけど。
うろ覚えなので間違ってるかもだけど、普通に off を見て返す内容を決めても
いいっぽいんだけど、proc だとサイズベースで考えるのは面倒だから、
「何回目の呼び出しか」 を off で判断できるようにしてるっぽい。
*start に 1 を入れとくと、次は off が +1 されて呼ばれる (実際に返したバイト数
増えるのではなく) ので、こっちは off を見て返す内容を決めれば良い、と。
一回に返すサイズは count 以内にしておく事、と。
(実際には多少溢れても OK だけど、将来どうなるかわからんし)
多分そんな感じ。色々試せばわかると思う。 というか俺も proc_file_read() を見て
そう思ったから、正式な手順ではないかもしれないけど。
>>825 kcoreあたりをパクるとか。
>>827 オライリーのカーネル本は?
skbのあたりは書いてあったはず。netfilterは無かったかも。
>>828 カーネル本はほとんどネット周りは書いてなくて、
ドライバ本は skb については 「ドライバ作者が見るべき所」 だけだから・・・
skb のフィールドって意外と増えたり減ったりしてるみたいだから
やっぱ自分で読むしかないんだろうとは思ってるんですけど。
ちなみに kcore は普通の read_proc の作り方とはちょっと違いますよ。
とはいえ、単にメモリのある領域をダンプしたいだけならあっちの方が楽そうです。
でもそれならキャラデバ書いたほうが楽かも?
>>827 ,828
ありがとうございました.色々試してみます.
831 :
login:Penguin :03/12/30 00:01 ID:j3HEXdDL
内部とかじゃなくカーネル設定で取捨選択ができる程度の知識を勉強できるとこってない?
>>831 付属のドキュメントじゃダメなん?
Documentation/* とか、{menu,x,g}config の時み見れるヘルプとか。
834 :
login:Penguin :03/12/31 09:04 ID:CE2m/NA+
835 :
login:Penguin :04/01/07 01:47 ID:EmIK8cJs
仮想メモリ(プロセス空間)の見積方法を調べています。 そもそも、仮想メモリ空間にマッピングされる領域には、 どのような領域があり、かつ、その領域の見積方法は どうするのでしょうか?以下の領域を推測しています。 ・OSカーネル ・ドライバ ・プログラムソース ・スタック ・ヒープ この他にも、I/Oバッファや共有メモリ, ディスクキャッ シュなども入るのでしょうか? また、作成したプログラムのソースコード部分の領域の 大きさの見積方法はあるのでしょうか?(例えばC言語) 以上、よろしくお願いします。
見積もりたいものが分かっていない悪寒。 分からん用語は使わずに何が知りたいかをくだ質スレに書け。
837 :
煽りイカ :04/01/11 21:46 ID:PPiKfNSH
先生、カーネルに付いて勉強しようと、ソースのプリントアウトを 始めたんですが、既にインクジェットのカートリッジを10個以上消費 しています。この戦いはいつまで続くんでしょうか? プリントアウトした紙は、片っ端から製本業者に出しているので、 この出費もばかになりません。
>>837 本当に紙のものが欲しいなら、すでに印刷して製本したものが書店で売ってあ
るから買えばいいですよ。でも紙で読むのはつらい。
lxr等のツールを使って眺めるとか--これも自前でやらなくてもlxrのサイトに
lxrかけたソースがおいてあるからwebブラウザで眺める--か、make tags(もし
くはTAGS)してviなりemacsで読むのがいいと思いますよ。
概要をつかむなら、まずディレクトリの構造を適当にながめたあと(or眺めつ
つ) init/main.c の start_kernel() から読み始めるのがいいと思います。
大変だけど、続ければ必ず読めるし、得るものは大きいから、がんばって。
840 :
login:Penguin :04/01/13 01:07 ID:odyLziqA
シェルについてですが なぜ シェルレベルがあるのですか たとえば echo $SHLVL と打ちますと 2 とでたり bash bashと続けて打てば 4となります
シェルレベルはカーネルと関係ない話なので、くだ質で再質問をお願いします。 # そのさい誘導されたことを付記してください。でないとマルチ呼ばわりされそう。
2つ質問があります. 1: カーネル側からroot権限であるデーモンプログラムかどうかのフックをする際に, root権限である && setsidで制御端末から独立するのでcurrent->tty==NULL という以外に条件はないでしょうか? この条件だけだと端末からemacsを起動したときや, デーモンプログラムから呼び出されたと思われるrmやchownなどもフックしてしまうようです. 2: プロセスからあるデータへの参照をカウントしています. その参照はコマンド名で対応づけられています. カウント数が2の場合に,ps | grep [コマンド名]すると1つしかありません. ん?と思って参照しているプロセスのコマンドラインをみてみると (参照しているプロセスのpidは分かっています), -:0 と表示されています. これは一体どういう意味でしょうか? pstreeコマンドでは「-:0」がちゃんとしたコマンド名で2つ表示されていました. ちなみにそのコマンド名はwdm.binです. よろしくお願いします.
843 :
842 :04/01/15 19:57 ID:q7MiFnSU
新規書き込みでsageてしまいました・・
1だけ 親がinitかどうか確認するとか。 daemon(3)使っていればinitが里親になるはず。
>>844 ありがとうございます.
initにゾンビの始末をさせていたんでしたね.忘れてました.
emacsの方はsetsidを使って(emacsからforkしてemacsserverが実行されるまでの間),
しかもバックグラウンドで実行した場合initが親になるので無理なようです.
846 :
842 :04/01/17 17:37 ID:KaSlkRb2
2つ目の理由が一応分かりました. psでは通常,コマンド名の表示に/proc/cmdlineを参照します. ただし,-cオプション(本当のコマンド名を表示する)をつけたときはcurrent->commを参照するようです. で,proc_pid_cmdlineやexecve周りを眺めたましたが,上書きされる様子がない. manで調べてみるとどうやらsetproctitleという関数を使ってコマンドラインの上書きが可能なようです. 引数として渡す文字列の先頭に「-」をつけると,- は無視され,フォーマット後の文字列がそのままセットされるようで・・ けれども,今の自分の環境のglibcではsetproctitleに関する記述はないのが変だなと思いますが. 特にこれ以上突っ込んでも自分の実装と関係ないので,放っておくことにします.
847 :
login:Penguin :04/01/18 02:11 ID:+zT3hNOG
プロセス切り替え時の動作なんですが、 ・CPUにタイマ割り込みがかかる ・割り込みハンドラに処理が移る ・プログラムカウンタをそのプロセスのカーネルスタックにpush ・汎用レジスタの内容をプロセスディスクリプタのthreadに保存 ・schedule()で次に処理するプロセス選択 ・次に処理するプロセスのプロセスディスクリプタのthreadから汎用レジスタにロード ・次に処理するプロセスのカーネルスタックからPCにpop ・ジャンプ という理解でいいのでしょうか?(自主的にCPUを放す場合は別として) ということは、ほかのプロセスのカーネルスタックの一番上の中身を書き換えると、 違うところから実行が再開される?
>>847 > ということは、ほかのプロセスのカーネルスタックの一番上の中身を書き換えると、
> 違うところから実行が再開される?
signalの挙動がそうです。
849 :
login:Penguin :04/01/23 09:07 ID:R+JbGtsc
850 :
login:Penguin :04/01/25 16:35 ID:8CJ3FK3q
Linuxカーネルに新しい機能を付けて拡張するカーネルパッチを公開する場合, ライセンスはGPLに従うと思うのですが,基本的には拡張するカーネルのバージョン についているCOPYINGをそのまま持ってきてREADMEか何かで 「このソフトウェアはGPLでライセンスされています.詳しくはCOPYINGを読んでください」 と書くだけでよいのでしょうか?
>>851 すいません.今読みました.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
これをソースコードの冒頭につければいいんですね.
で「a copy of the GNU General Public License」がCOPYINGファイルになると思うのですが,
Linuxカーネルの方はCOPYINGのGPLの記述の最初にLinusさんの注意書きのようなものが付いていますよね?
このCOPYINGをそのまま使っていいんでしょうか?
853 :
login:Penguin :04/02/03 12:14 ID:w95WYYei
ゾンビプロセスに関して質問です。
現在サーバを起動しているとメモリをどんどん減っていくという問題で困っています。
(もちろんfreeコマンドでキャッシュを差し引いたところを見ています)
メモリが圧迫された状況でも、topコマンドから消費メモリ順に並べても、
特にメモリを食っているプロセスはありません。
気になるのはゾンビプロセスが発生していることです。
>>842-845 にあるように
ゾンビは最終的にはinitに吸収されると思うのですが、
その際psやtopで見たinitの使用メモリは増大していくのでしょうか?
原因を特定できずに困っています。
現在は毎日再起動してなんとか運用中です。
>>853 ゾンビを生んでる人を見つけて退治する。
毎日核落としてたんじゃバタリアンの中の人もかわいそう。
855 :
login:Penguin :04/02/03 13:05 ID:dnjnuywS
>>853 そのゾンビプロセスが何のプロセスかわからないと何とも言えない
856 :
login:Penguin :04/02/03 15:54 ID:w95WYYei
>>854-855 レスありがとうございます
postfix->local(Postfixのローカル配送プロセス)->procmail->bashスクリプト
と起動されており、
procmailから下がゾンビになってます。
まずはこのゾンビがメモリ圧迫の原因かどうか確かめたいのです。
ちなみにinitのメモリ使用量は増加してません。
純粋に空きメモリだけが減っていきます。
このようにゾンビが起きることでメモリを減らすということはあり得るのでしょうか?
もしあり得るとしたら、ローカルユーザは簡単にサーバを落とせてしまうことになってしまいませんか?
>>856 じゃあprocmailを殺す
ありうるし落とせるよ
だから殺す
>>853 >>842-845 は孤児の話だ。
親が骨を拾ってあげないからゾンビになる。
ということで親ごと殺さないとダメかも。
と書いていて思ったが、現実世界に当てはめたらとんでもねー表現だな。
>>858 ちゃんと面倒見ない親を探して対処しないとな。
ていうか、孤児はinitが引き取るから、
引き取った後ならいい人のinitを殺す話になってしまう(藁
ゾンビはリターンコードしか必要なデータは持ってないから、 メモリはあまり食わないはず。 だいたいpsで見れば分かるじゃん。
862 :
853 :04/02/03 21:22 ID:w95WYYei
みなさんレスどうもです。 psで見るとこんな感じになってます。 926 16119 0.0 0.0 0 0 ? Z 22:24 0:00 [sed <defunct>] しかしいつまでもゾンビが残るわけではなく、 ちょっと立つと自然に消えていきます。 自然に消えるゾンビなら気にしなくても良いのでしょうか? それともゾンビが出ること自体がまずいのでしょうか?
子供をほっとくなんて。 親の顔が見たい。
>>862 消えるなら、親の面倒見が悪いだけだろう。
気にするな。
>>861 死んだら出席簿から名前が消されるのに
ゾンビちゃんは出席簿に名前が残ったままだよ。
机は持ってかれるかもしれないけどさ。
LKMでファイル操作をしようと open,write,closeあたりの
関数を使ってみましたが、insmod で組み込むと
hook_uname.o: unresolved symbol open
hook_uname.o: unresolved symbol close
hook_uname.o: unresolved symbol write
とエラーになってしまいます。
でもstrncpyみたいなライブラリが必要そうな関数は問題なく
試用できるのがよくわかりません。
適切な資料がわからずみようみまねで書いているのですが、
LKMから呼び出せる関数のリストのようなものはありませんか?
またはこれらopenなどの関数を呼び出すためのコンパイル
オプションなどがありますか?
現状、次の記事を参考にプログラムを組んでいます。
http://www.atmarkit.co.jp/fsecurity/rensai/rootkit03/rootkit02.html 記事の書いてあるところまでは、そのままやってうまくいきました。
この hook_uname.c を改造しています。
linuxのkernelバージョンは 2.4.19です。
>>866 標準ライブラリは使えまへん。
strncpyは親切な人が同じものを用意してくれているから。
モジュールから呼べるのはEXPORT_SYMBOLで宣言されてる。
まじめにやるなら馬本嫁。
868 :
866 :04/02/10 01:48 ID:LKCK7qEy
>>867 アドバイスありがとうございます。
EXPORT_SYMBOLでgrepしてみたら、i386_ksyms.cに記述されているのを
見つけました。
strncpyなどは、特別にここで用意されていたに過ぎないのですね。
馬本は、オライリーの「LINUXデバイスドライバ 第2版」のことでいいですか?
ちょっと高いですが買って勉強します。
>>866 ライブラリ関数の使えないカーネル内でもシステムコールは使えますよ.
_syscall0とかのマクロを使うか,sys_openなど直接呼び出したりはできると思います.
>>869 syscallマクロは、システムコールに再入してまうのであまりよろしくありまへん。
カーネルスレッド使えば問題ないけど。
そもそも、モジュールの中でファイル開いてごりごりやるのはどうかと思いますな。
>>870 rootkitのwebページを参照にしているようでしたので,「どうかと思う」ことを敢えてやりたいのかなと.
>>866 カーネル内でファイル入出力をするなら,sys_acct辺りが参考になるんじゃないでしょうか.
872 :
866 :04/02/19 04:01 ID:3kajdZP1
すみません。まだ本買っていないです。 とりあえずいろいろ試してみましたので経過報告です。 (1) _syscall2マクロを使ってみました。 こんな感じでいのでしょうか。 _syscall2( int , open , const char *,pathname, int ,flags); コンパイルすると次のようなエラーになるので、 (上記のマクロは24行目にあります。) $ gcc -c hook_uname.c hook_uname.c: In function `open': hook_uname.c:24: `errno' undeclared (first use in this function) hook_uname.c:24: (Each undeclared identifier is reported only once hook_uname.c:24: for each function it appears in.) errno.hをインクルードしてみましたが、 #include <errno.h> モジュールを組み込むにエラーになってしまいました。 #insmod -f hook_uname.o hook_uname.o: unresolved symbol errno (続く)
873 :
866 :04/02/19 04:01 ID:3kajdZP1
(2) sys_openを使ってみました。 fd = func_sys_open("/tmp/hook_uname.txt",O_APPEND | O_CREAT ); コンパイルは成功しましたが、モジュールを組み込むにエラーにになってしまいました。 #insmod -f hook_uname.o hook_uname.o: unresolved symbol sys_open (3) sys_call_tableのアドレスを呼び出してみました int (*func_sys_open)(const char *pathname, int flags); func_sys_open = sys_call_table[SYS_open]; fd = func_sys_open("/tmp/hook_uname.txt",O_APPEND | O_CREAT ); コンパイル、insmodとも成功しましたが、実行すると func_sys_openの呼び出し中に失敗し -9 が返ってきました。 やっぱりカーネル内からの呼び出しはだめですか。 とりあえずファイル操作をやってみているのは、分かりやすい結果が得られた方が 面白いかなというのが主な理由でした。 また linux-users MLの話題で、unlink をフックしてその中で、ファイルのバック アップをとりたいという話題([linux-users:101834])があり、面白そうなテーマだと 思って手を出してみました。 sys_acct(の実装?)等参考に調べてみます。
>>872-873 #define __KERNEL_SYSCALLS__
#include <asm/unistd.h>
int hogehoge(void)
{
int fd;
fd=open("hoge",O_RDONLY,0);
}
at 2.4.x
試してないけど。
>>872 #include <errno.h>
だとライブラリ関数のヘッダファイルをインクルードします.
#include <linux/errno.h>
で/usr/src/linux/include/linux/errno.hをインクルードしてみてください.
>>873 sys_openをモジュールの冒頭でextern宣言してもだめですか?
それと単純にカーネルでファイル操作をしたいのなら,ファイルディスクリプタを返す必要はありません.
acctシステムコールにヒントがあります.
#まずは本を読んで知識を得ることが先決だと思います.
>>875 sys_openはEXPORT_SYMBOLされていない罠。
armあたりは見える様になってるな。メンテナの趣味かな。
#素直にドライバにしてread/write経由でやりとりした方が素直だと激しく思う。
877 :
login:Penguin :04/02/27 12:06 ID:POIJFvcG
システムコールsys_execve()で、あるプログラムの 実行が始まるわけですが、ld-linux.soというのは カーネルのどの部分でロードされるのでしょうか。 straceで観察するとlibc.soをロードするシステムコールは 発行されていますが、ld-linux.soに対してはありません。 これというのはカーネルがロードしていると考えていいわけですよね。 その後、ld-linux.soがlibc.soをロードする。
878 :
login:Penguin :04/02/27 12:51 ID:e6K8vpAQ
ld-linux.so.2 は ELFヘッダで指定されています。 なのでロードしているのは ELF の処理部分ではないかと(fs/binfmt_elf.c とか)。
880 :
login:Penguin :04/02/27 21:12 ID:vdlMtlwT
883 :
880 :04/02/27 22:11 ID:vdlMtlwT
884 :
????A?L?A?N?e?N?A :04/02/27 22:13 ID:V05PQgy9
UNIX カーネルはあッ、strategie しか知らずに済むのでしょう。けど、Linux は知らないよ。
>>882 それように書かれていないので、あんまし面白くない。
886 :
login:Penguin :04/02/27 23:49 ID:xaaJLb2z
プリエンプトカーネルってなんでつか? カーネル実行中にコンテキストスイッチがおこってユーザープロセスが動き出すってことですか?
888 :
886 :04/02/28 00:16 ID:xSTzzvuP
ありがとうございます @IT読んでなんだかわかったような気分になれました。
889 :
login:Penguin :04/02/28 14:09 ID:J2FeZbHS
VFSの詳しい日本語解説をしているページを教えなさい
890 :
Linuxカーネルの仕組み :04/02/28 19:39 ID:bMmaH5z2
カーネルの中にLinusの小人が101人ほど入ってます。 彼らがガンガッテいるのでLinuxは動いているのです。 以上。
bogomips 101っていったら CPUはなんだろ
893 :
sage :04/03/14 02:28 ID:g+4Nnj/K
ソースを眺めていたらなんかLINUXの仕組みが分かってきたぞ。 意外と理解できるものなんだね。ちょい感動。
Linuxの「現在使用中の」メモリの読み方について教えてください。 freeの表示にある-/+ buffers/cache: のusedの数値は、 man freeには「使用中のメモリからバッファメモリを引いた値」とあるのですが、 だとすると /proc/meminfo にある Active: の欄はどういう意味でしょうか? 私の使用しているLinuxでは、freeでみると、-/+ buffers/cache の usedは、常時100MBを 下回らないほど大きく、自分ではちょっとおかしい気がします。 /proc/meminfoのActiveの数値は20〜30MBで、 現在動かしているプロセスのメモリ使用量(topやpsコマンドで確認)から考えるに その数値は正しいのではないかと思います。 Linuxのメモリ使用量は、どのように読めば良いのでしょうか。
>>894 > 現在動かしているプロセスのメモリ使用量(topやpsコマンドで確認)から考えるに
どう計算したの?
896 :
894 :04/03/17 14:23 ID:a5f2rjZp
すいません、色々調べなおしてたら、余計にこんがらがりだしまつた、、 >895さん ps -xl --sort -vsize で、VSZを目算で足してました。が、これも実際にawk使って 足してみたら、freeの数値ともActiveの数値とも大きく異なっていました。 そもそもpsのSZとVSZの違いからしてわかってないので、そっちを先に調べることにしまつ、、 とりあえず、manからアタックはしてるのですが、 man proc も、 man ps も、 man free も、「そもそもメモリを理解してる人が 読むもの」な気がします。 どなたか「馬鹿野郎、ここ嫁!」っていうヒントがあったら教えてください。
物理メモリと仮想メモリを一緒にしてしまっているから混乱しているのかと
そもそも、buffersって何を表しているの?
buffersはバッファキャッシュ cachedはページキャッシュ
カーネルを語る方々って、 板の下の方でひそひそ話なのですね。 ス・テ・キ
902 :
login:Penguin :04/04/08 19:09 ID:dz3aoHOS
2.6から正式実装される LSMを作ってみています。 file_permissionで渡ってくるパラメータが struct file * file, int mask の2つのみで、 これだとシステム全部のファイルI/Oが引っかかる為、 実際にフックしたいディレクトリのみにしぼりたく、 フルパスを取ろうとしているのですが どうやってもできません… (涙 神様はいませんでしょうか? ------------------------------------------------ int iCnt = 0; struct dentry *pEntry = file->f_dentry; /* 逆順にたどる */ while ( pEntry->d_inode && pEntry->d_count.counter ) { pParent[iCnt] = (char *)kmalloc( pEntry->d_name.len+1, GFP_KERNEL ); strcpy( pParent[iCnt], pEntry->d_name.name ); iCnt ++; /* 上へ */ if ( pEntry == pEntry->d_parent ) break; pEntry = pEntry->d_parent; } ------------------------------------------------
903 :
login:Penguin :04/04/10 00:38 ID:04yJkWho
age
echo-udpって、port 7以外の複数のポートを 指定してエコーできませんか? /etc/xinetd.d/echo-udpと/etc/servicesをいじれば できそうな気はするのですが、だめかな?
crypt()ってスレッドセーフではなかったのか.. _| ̄|○ やはりスクラッチからですか?そうですか。
>>904 余裕で出来ると思うけどカーネル関係ないよ
pci_map_page()、virt_to_bus()) などが参照する pci_dram_offset 変数はどういう意味でしょうか? ホストメモリの、PCIメモリ空間におけるオフセット、 という理解であっていますでしょうか?
gccのインラインアセンブラって慣れてないから使いずらい。 #TASMをずっと使っていたので :-) メモリ参照ではまってしまった。 (a,b,c)って書くと(a+b*c)だと思わなかったZE。 しかも、SourceとDestが逆!? コンパイルして気づいたっっっ!! これ全部直すのキツイっす!(泣 今日は徹夜だ。シクシク
> (a,b,c)って書くと(a+b*c)だと思わなかったZE。 > しかも、SourceとDestが逆!? 両方とも info 見りゃ分かるんだけどな。
910 :
908 :04/04/15 02:51 ID:Z+dQWDMr
int a,b
asm("mov a, offset b");
↑上記の場合でのAT&T形式のアセンブリコードって何ですか?
offsetでエラーが出る
>>909 >両方とも info 見りゃ分かるんだけどな。
info gasですか?
探してみたんですけど見つからない。
912 :
login:Penguin :04/04/25 18:46 ID:a4I3Ve2u
関数へのasmlinkage指定って、引数をレジスタ渡しにするのを禁止するための ものだと思ってたんですが、void引数の関数にもちらほらasmlinkageが見られ ますよね。これってどういう意図でつけてあるのか教えてくらさい。
>>912 惰性でつけてるとみた。
include/linux/linkage.hを見ると何もしていないことがわかる。
914 :
login:Penguin :04/04/26 02:04 ID:90cdg9sZ
>>913 うげ、そんな適当なんだ。了解でつ。
ありがとう。
>>912 What is asmlinkage ?
ttp://kernelnewbies.org/faq/index.php3#asmlinkage The asmlinkage tag is one other thing that we should observe about this simple function.
This is a #define for some gcc magic that tells the compiler that the function should not
expect to find any of its arguments in registers (a common optimization),
but only on the CPU's stack. Recall our earlier assertion that system_call consumes its first argument,
the system call number, and allows up to four more arguments that are passed along to the real system call.
system_call achieves this feat simply by leaving its other arguments (which were passed to it in registers) on the stack.
All system calls are marked with the asmlinkage tag, so they all look to the stack for arguments.
Of course, in sys_ni_syscall's case, this doesn't make any difference, because sys_ni_syscall doesn't take any arguments,
but it's an issue for most other system calls. And, because you'll be seeing asmlinkage in front of many other functions,
I thought you should know what it was about.
916 :
login:Penguin :04/04/26 11:33 ID:90cdg9sZ
>>915 それを読んで質問してるんだけど、なにか英文の解釈違いますか?
917 :
login:Penguin :04/05/16 18:59 ID:FC6L1zfD
1000!
ダウト
919 :
login:Penguin :04/05/18 02:01 ID:OpVrZf3y
Windowsにカーネルストリーミングって仕組みあるでしょ? Linuxにもよく似たものってある? 教えてエロリポップな人!
>>916 >それを読んで質問してるんだけど、なにか英文の解釈違いますか?
怒っちゃイヤ!!
921 :
login:Penguin :04/06/21 08:22 ID:1lgVmpvk
ほっしゅほっしゅ
自分は今、Kernel(x86のVer 2.6)内で処理するContext Switchの勉強をしているのですけど、 Context Switchの大体の動きはわかりましたが一つ疑問があります。 switch_toや__switch_to関数で汎用レジスタ(eax, ebx, ecx等)の退避を行っている箇所が 見当たりません。実際に退避しているレジスタは、eip,esp,fs,gsやfpuレジスタとかです。 Context Switch発生時、いったいどこで汎用レジスタを退避するのでしょうか?
>>923 関数の呼び出しで破壊されてもいいレジスタはそもそも退避しない。
壊れるとまずいレジスタは関数のエントリでスタックに退避されている。
そういうのはアセンブラのソース吐かせて確認すればいいのではないかと思うが。
>>924 >関数の呼び出しで破壊されてもいいレジスタはそもそも退避しない。
>壊れるとまずいレジスタは関数のエントリでスタックに退避されている。
ってことは、例えばユーザランドのある関数を実行中に
そのプロセスの実行割り当て時間を使いきった場合、
その時点で使用していたレジスタを退避するのでしょうか?
であるなら、switch_toや__switch_toを処理している時点では、
汎用レジスタを退避しなくてもいいということになるんですが。
>そういうのはアセンブラのソース吐かせて確認すればいいのではないかと思うが。
そうなんですけど、いったいどこでそれをしているのかよくわかっていないので。
926 :
login:Penguin :04/08/29 11:10 ID:1PFwUqWG
switch_to()の前に、switch_toがやってるはず。 switch_to()は引数をeax、edxから引っこ抜くわけだから、 そのとき既に、このレジスタに(仮にA、Bとすると)その値が 保存されてないといけないわけ。 退避するって書いてるけど、switch_toがA、Bをeax、edx・・・ ああ、面倒。ここまで書いたら解かると思いますけど。 この辺り開けば、等価なコードが書かれてるでしょう。
>>926 >switch_to()は引数をeax、edxから引っこ抜くわけだから、
>そのとき既に、このレジスタに(仮にA、Bとすると)その値が
>保存されてないといけないわけ。
引数にeaxとかが設定されているのはわかります。
>退避するって書いてるけど、switch_toがA、Bをeax、edx・・・
>ああ、面倒。ここまで書いたら解かると思いますけど。
いえ、自分が期待していたのはどっかで汎用レジスタを退避しているのでは
と思っていたのです。どっかでpusha,popaでもしているのかなと。
なんかよくわからなくなってきたので、もう一度調べてみます。
レスしてくれた方、ありがとう。
>>925 ユーザーランドで使っているレジスタは例外発生時に退避されます。
entry.SのSAVE_ALLマクロ使ってる所。
930 :
923 :04/08/30 02:36 ID:s/M5nqAJ
なんかわかったような気がしてきました。 暗闇の中に一筋の光が見えてきました。
linux programmingスレが無かったのでここで聞いてみる。 2.2用のカーネルモジュール(driver)がありまして、2.4で使いたいのですけ ど、カーネルに変更が加わった為かソースはそのままではmakeが通らないです。 一般的な話でいいのですが、kernel2.2から2.4などバージョンを上げる時 moduleのソースはどの辺りに修正加えてますか?
>>932 オライリーの「LINUXデバイスドライバ」ぐらい持っとけ。
>>932 2.2と2.4の同じデバイスのドライバ見比べてみたらどうでしょうか。
あと、「LINUXデバイスドライバ」って英語版はWeb上で読めましたっけ。
x86カーネルだと、1GByteのメモリを使うのですら、 HIGHMEMが必要なわけですが、 HIGHMEMを使うにあたって、ペナルティ等はありますか? 2.6になって改善されたというような記事は見つかったのですが、 具体的な問題については見つかりませんでした。
936 :
login:Penguin :04/12/30 10:00:07 ID:4MuG0KSs
guluの皆様、ご教示ください。 モジュールでシステムコールを追加する方法というのはありますが、 (hoge.oをロードしてる間だけhoge()と言うシステムコールが使える) 既存のシステムコールを上書きすることはできるのでしょうか。 (hoge.oをロードしている間だけカスタマイズしたopen()、close()が使えるような) カーネルがROなROMに焼かれているシステムですので、カーネルに直接 手を入れることができず上記のような発想で対応したいと考えています。
>>936 なお、対象のカーネルは2.4.17です。
おしえろ # define __acquire(x)__context__(1) __context__(1)ってのはどういう意味? 教えてくれた人には俺の妹をもれなくプレゼント!
>>939 コンテキストスイッチ。
って何だったっけ?
ああ、不完全だからおぱーいとマソこだけでいいよ。
>>940 とりあえずレスに感謝。あんた最高だよ、ただコンテキストスイッチじゃないんだよな。
不正解だから
>>940 には、俺の使用済みティッシュ(3年分)をもれなくプレゼント!
__context__(1)ってのはどうもgcc拡張っぽい気がするんだ。
このスレ最高
943 :
login:Penguin :05/02/03 12:58:08 ID:8pVcdBBv
linux2.6 の include/asm-generic/percpu.h の per_cpu() がどういうものなのか 理解できずに苦しんでます。どうかご教授ください。
うぉ!2週間前か…。
946 :
943 :05/02/23 08:44:24 ID:L5tOcRY0
>>944 ありがとうございますm(_ _)m
半分、あきらめかけていました。
947 :
CPUID :05/02/25 14:48:05 ID:T5ngmMgI
ユーザ空間からプロセススクリプトのアドレス取得する方法があれば教えて下さい。
プロセススクリプト? 何のことを言おうとしているのだろう・・・
949 :
login:Penguin :05/02/25 23:10:03 ID:L0S86Pvn
すみません。 すプロセスディスクリプタの誤りです。
>>949 そんなんユーザー空間から見えちゃまずいだろう。
951 :
login:Penguin :05/02/26 13:57:10 ID:NTEY/KLT
何をするつもりだ
>>949 お前は一人で世界を救おうというのか!
おい。 カーネルを理解したいのだ。 「この本をこの通りに順番に読め!」 というのがあったら、教えてください。
953 :
login:Penguin :05/02/26 21:54:11 ID:PsgioYqx
↓の2つのマクロの意味が分かりません。もう限界です。 これ以上理解できない状態が続くと、妻を道連れに逝くかもしれません。 そうなったらお前らすごい後悔するよな、そうだよな、そうだろ! 心の中で否定しても無駄だ、絶対後悔しちゃうぞ。 後悔したくないよな、そうだよな。 じゃー、さっさと教えてちょ! include/linux/compiler.h # define __releases(x)__attribute__((context(1,0))) # define __acquire(x)__context__(1) すいません、ちょっと強気に迫ってみましたが、教えてください。 本当に困ってます。頼みます。m(_ _)m
>>952 1. UnixUserのLinux2.6解読室
2. 詳解Linuxカーネル
3. Linuxのソース
>>955 詳細Linuxカーネルは持ってます。
UnixUserのブートの本も。
ただ、それに至る知識がないのです。
Linuxプログラミング(ソフトバンクのやつ)も読んでいるのですが、
「何かが足りない」感じなのです。
UNIXカーネルの設計でも読んで、修行します。
>>956 恐らくハードウェアの知識と根性
>>954 それバージョンいくつ?そんな内容ないし。
それに__attribute__について知りたいならgccのinfoで
C Extensionの項目の
* Function Attributes:: Declaring that functions have no side effects,
or that they can never return.
* Attribute Syntax:: Formal syntax for attributes.
* Variable Attributes::Specifying attributes of variables.
* Type Attributes::Specifying attributes of types.
この辺り見れば?
>>956 あくまで個人的な意見だが、Linuxカーネルはプロセッサの知識
が無いと苦しい。
「はじめて読む8086」→「はじめて読む486」
を読んで、プロセッサの知識を身につけておいた方が良いと思う。
ただ、「あれやって、これやって、そしてLinuxカーネルを読もう」
とあまり遠回りをするのではなく、プロセッサとC言語の知識が
あったら、すぐにLinuxカーネルを読み始めた方がよいように思う。
960 :
954 :05/02/27 21:00:55 ID:BnGxFurs
>>958 とりあえずレス、サンクス!感謝感謝感謝
Linux2.6.10です。
探してみたんだけど見つかりません>gccのinfo (ToT)
context()っていう関数が一体、どの関数のことなのか知りたいです。
962 :
960 :05/03/01 07:37:21 ID:yi/Urpst
>>961 サンクス、ちょっと試してみます!
追って報告する!
963 :
960 :05/03/01 11:16:17 ID:yi/Urpst
仕事を2chに丸投げですか そうですか。
>>963 >これ以上停滞してると、・・・お、お客さんが怖い・・・
ソースを解析する仕事??
出来もしない仕事なんて引き受けるなよ…
967 :
960 :05/03/01 13:45:21 ID:yi/Urpst
>>964-966 スイマセン。
ソースを解析する仕事じゃないんだけど、ちょっと行き詰ってまして・・・。
むしろ
>>963 の質問よりも仕事内容の方が気になった...
969 :
960 :05/03/01 16:13:44 ID:yi/Urpst
とある医療関連会社のシステムの試作(主にデバドラ)をやってます。 下請けなので断れない立場です(T_T)
できもしない仕事請けるなよ。 おたがい不幸になるだけだ。
>>969 ちょっと調べたら自分はわかったよ。
言っておくけどデバドラ開発ならこれらは知らなくても別に問題ないよ。
無視してもいい。
ちょっとだけヒント:これらはgccでは使用しません
973 :
960 :05/03/01 16:44:06 ID:yi/Urpst
>>972 サンクス!x9
か、かなり気が楽になったよ。お前は神だ!
できればどこを調べたのか知りたいのだが・・・頼む.com
>>970 は厳しいね。
仕事、断れるくらい大きい会社に勤めてるんだろうね。うらやましぃ...
>>973 >できればどこを調べたのか知りたいのだが・・・頼む.com
(ーー;)
無視してもよいと言ってるではないか...
Use the source and google,
>>963 − May the source be with
>>963 !