オペレーティングシステムに関する注意事項-002プロセス管理とマルチスレッド

いくつかの補足情報、組織の枠組みはより恣意的です〜

プロセスの導入:マルチプログラムシステムの出現後、静的プログラムの概念を記述する能力は不十分です。システム内の状況を記述し、システム内のさまざまな操作のアクティビティルールを記述するために、新しい概念が導入されています。

プロセス制御

プロセス制御プリミティブ

システム内のプロセスを効果的に管理するために、通常、システムはいくつかの基本的な操作を提供します。これらの操作はプリミティブと呼ばれます。一般的に使用されるプロセス制御プリミティブは次のとおりです。

プロセスプリミティブ
の確立このプリミティブの主なタスクは、確立されたプロセスのプロセス制御ブロックPCBを確立し、対応する初期値を入力することです。主な操作プロセスは、最初にシステムのPCBスペースに適用して、アイドル状態のPCBを割り当て、次に親プロセスによって提供されるパラメーターに従って子プロセスのPCBエントリを初期化し、最後にプロセスの内部名を返すことです。
通常提供されるパラメータ:プロセス名(外部識別子)n、プロセッサの初期状態(またはプロセス実行シーンの初期値、主に各レジスタとプログラムステータスワードの初期値を参照)S0、優先順位番号k0、親プロセスは子に割り当てられますプロセスの初期メインメモリ領域M0および他のリソースリスト(複数のリソーステーブル)R0など。
プロセスプリミティブを確立する作業は、大まかに次のように説明されます。

procedure Create(n,S0,k0,M0,R0,acc)
begin
	i:=Get New Internal Name(n); // 调用查找进程名过程,参数为进程外部名。查找对象为PCB集合,如果同名则返回出错信息
	Id(i):=n;
	Priority(i):=k0;
	Cpustate(i):=S0;
	Main Store(i):=M0;
	Resources(i):=R0;
	Status(i):='Readys'; // 设置为‘挂起就绪’
	Parent(i):=*;
	Set Accounting Data; // 在PCB中(或其他相应表中)建立记账信息,这也是调用‘记账过程’
	Insert(RL,i);
end.

サスペンドプロセスプリミティブ
は、自分自身またはその子孫のみをサスペンドできます。
コマンドプロセスは次のように説明されます。

procedure Suspend(n,a);
begin
	i:=Get Internal Name(n);
	S:=Status(i);
	if	S="Running" then STOP(i);
	a:=COPY PCB(i)
	Status(i):=if a="Blockeda" then "blockeds" else "Readys";
	if	S="Running" then SCHEDULER // 调用调用程序SCHEDULER
end.

アンサスペンドプリミティブアンサスペンド
プロセスは次のように説明されます。

procedure Resume(n);
begin
	i:=Get Internal Name(n);
	Status(i):=if Status(i)='Readys' then 'Readys' else 'Blockeda';
	if	Status(i)='Readya' then SCHEDULER
end.

プロセスプリミティブの失効失効プリミティブに
は2つの戦略があります。1)指定された識別子を持つプロセス(その子プロセス)のみを失効させます。2)その子プロセスの1つとプロセスのすべての子孫を失効させます。
1)プロセスツリーの階層関係が破壊され、システムがいくつかの孤立したプロセスを残して、それらを制御できなくなります。したがって、2)が一般的に採用されています。
キャンセルプリミティブは通常、親プロセスまたは祖先によって発行され、それ自体をキャンセルすることはありません。
プリミティブの一般的な説明:

procedure Destroy(n);
begin
	Sched:=false;
	i:=Get Internal Name(n);
	KILL(i);
	if Sched=true then SCHEDULER;
end(Destroy)
procedure KILL(i);
begin
	if Status(i)='Running' then
		begin STOP(I);
			  Sched:=true
		end
	REMOVE(Queue(i),i);
	for all S<- progeny(i) do KILL(S); //<-是数学集合元素中的属于
	for all r<- Resources(i) do RELEASE(r);
								RELEASE(PCB(i));
end(KILL)

プロセス優先順位番号プリミティブを変更する
省略

オペレーティングシステムとプロセス制御の実行

少し

マルチスレッド

ユーザーレベルのスレッドKLTとカーネルレベルのスレッドULT

純粋なKLTメソッドと純粋なULTメソッドの欠点を克服し、これら2つのメソッドの利点を得るには、2つのメソッドを組み合わせる必要があります。これは、マルチスレッドに基づくオペレーティングシステムです。カーネルは、複数のスレッドの確立、スケジューリング、および管理をサポートします。同時に、システムはスレッドライブラリの利便性を提供し、ユーザーアプリケーションがユーザーレベルのスレッドを確立、スケジュール、および管理できるようにします。

テキストディスカッションでは、ユーザーレベルのスレッド、カーネルレベルのスレッド、ユーザースレッド、およびカーネルスレッドがよく表示されます。実際、ユーザーレベルのスレッドULTとカーネルレベルのスレッドKLTはどちらも管理概念です。つまり、スレッドはユーザーまたはカーネルによって作成および管理されます。素人の言葉で言えば、スレッドアカウントはカーネルまたはユーザーアプリケーションにあります。
システム内の特定の各スレッドには、次の2つのタイプしかありません。
(1)ユーザースレッド:ユーザーアドレス空間で実行されているスレッドを指します。ほとんどのスレッドはユーザースレッドです。
(2)カーネルスレッド:カーネルサブルーチンや、スレッドによって実装されるすべての割り込みハンドラーや例外ハンドラーなど、カーネル空間で実行されるスレッドを指します。これらはすべてカーネルスレッドです。

すべてのユーザーレベルのスレッドはユーザースレッドです。すべてのカーネルレベルのスレッドは、実行されるアドレススペースに応じて、ユーザースレッドまたはカーネルスレッドのいずれかになります。
または、すべての割り込みハンドラーと例外ハンドラーはスレッドによって実装されます。これらはすべてカーネルスレッドです。

すべてのユーザーレベルのスレッドはユーザースレッドです。すべてのカーネルレベルのスレッドは、実行されるアドレススペースに応じて、ユーザースレッドまたはカーネルスレッドのいずれかになります。

おすすめ

転載: blog.csdn.net/MaoziYa/article/details/105719707