2015-12-10 10 views
6

あり、システムコールのマニュアル(2)ページがあるが、これらはシステムコールの上に座っているCライブラリ(glibcでは)の挙動を説明します。生システムコールAPI/ABIはどこかに文書化されていますか(UseTheSourceLuke以外)? manページのkernel/libcの違いについていくつか触れましたが、これらの違いを文書化することが最優先事項であるとは感じられませんでした。ですが、生のLinuxシステムコールAPI/ABIのドキュメント

本当に私が言っていることは:CライブラリはPOLICYの安定した/文書化されたLinux APIであると考えられていて、カーネルのシステムコールAPI/ABIは不安定で(変更されるかもしれない)または低い優先度?

システムコールを変更するカーネル開発者は、glibcで回避策を講じていますか?他のlibcはどうですか?

このテーマに関連する歴史的ディスカッションはありますか?

編集:だからABIは安定であり、また、システムコールの振る舞いが、彼らはカーネル開発者によって記載されていません。 glibcは代わりにそれらを文書化しています(独自の追加/変更があります)。正しい?

+1

re:_historical discussion_。あなたは*** [ここ](https://www.safaribooksonline.com/library/view/linux-system-programming/9781449341527/ch01.html)***を見つけるかもしれません。深みはありませんが、API/ABIなどのトピックの概要があります。 – ryyker

+0

@ryyker good find –

+0

システムコールの引数がどのようにカーネルに渡されるかを尋ねるなら、ABIは与えられたプロセッサアーキテクチャ内で安定しています。プロセッサー・アーキテクチャー間では、ABIの差異が見えます。 – JJF

答えて

3

私は、カーネル開発者が実際に割り込みAPIを投稿するとは思わないが、あなたはthis oneのようなサードパーティのチャートを見つけることができます。

+0

グラフは良いです。 – ryyker

+2

もちろん、このようなグラフを作成する場合は、カーネルのバージョンに一致するものを選択する必要があります。リンク先はLinux 2.2です。したがって、2004年に投稿されたばかりなので、現在はかなり古くなっています。 –

+2

@JohnBollinger - これは古いカーネルバージョンでは当てはまりましたが、ページの作成者は新しいカーネル用の独自のチャートを作成するためのリソースも提供します。また、あなたが「かなり古くなった」と言っても、多くの呼び出しは最新のカーネルに変更されていません。 (自分のコンパイラを実装するときにいくつかテストしました) – owacoder

2

は、syscall man pageです。特に、セクション・タイトル「アーキテクチャ・コール・コンベンション」に注意を払い、上記の情報はカーネル・バージョンによって異なる可能性があることに注意してください。

0

私が本当に言うことを意味することである:Cライブラリは、ポリシーによって安定/文書化され、LinuxのAPIであると考えられ、そしてカーネルのシステムコールAPI/ABIが不安定であると考え(変更される可能性があり)、したがって、文書化されていません目的や優先度は低いですか?

それはため、そのポリシーを指定せずに政策に話をすることは不可能です。裸のカーネルのために対立するものとしての「Linux」のためのプログラミング

人々は一般的に、GNU/Linuxのの一の以上の味のため、実際のプログラミングです。カーネルの開発者方針を検討していない可能性が高いと言えます。実際に、Cライブラリのインタフェースがまったく利用できない場合、私たちは裸のカーネルについては言及していません。さらに、あなたのタグ付けに基づいて、私はあなたがCプログラミングについて質問していると仮定しています。アセンブリでプログラミングしていたのであれば、生のシステムコールインターフェイスは自然で適切なものになり、残りのコメントのほとんどは当てはまりません。

あなたが本当にGNU/Linuxを対象としているのであれば、何か他のものを除いて、その質問はやや賢明です。一方、幅広い互換性のためにプログラムすることを好むケースがよくあります。その場合、各システムの未処理のシステムコールが異なるため、Cライブラリのシステムコールインターフェイスを使用する代わりに実際には使用できません。 Glibcのシステムコールインターフェイスは、POSIXとSUSに準拠しているので、移植性の面で大きな利点です。 OS X、BSD、Solarisなどの他のUnixやUnixライクなシステムが直接のターゲットではないとしても、そのようなシステムであなたのソフトウェアを使用する可能性はほとんどありません。とにかく

あなたのソフトウェアが直接Linuxのシステムコールを実行有すると決定した場合、あなたは確かにどこでもあなたがそれを望んでいたことを行うには、インラインアセンブリを挿入しますでしょうか?確かにそうではありません - あなたはラッパー関数を書くでしょう。なぜ、Cライブラリがすでに提供している完全にテストされ、十分に文書化されたラッパー関数を使用することに反対する必要がありますか?

確かにLinuxのsyscallインターフェイスは、カーネルバージョン間である程度変更されています。それはのバージョンを違うものとみなすことができます(つまり、x.2y - >x.2zまたはx.y->z.w)。私はよくそのような変更がどれほど大きいかについては十分に調整されていませんが、以前は互換性のない変更がありました.Cライブラリインターフェイスを使用すると、そのような変更をある程度防ぐことができます。しかし、上記のように、私はCライブラリインターフェイスを好む理由が他にもあると思います。

+0

ポリシーで私は本当にカーネル開発者のことを意味しました。そして、もし私が裸のLinuxカーネルだけを持つ組み込みプラットフォームを書こうと思ったら、その場合はどこのドキュメントを入手できますか?そのシナリオでは文書化されていませんか? –

+0

(サードパーティを除く) –

+1

@ ctrl-d、それでは、良かったのですが、どうしてそんなこと言わなかったのですか?描画するCライブラリがない場合は、Cライブラリのインターフェイスは使用できません。あなたが本当に知りたいことを尋ねるためにあなたの質問を改訂してください。 –

関連する問題