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

このエントリーをはてなブックマークに追加
925login:Penguin:04/08/29 02:43 ID:u2o1h55W
>>924
>関数の呼び出しで破壊されてもいいレジスタはそもそも退避しない。
>壊れるとまずいレジスタは関数のエントリでスタックに退避されている。
ってことは、例えばユーザランドのある関数を実行中に
そのプロセスの実行割り当て時間を使いきった場合、
その時点で使用していたレジスタを退避するのでしょうか?
であるなら、switch_toや__switch_toを処理している時点では、
汎用レジスタを退避しなくてもいいということになるんですが。

>そういうのはアセンブラのソース吐かせて確認すればいいのではないかと思うが。
そうなんですけど、いったいどこでそれをしているのかよくわかっていないので。
926login:Penguin:04/08/29 11:10 ID:1PFwUqWG
switch_to()の前に、switch_toがやってるはず。

switch_to()は引数をeax、edxから引っこ抜くわけだから、
そのとき既に、このレジスタに(仮にA、Bとすると)その値が
保存されてないといけないわけ。

退避するって書いてるけど、switch_toがA、Bをeax、edx・・・
ああ、面倒。ここまで書いたら解かると思いますけど。

この辺り開けば、等価なコードが書かれてるでしょう。
927login:Penguin:04/08/29 16:36 ID:cGtjWn1N
>>926
>switch_to()は引数をeax、edxから引っこ抜くわけだから、
>そのとき既に、このレジスタに(仮にA、Bとすると)その値が
>保存されてないといけないわけ。
引数にeaxとかが設定されているのはわかります。

>退避するって書いてるけど、switch_toがA、Bをeax、edx・・・
>ああ、面倒。ここまで書いたら解かると思いますけど。
いえ、自分が期待していたのはどっかで汎用レジスタを退避しているのでは
と思っていたのです。どっかでpusha,popaでもしているのかなと。

なんかよくわからなくなってきたので、もう一度調べてみます。
レスしてくれた方、ありがとう。
928login:Penguin:04/08/29 16:42 ID:nVxTwlJG
>>925
ユーザーランドで使っているレジスタは例外発生時に退避されます。
entry.SのSAVE_ALLマクロ使ってる所。
929login:Penguin:04/08/29 19:36 ID:cGtjWn1N
>>928
見てみます。ありがとう。
930923:04/08/30 02:36 ID:s/M5nqAJ
なんかわかったような気がしてきました。
暗闇の中に一筋の光が見えてきました。
931login:Penguin:04/09/06 16:37 ID:zvPrxyTS
初心者はここから勉強しましょう。
ム板より転載。
http://program2ch.jugem.cc/
932login:Penguin:04/09/28 13:20:48 ID:j6tq7+L5
linux programmingスレが無かったのでここで聞いてみる。
2.2用のカーネルモジュール(driver)がありまして、2.4で使いたいのですけ
ど、カーネルに変更が加わった為かソースはそのままではmakeが通らないです。
一般的な話でいいのですが、kernel2.2から2.4などバージョンを上げる時
moduleのソースはどの辺りに修正加えてますか?

933login:Penguin:04/10/12 13:21:06 ID:8oNaJMZy
>>932
オライリーの「LINUXデバイスドライバ」ぐらい持っとけ。
934login:Penguin:04/12/22 21:16:51 ID:pSCYM4cf
>>932
2.2と2.4の同じデバイスのドライバ見比べてみたらどうでしょうか。

あと、「LINUXデバイスドライバ」って英語版はWeb上で読めましたっけ。
935login:Penguin:04/12/23 07:06:29 ID:S0CjoABJ
x86カーネルだと、1GByteのメモリを使うのですら、
HIGHMEMが必要なわけですが、
HIGHMEMを使うにあたって、ペナルティ等はありますか?

2.6になって改善されたというような記事は見つかったのですが、
具体的な問題については見つかりませんでした。
936login:Penguin:04/12/30 10:00:07 ID:4MuG0KSs
guluの皆様、ご教示ください。

モジュールでシステムコールを追加する方法というのはありますが、
(hoge.oをロードしてる間だけhoge()と言うシステムコールが使える)
既存のシステムコールを上書きすることはできるのでしょうか。
(hoge.oをロードしている間だけカスタマイズしたopen()、close()が使えるような)

カーネルがROなROMに焼かれているシステムですので、カーネルに直接
手を入れることができず上記のような発想で対応したいと考えています。
937login:Penguin:04/12/30 10:00:44 ID:4MuG0KSs
>>936
なお、対象のカーネルは2.4.17です。
938login:Penguin:04/12/30 10:09:32 ID:4MuG0KSs
自己レスとか言う奴です。
ここにそのものズバリがありました。
ご参考に。

http://www.csg.is.titech.ac.jp/~kourai/memo/linux_kernel.html
939login:Penguin:05/01/29 14:37:42 ID:gZ/pqgzp
おしえろ

# define __acquire(x)__context__(1)

__context__(1)ってのはどういう意味?

教えてくれた人には俺の妹をもれなくプレゼント!
940login:Penguin:05/02/01 14:08:57 ID:lTL5Ae25
>>939
コンテキストスイッチ。

って何だったっけ?

ああ、不完全だからおぱーいとマソこだけでいいよ。
941login:Penguin:05/02/01 15:58:58 ID:Azn3cU4M
>>940
とりあえずレスに感謝。あんた最高だよ、ただコンテキストスイッチじゃないんだよな。
不正解だから>>940には、俺の使用済みティッシュ(3年分)をもれなくプレゼント!

__context__(1)ってのはどうもgcc拡張っぽい気がするんだ。
942login:Penguin:05/02/03 11:47:43 ID:vTRZ9nM+
このスレ最高
943login:Penguin:05/02/03 12:58:08 ID:8pVcdBBv
linux2.6 の include/asm-generic/percpu.h の per_cpu() がどういうものなのか
理解できずに苦しんでます。どうかご教授ください。
944login:Penguin:05/02/20 01:52:12 ID:HsEiZt6D
ぱっと見だけど、
DEFINE_PER_CPUで定義したCPU毎の変数を取り出すマクロじゃないの?

ttp://lwn.net/Articles/22911/
945login:Penguin:05/02/20 01:59:27 ID:HsEiZt6D
うぉ!2週間前か…。
946943:05/02/23 08:44:24 ID:L5tOcRY0
>>944
ありがとうございますm(_ _)m
半分、あきらめかけていました。
947CPUID:05/02/25 14:48:05 ID:T5ngmMgI
ユーザ空間からプロセススクリプトのアドレス取得する方法があれば教えて下さい。
948login:Penguin:05/02/25 21:56:30 ID:Kyzhm2lt
プロセススクリプト? 何のことを言おうとしているのだろう・・・
949login:Penguin:05/02/25 23:10:03 ID:L0S86Pvn
すみません。
すプロセスディスクリプタの誤りです。
950login:Penguin:05/02/25 23:55:11 ID:Nj2juC+S
>>949
そんなんユーザー空間から見えちゃまずいだろう。
951login:Penguin:05/02/26 13:57:10 ID:NTEY/KLT
何をするつもりだ>>949
お前は一人で世界を救おうというのか!
952login:Penguin:05/02/26 20:38:32 ID:c7lqcqLw
おい。
カーネルを理解したいのだ。

「この本をこの通りに順番に読め!」
というのがあったら、教えてください。
953login:Penguin:05/02/26 21:54:11 ID:PsgioYqx
>>952
本などない
ソース嫁
954login:Penguin:05/02/27 14:18:38 ID:BnGxFurs
↓の2つのマクロの意味が分かりません。もう限界です。
これ以上理解できない状態が続くと、妻を道連れに逝くかもしれません。
そうなったらお前らすごい後悔するよな、そうだよな、そうだろ!
心の中で否定しても無駄だ、絶対後悔しちゃうぞ。
後悔したくないよな、そうだよな。

じゃー、さっさと教えてちょ!

include/linux/compiler.h
# define __releases(x)__attribute__((context(1,0)))
# define __acquire(x)__context__(1)

すいません、ちょっと強気に迫ってみましたが、教えてください。
本当に困ってます。頼みます。m(_ _)m
955login:Penguin:05/02/27 14:21:21 ID:BnGxFurs
>>952

1. UnixUserのLinux2.6解読室
2. 詳解Linuxカーネル
3. Linuxのソース
956login:Penguin:05/02/27 20:25:37 ID:1DzM+Kt1
>>955
詳細Linuxカーネルは持ってます。
UnixUserのブートの本も。

ただ、それに至る知識がないのです。

Linuxプログラミング(ソフトバンクのやつ)も読んでいるのですが、
「何かが足りない」感じなのです。
957login:Penguin:05/02/27 20:27:14 ID:1DzM+Kt1
UNIXカーネルの設計でも読んで、修行します。
958login:Penguin:05/02/27 20:53:44 ID:+C2cvjvn
>>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.
この辺り見れば?
959login:Penguin:05/02/27 20:54:49 ID:BnGxFurs
>>956

あくまで個人的な意見だが、Linuxカーネルはプロセッサの知識
が無いと苦しい。
「はじめて読む8086」→「はじめて読む486」
を読んで、プロセッサの知識を身につけておいた方が良いと思う。

ただ、「あれやって、これやって、そしてLinuxカーネルを読もう」
とあまり遠回りをするのではなく、プロセッサとC言語の知識が
あったら、すぐにLinuxカーネルを読み始めた方がよいように思う。
960954:05/02/27 21:00:55 ID:BnGxFurs
>>958
とりあえずレス、サンクス!感謝感謝感謝
Linux2.6.10です。
探してみたんだけど見つかりません>gccのinfo (ToT)

context()っていう関数が一体、どの関数のことなのか知りたいです。
961login:Penguin:05/02/28 11:32:10 ID:D7G2yqC2
>>960

つ[GNU GLOBAL ソースコードタグシステム]
http://tamacom.com/global-j.html
962960:05/03/01 07:37:21 ID:yi/Urpst
>>961

サンクス、ちょっと試してみます!
追って報告する!
963960:05/03/01 11:16:17 ID:yi/Urpst
やはり見つからない(T_T)

include/linux/compiler.h
の中のマクロってことがヒントかもしれない。
http://lxr.linux.no/source/include/linux/compiler.h#L6
↑の場所なんだが、
#ifdef __CHECKER__
っというのは何だろう?__ASSEMBLY__とかいう定義もあるが、
これはどこで調べれば良いのだろうか。

どうか放置せずに教えてください m(_ _)m

これ以上停滞してると、・・・お、お客さんが怖い・・・
964login:Penguin:05/03/01 11:56:56 ID:dudfwCjE
仕事を2chに丸投げですか そうですか。
965login:Penguin:05/03/01 12:04:54 ID:eifVJR66
>>963
>これ以上停滞してると、・・・お、お客さんが怖い・・・
ソースを解析する仕事??
966login:Penguin:05/03/01 12:14:12 ID:PnFz+g+l
出来もしない仕事なんて引き受けるなよ…
967960:05/03/01 13:45:21 ID:yi/Urpst
>>964-966
スイマセン。

ソースを解析する仕事じゃないんだけど、ちょっと行き詰ってまして・・・。
968login:Penguin:05/03/01 15:25:54 ID:eifVJR66
むしろ>>963の質問よりも仕事内容の方が気になった...
969960:05/03/01 16:13:44 ID:yi/Urpst
とある医療関連会社のシステムの試作(主にデバドラ)をやってます。
下請けなので断れない立場です(T_T)
970login:Penguin:05/03/01 16:16:52 ID:xn0lGzJZ
できもしない仕事請けるなよ。
おたがい不幸になるだけだ。
971login:Penguin:05/03/01 16:21:19 ID:xn0lGzJZ
この話が終わりしだい↓に統合でいいよね。

【Linux】カーネル総合2【Kernel】
http://pc5.2ch.net/test/read.cgi/linux/1100967722/
972login:Penguin:05/03/01 16:36:21 ID:eifVJR66
>>969
ちょっと調べたら自分はわかったよ。

言っておくけどデバドラ開発ならこれらは知らなくても別に問題ないよ。
無視してもいい。


ちょっとだけヒント:これらはgccでは使用しません
973960:05/03/01 16:44:06 ID:yi/Urpst
>>972
サンクス!x9
か、かなり気が楽になったよ。お前は神だ!
できればどこを調べたのか知りたいのだが・・・頼む.com

>>970は厳しいね。
仕事、断れるくらい大きい会社に勤めてるんだろうね。うらやましぃ...
974login:Penguin
>>973
>できればどこを調べたのか知りたいのだが・・・頼む.com
(ーー;)
無視してもよいと言ってるではないか...

Use the source and google, >>963




− May the source be with >>963