[シングルブラシAPUEシリーズ]第VIII章 – プロセス制御[2]

1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...

ディレクトリ

[シングルブラシAPUEシリーズ]第1章 – Unixの基礎[1]
[シングルブラシAPUEシリーズ]第1章 – Unixの基礎[2]
[シングルブラシAPUEシリーズ]第2章 – Unixの標準と実装
[シングルブラシAPUEシリーズ]第3章 – ファイルI / O
[シングルブラシAPUEシリーズ]第4章 – ファイルとディレクトリ[1]
[シングルブラシAPUEシリーズ]第IV章 – ファイルとディレクトリ[2]
[シングルブラシAPUEシリーズ]第5章 – 標準I / Oライブラリ
[シングルブラシAPUEシリーズ]第6章 – システムデータファイルと情報
[シングルブラシAPUEシリーズ]第VII章 – プロセス環境
[シングルブラシAPUEシリーズ]第VIII章 – プロセス制御[1]
[シングルブラシAPUEシリーズ]第VIII章 – プロセス制御[2]
[シングルブラシAPUEシリーズ]第9章 – プロセスの関係
[シングルブラシAPUEシリーズ]第10章 – 信号[1]

Waitid関数

以前のwait-->ためにwait-->

上記の2つはオリジナルの作品であり、1つはAppleシステムの実装ですが、作者は機能マニュアルで具体的な説明を見つけられなかったので、ここでは紹介しません。

Wait3およびwait4関数

上記の待機関数に加えて、BSD時代から続き、実際にはUnix標準になっている2つの関数があります。

pid_t wait3(int *stat_loc, int options, struct rusage *rusage);
pid_t wait4(pid_t pid, int *stat_loc, int options, struct rusage *rusage);

実際には、パラメータの数と基本的な名前から、これら2つの関数が使用される理由を推測することもできます。 しかし、Unixシステムのマニュアルにはまだ添付されています

The wait4() call provides a more general interface for programs that need to wait for certain child processes, that need resource utilization statistics accumulated by child processes, or that require options.  The other wait functions are implemented using wait4().
The waitpid() call is identical to wait4() with an rusage value of zero.  The older wait3() call is the same as wait4() with a pid value of -1.

wait4関数は、より一般的なインターフェースを提供しますが、リソースの統計も含みます。

struct rusage {
        struct timeval ru_utime; /* user time used */
        struct timeval ru_stime; /* system time used */
        long ru_maxrss;          /* max resident set size */
        long ru_ixrss;           /* integral shared text memory size */
        long ru_idrss;           /* integral unshared data size */
        long ru_isrss;           /* integral unshared stack size */
        long ru_minflt;          /* page reclaims */
        long ru_majflt;          /* page faults */
        long ru_nswap;           /* swaps */
        long ru_inblock;         /* block input operations */
        long ru_oublock;         /* block output operations */
        long ru_msgsnd;          /* messages sent */
        long ru_msgrcv;          /* messages received */
        long ru_nsignals;        /* signals received */
        long ru_nvcsw;           /* voluntary context switches */
        long ru_nivcsw;          /* involuntary context switches */
}

これらの2つの関数の最後のパラメータは、この構造を通じて子プロセスのリソース統計を理解できる構造です。

競争条件

リソースは限られているため、オペレーティングシステムの1つの機能はリソースの割り当てを提供することです。競合状態は、オペレーティングシステムの原則の概念におけるリソースの競合です。 たとえば、fork関数が呼び出された後、ある種の論理実行は、親プロセスと子プロセスが順番に実行されていることに依存する必要があります。プロセスが最初に実行されます。
元の例では、ルーチンは、最初の子プロセスの前に2番目の子プロセスを実行する必要があります。 ちょうどwhile (true)-->と思ったイベントループのように

元の本には7つの関数がありますが、実際には著者はAppleシステムで6つの関数ファミリしか見つけず、CentOSシステムでは5つの関数しか見つかりませんでした。 実際、これらの関数はexecve-->

これは関数への最後の呼び出しです。関数のexecファミリには3つのパラメータ、ファイルパス、渡されたパラメータの配列、環境変数が必要です。 その他の基本は、この関数の単純化されたバージョンまたはバリアントです。 前述の説明では、pathをパラメータとして使用せず、代わりにfileを引数として使用する関数が2つあることがわかります。file引数が絶対パスの場合は絶対パスの場所が使用され、そうでない場合はPATH環境変数の検索ファイル。 正面から見ると、関数execle-->

機能を説明する前に、まずプロセスの3つのIDを説明し、実際のユーザーグループIDを使用してプロセスの所有者を識別し、実効ユーザーグループIDを許可チェックに使用します。有効なユーザーIDを復元するには、初期のUnixシステム設計では、すべての機能を引き継いだユーザーグループIDが1つだけでしたが、後でset-uid bit-->

これらの2つの機能は、それぞれ実際のグループIDと実効ユーザーグループIDを設定するために使用されます。ルート権限のみを任意に変更でき、非特権ユーザーが実際のユーザーグループIDと実効ユーザーグループIDを交換します。
実際、一言で言えば、上の6つの関数は実際にはルート特権と非ルート特権の2つの形式をとりますが、いずれの場合でも、ルート権限だけが実際のユーザーグループIDを変更できます。パーミッションチェック。ルート特権プロセスは自分のパーミッションを減らすことができますが、他のプロセスでは許可できません。

インタプリタファイル

インタープリタファイルは実際には普通のファイルですが、パーミッションビットが実行権限を増やし、ヘッダは#!pathname[optional-arguments]-->

システム関数は、文字列をshインタプリタに渡し、シェルが実行終了するのを待ちます。コマンド引数がNULLポインタで、shインタプリタが存在する場合は0以外を返し、そうでない場合は主にshが存在するかどうかを判定するために使用します。 。 ここには何も言えません。元の本が完成しました。これは非常に便利な機能です。

プロセス会計

プロセスアカウンティングはいかなる標準の問題でもないので、各UNIXシステムの実装はそれ自身の理解に従って実装されるので、クロスプラットフォーム開発では非常に面倒であり、各プラットフォームで提供されるクエリコマンドには一貫性がないため、これの重要性は、このセクションは無視できるということです。

ユーザーID

実際のUnixシステムでは、uidとgidはユーザーをマークする方法であり、資格情報とも呼ばれますが、デジタルフラグの形式でシステムを管理する必要はないため、英語で提供されるユーザーIDがあります。対応するマッピング

char *getlogin(void);
int setlogin(const char *name);

suコマンドなどのuidを変更するプログラムであっても、ログイン名を設定するのであれば、セッション内でログイン名は変更されません。この機能はroot権限でのみ呼び出すことができます。

プロセススケジューリング

プロセススケジューリングは、オペレーティングシステムによって決まります。開発者とユーザーは、システムが独自のプロセスをスケジュールする方法を知ることはできませんが、プロセスの優先順位を設定できます。 また、Unixシステムは、変更と照会のための関連インタフェースを提供します。 もちろん、CPUは他のリソース制限と同様にリソースでもあるため、ルート特権プロセスだけが独自の優先順位を上げることができます。他のプロセスは優先順位を下げることができます。

int nice(int incr);

nice関数は設定自体の制限を取得するために使用され、これは累積された値です。この関数の制限により、システムは別の関数

int getpriority(int which, id_t who);
int setpriority(int which, id_t who, int prio);

どのパラメータがRIO_PROCESS, PRIO_PGRP, or PRIO_USER-->取るRIO_PROCESS, PRIO_PGRP, or PRIO_USER-->

構造体にはウォールクロック時間は含まれていませんが、関数はクロック時間を返します。構造体には、ユーザーCPU時間、システムCPU時間、子プロセスのユーザーCPU時間、および子プロセスが含まれます。システムCPU時間。


1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...
      この投稿は審査処理中  | 元のサイトへ