Linuxの高度なデバッグと最適化 - セマフォのメカニズムとアプリケーションがクラッシュ

背景

  Linuxカーネルモードとユーザーモードに、カーネルモードユーザーモードは、システムコール(システムコール)によって行われます。

  他の機能のサポートを提供しながら、Linuxカーネルのシステムへのユーザ空間ライブラリglibcパッケージには、GNU Cライブラリのライブラリファイルは、(ANSI&POSIX C言語の標準との互換性)を呼び出します。

  アプリケーションは通常、直接Linuxカーネルのシステムコールインタフェースを呼び出すが、Linuxカーネルのシステムコールインタフェース間接的なglibcライブラリパッケージによって呼び出されますされていません。

 

セマフォメカニズム

  セマフォメカニズムの原則上のLinuxは、私は「プログラミング環境のUnixアドバンスド」第10章を読んで、このブログはその原則だけの簡単な紹介ですお勧めします。

  セマフォは、Linuxカーネルとアプリケーション間の非同期通信のために、ソフト割り込みです。

  Linuxは、各セマフォは、4バイトの整数データで表され、セマフォ約380種類をサポートしています。あなたは男信号によって記載されているすべてのセマフォを表示することができます。セマフォのUnixから継承されている請求項32に第1号は、33〜64は、Linuxカーネルセマフォで定義されています。

  信号処理機能の量は、アプリケーション内で定義することができますので、ノーカスタムの場合、セマフォリンクデフォルトのハンドラではglibc。また、アプリケーションは指定されたセマフォをブロックすることができます。

  セマフォトリガー状況、3があります。

  Linuxカーネルは、アプリケーションにアプリケーションに送信特定の信号の量を異常を検出する)1の後に、アプリケーションは、セマフォ、セマフォコールハンドラを捕捉します。

  2)Linuxカーネルと有名なセグメンテーションフォールト、シグナルハンドラ関数を呼び出し、セマフォをキャプチャするアプリケーションとして、発生したイベントのためにアプリケーションに通知し、理由は内部イベントのアプリケーションに固有の信号を送信します。

  3)Linuxカーネルは、アプリケーションがセマフォ、セマフォコールハンドラをキャプチャするアプリケーションに固有の信号を送信する、などのCtrl + Cは、Ctrl + Z、などの外部イベントを検出します。

 

共通のセマフォ紹介

       コメントアクション標準信号
       ────────────────────────────────────────────── ──────────────────────────
       SIGABRTの      中止からp1990コア信号ABORT(3)                        コールアボート()システム、通常はglibcライブラリによって生成SIGABRT信号アプリケーション例外を検出し、アクティブトリガ
       SIGALRMの      p1990用語からタイマ信号アラーム(2)
       SIGBUS       P2001コアバスエラー(不良メモリアクセス)SIGBUSアドレスが例えば奇数アドレスとして、リードと整列されていない通常ので、バスアクセスエラーを意味し、
       SIGCHLD      IGN p1990子供が停止したか、子スレッドが実行を終了するときに終了SIGCHLD信号がメイン処理の量に送られ
       SIGCLDを         - IGNの同義語SIGCHLD
       SIGCONT      P1990続き停止続行
       SIGEMT         -タームエミュレータトラップ
       SIGFPEの       p1990コア浮動小数点例外
       SIGHUPの       p1990用語ハングアップは、制御端子で検出
                                       またはプロセス制御の死
       SIGILLの       暴走または互換性のない場合であってもよいp1990コア不当命令SIGILL不正コマンドエラーをコード
       SIGINFO        -の同義語用SIGPWRの
       SIGINT       からp1990キーボード期割り込み
       SIGIO          -中期I / O今可能(4.2BSD)
       SIGIOT         -コアIOTトラップ。同義語SIGABRT
       SIGKILL      P1990用語キル信号SIGKILL通常是通过殺す-9 <PID>手动杀死进程时触发的信号量;
       SIGLOSTは        -タームファイルのロックが失われた(未使用)
       SIGPIPE      P1990用語ブロークンパイプは:なしでパイプに書き込む
                                       リーダ; 参照パイプ(7)
       SIGPOLL      P2001用語ポーリング可能イベント(SYS V)。
                                       同義語SIGIO
       SIGPROF      P2001用語プロファイリングタイマーが満了し
       SIGPWR         用語停電(システムV) -
       SIGQUITを      P1990コアキーボードから終了
       SIGSEGV      、p1990コア無効なメモリ参照SIGSEGV通常、スタックオーバーフロー、野生ポインタまたはヌルポインタ場合に、不正なメモリアクセスを意味
       SIGSTKFLTを      コプロセッサの長期スタックフォルト(未使用) -
       SIGSTOP      停止停止プロセスp1990
       SIGTSTP      停止p1990停止端末ATは、型付き
       SIGSYS       (SVr4のための)悪いシステムコールコアのP2001と、
                                       関連項目(2)Seccompを
       SIGTERMの      終端信号p1990用語
       SIGTRAP      P2001コアをトレース/ブレークポイントトラップSIGTRAPセマフォは、典型的には、同様に挿入されたGDBデバッガブレークポイントとして、デバッグのために計測されます
       SIGTTIN      バックグラウンド処理のためのP1990停止ターミナル入力
       SIGTTOU      バックグラウンド処理のためのP1990停止ターミナル出力
       SIGUNUSED      -と同義コアSIGSYS
       SIGURG       ソケットにP2001 IGN緊急条件(4.2BSD)
       SIGUSR1      P1990用語ユーザー定義シグナル1
       SIGUSR2      P1990用語ユーザ定義信号2
       SIGVTALRM    P2001用語仮想目覚まし時計(4.2BSD)
       SIGXCPU      P2001コアCPU時間制限を超過(4.2BSD)。
                                       参照(2)はsetrlimitを
       SIGXFSZ      P2001コアファイルサイズの上限は(4.2BSD)を超え、
                                       参照はsetrlimitを(2)
       SIGWINCH       - IGNウィンドウリサイズ信号(4.3BSD、日)

 

高度なセマフォ

  カスタムLinuxでは、シグナルハンドラ関数を操作量指示信号を遮断、参照について「:シグナルシステムプログラミング」

  セマフォ・ハンドラは、例外がアプリケーションを発生したとき、それは親関数のスタックを再利用しますので、信号の処理量は、通常の関数呼び出しではありませんので、基本的に修理やデバッグ機構であり、例外ハンドラセマフォ場合に発生しますシステムが対処する方法はありません、そのため、信号処理機能の量は、安全性と信頼性でなければなりません。

  以来量として定義されるシグナルハンドラは、(デッドロックを防ぐために)セマフォ同期を行うことはできませんが、コール・フォークでgdbデバッガを再生したり、ディスクにログファイルを書き込むことができます。

おすすめ

転載: www.cnblogs.com/justin-y-lin/p/11257472.html