システムコール、例外、0で割ったものなど、それらはすべてlinuxで同じベクトルエントリを持っています。 x86の場合は0x80です。だからシグナルはどうですか? OSはプロセスへのシグナルにint 0x80も使用しますか?はいの場合、誰がそれを呼び出しますか?カーネルにトラップが必要な場合、システムコールのようにint 0x80またはそのラッパーをコールする必要がありますが、0x80を呼び出すシグナルの場合は?linuxのシグナルの場合、whoはint 0x80を呼び出しますか?
答えて
まずは。 int 0x80は、現代のIntelのCPU上で、現代のOSでは長い間使用されていません。 sysenter命令は通常は現在使用されています(http://siyobik.info/main/reference/instruction/SYSENTER参照)。信号用として
、あなたは2例がある - 信号が送信されたときに、信号のターゲットがCPU上で実行されていない場合
を、その後、信号を送信することは、その後の何物でもありませんカーネルデータのビットをマーキングそれは、そのプロセスをCPUに戻してプログラムカウンタを元のPCではなく信号処理ルーチンに置くことをカーネルに示した構造です。
信号が送信されたときに信号を送るプログラムがCPU上で実行されている場合、信号は割り込みとしてトリガされます。信号が同期(たとえばゼロ除算など)の場合、割り込みは例外コアはCPUコアから生成されます。シグナルが非同期(シグナルを送信している別のコアで実行されている別のプロセスなど)の場合、割り込みは他のコアから送信されたプロセッサ間割り込みです。
したがって、int 0x80はどこでも:-)
基本的に信号は割り込みと似ていません。ユーザーレベルのプロセスは、カーネルによって定期的に中断されます。ユーザーレベルのプロセスにシグナルを送信しようとするとき、カーネルはユーザーレベルのプロセスの命令ポインタをシグナルハンドラのコードにポイントさせてから、再度スケジューリングします。それに応じて、スタックやその他のレジスタも設定します。
遠距離から概念的には(ただし詳細ではないが)非同期信号は割り込みのようなものであることを除いて合意されている...(もちろん割り込みではないとしても) –
Pls、質問を読んでください。 "ゼロ除算"は割り込み(ソフトウェアで生成された同期)で、http://pdos.csail.mit.edu/6.828/2005/lec/lec8-slides.pdfを参照してください。カーネル内の割り込みハンドラによって処理されます(ここでは、ハンドラhttp://lxr.linux.no/#linux+v2.6.33/arch/x86/kernel/traps.c#L891の設定があります)。(do_trap関数で)保留中のシグナルの "フラグ"をセットし、 'force_sig_info'で即座にシグナルを送るようにします。 – osgx
syscall
に電話すると、int 0x80
を使用します。
SIGSEGV
またはSIGFPE
のいずれかの信号を受信した場合は、int 0x80
に電話する必要はありません。
sched_tick
の呼び出しを処理するタイマ割り込みが、ユーザー空間プロセスに制御を戻す前に保留中の信号があるかどうかをチェックし、存在する場合(信号マスクが許可する場合)、適切な信号を呼び出しますハンドラ。
また、シグナルが受信されると、カーネルはコールスタックを設定して、' sigreturn'システムコールがユーザーのシグナルハンドラから戻った直後に呼び出されます。 –
戻り値のプログラミングは、その最高の= D – cha0site
- 1. C++プログラムからRを呼び出す(Linuxの場合)
- 2. Djangoのシグナルは、約2呼び出し
- 3. int $ 0x80プログラミングからグラウンドアップ
- 4. 呼び出し値がnullの場合
- 5. 呼び出しint型の変数は
- 6. シグナル/スロット対ダイレクト関数呼び出し
- 7. (methodX).thenReturn(resultY)の場合、methodXは呼び出されますか?
- 8. androidカスタムビューコンストラクタの場合はsuper()を呼び出すかthis()を呼び出す必要がありますか?
- 9. LinuxのCのGTK + 3.0:シグナルによるコールバック関数の複数の呼び出しを処理します。
- 10. その場合、そのmapView:viewForAnnotation:が呼び出されますか?
- 11. Pythonからint main()を呼び出す
- 12. android fragment bitmap.recycle()を呼び出す場合
- 13. DataMapper、ファイナライズを呼び出す場合
- 14. Objective-C:self.myObjectを呼び出す場合とmyObjectを呼び出す場合の両方
- 15. メソッドを呼び出してキャンセルし、呼び出しに時間がかかりすぎる場合は呼び出しメソッドに戻ります。
- 16. ASP.NET Core Tagヘルパーの場合、ProcessメソッドはProcessAsyncを呼び出しますか?
- 17. Linuxではclose()がfsync()を呼び出しますか?
- 18. 値がfalseの場合(ajax呼び出しの前に)ajax呼び出しを停止します。
- 19. int 0x80(アクセスビット?)のファイルの追加
- 20. Laravel - ヌルの場合はメソッドを呼び出し、ヌルの場合はfalseを返します。
- 21. ISRのInt 13hを呼び出す
- 22. 明示的な呼び出しがない場合、Delphiの呼び出しは継承されます
- 23. のJava:メソッド呼び出しから2つのintを返す
- 24. strは呼び出し可能ではないか、intは呼び出し可能ではありません
- 25. Pageがnullの場合、どのようにGetWebResourceUrl()を呼び出しますか?
- 26. タイプインスタンスのみの場合、ジェネリックメソッドを呼び出す方法は?
- 27. Linuxソケット呼び出しをトレースしていますか?
- 28. 異なるスレッドから呼び出した場合のクエリタイムアウト
- 29. クラスメソッドの場合はコールバックが呼び出されません
- 30. 検証に失敗した場合はjavascriptを呼び出す
おそらく混乱しています。シグナルはカーネルによってアプリケーションプロセスに送られます(したがって、 'int'やトラップは必要ありません)。 http://basepath.com/aup/ http://www.advancedlinuxprogramming.com/ http://tldp.org/HOWTO/Assembly-HOWTO/ –
int 80hを使用して割り込みを生成します(CPUは実行を停止します)。現在のコードをintに変換してベクトルにジャンプします)。 「0で割る」は割り込みを生成する別の方法です(DIVの2番目の引数が0のときにCPU自身によって生成されます)、 'int 0h'のように処理します。ベクタ要素が特定の** Interrupt handler **を指しています。これはOSカーネルの一部です。ハンドラは何をすべきかをチェックし、動作は各int番号ごとに異なります。例えば。ハンドラは選択されたシステムコールを開始します(ユーザモードからカーネルモードに切り替える)。 0時には信号を発生します。 – osgx