2016-03-18 7 views
0

私はUnix 6thの実装に対する回答を探しています。 http://warsus.github.io/lions-/エラーコードはどのようにユーザープログラムに返されますか?

2774:     if(u.u_error < 100) { 
2775:       if(u.u_error) { 
2776:         ps =| EBIT; 
2777:         r0 = u.u_error; 
2778:       } 
2779:       goto out; 
2780:     } 

システムコールのエラーコードがu_errorようなユーザSTRUCに格納され/戻されます。次に、それはレジスタr0に転送されます(上記のコードスニペットではr0ではなく、近い)。これらはすべてカーネルモードで発生します。私の質問は、r0のこのエラーコードがユーザーモードの呼び出し元に返される方法です。特に、r0はユーザーモードのコードで直接アクセスできますか?私は詳細を探していません。

+2

このコードとユーザープログラムの間には、いくつかのレイヤーが関係しています。 Linuxで同様のことを見ると、よく書かれています。特に、http://musl-libc.org/ –

+0

のようないくつかの 'libc'のソースコードを調べてください。今後、基本的なプログラミング知識以上のものが必要なこのような質問をするときは、プログラミング言語タグを与えてはなりません例えばC)。もしあなたがそうしたならば、ただあなたのSOポイントを稼ぐことを試みているばか人の前にあなたの質問をして、あなたが理解できない質問をホールドします。 – user3344003

答えて

1

あなたはトラップ処理コードを見ています。システムは、トラップ例外を発生させることによってカーネルモードに切り替わります。

システムサービスは、パラメータを解凍してトラップを生成し、パラメータを再パックするラッパーです。あなたが欠けている部分は、コピーしたコードを実行するトラップを引き起こすユーザーモードラッパーです。

+0

カーネルがレジスタr0を介してユーザプログラムにエラーコードを返すことを知りました。しかし、r0はユーザーモードでアクセスできますか? – CCNA

+0

はい、できます.--- – user3344003

関連する問題