スポンサーリンク
OS

【OS】プロセス

目次

プロセスの概念

プロセスのとは?

実行中のプログラムのこと

プロセスが持っているメモリ

スタック

関数データ、戻り値、ローカル変数

ヒープ

動的に割り当てられた変数など

データ

グローバル変数

テキスト

プログラムコード

プロセスの状態

New

プロセスが新しく作成された状態

Running

命令が実行されれいる

Waiting

プロセスは何らかのイベントの発生を待っている
例)プロセスは入力が終わるまで次の処理が行えないために入力が終わるまで待っている

Ready

プロセスはプロセッサに割り当てられるのを待っている。実行可能だが他のプロセスにプロセッサが割り当てられているので、実行ができない。

Terminated

プロセスの実行が終了した

プロセス制御ブロック(PCB)

オペレーティングシステムのカーネルにおいて対応するプロセスの状態を示すデータ構造のこと

プロセス状態

プロセスの状態を保存する

プログラムカウンター

次に実行する命令の場所

CPUレジスタ

 

CPUスケジューリング情報

優先順位など

メモリ管理情報

プロセスに割り当てられたメモリ

I/Oステータス情報

プロセスに割り当てられたI/Oデバイス、開いているファイルのリスト

スレッド

プログラムの処理の実行単位(タスクやプロセスより細かい処理の実行単位)

【OS】スレッドスレッドとは? UNIXなどのプロセスは、プロセスごとに別々のメモリ空間を持っているために、以下のような場合にオーバーヘッドが大きくな...

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

CPU使用率を最大化し、プロセスをCPUコアに素早く切り替える

プロセススケジューラ

次の実行に使用可能なプロセスから選択する

スケジューリングキュー

・Job queue
システムに入ったプロセスの集まり

・Ready queues
メインメモリにあり、実行を待機しているプロセスの集まり

・Wait queues
イベント(I/Oなど)待機しているプロセスの集まり

プロセススケジューリングの全体像

プロセスの切り替え

context switch

プロセスを切り変えること。この時、OSは古いプロセスの状態を保存し、context switchを介して新しいプロセスの状態を読み込む。この時間は、オーバーヘッド(付加的な処理(負荷))です。

プロセスの操作

プロセスの作成

親プロセスは子プロセスを作成し、子プロセスもまたプロセスを作成する。プロセスはプロセス識別子(pid)で識別および管理される。

リソース共有オプション

親と子はリソースを全て共有する
子は親のリソースを部分的に共有する
親と子はリソースを一切共有しない

実行オプション

親と子が同時に実行する
親は子が終了するまで実行を待つ

UNIXのシステムコールの例

fork()
プロセスを新規作成する。変数はコピー

exec()
プロセスのメモリ領域を新しいプログラムにコピーする

wait()
プロセスを停止する

プロセスの終了

プロセスは最後の記述を実行し、OSにexit() システムコールを使用して終了するように要求する。abort() システムコールを使用して子プロセスの実行を終了できる。親が終了した場合、子プロセスも同様に終了する。(cascading termination)pid = wait(&status)でpidを取得できる。

abort()で子プロセス実行を停止する理由

子プロセスが割り当てられたリソースを超えた
子に割り当てられたタスクは不要になった

プロセス間通信

コンピュータの動作において、複数のプロセス(の複数のスレッド)間でデータをやり取りする仕組み。連携しているプロセスは、データの共有など他のプロセスに影響を与えたり、影響を受けたりする。

プロセスを連携させる理由

・情報共有
例)ファイルやデータの共有

・計算の高速化

・モジュール性

・利便性

プロセスを連携するために必要なもの

プロセス間通信(IPC)には2つのモデルがあります。

プロセス間通信における共有メモリシステム

通信したいプロセス間で共有されるメモリ領域

共有メモリにアクセスする時にユーザープロセスがアクションを同期できるメカニズムを提供することです

プロセス間通信におけるメッセージ受け渡しシステム

プロセスが通信をし、アクションを同期するメカニズム

プロセスは共有変数に頼らず相互に通信する

プロセス間通信(IPC)の操作

メッセージサイズは、固定か可変

送信:send(メッセージ)

受信:receive(メッセージ)

 

プロセス通信を行う時にすること

通信リンクの作成

通信リンクの実装

・物理的
共有メモリ
ハードウェアバス
ネットワーク

・論理的
直接か間接
同期か非同期
自動バッファリングか明示的バッファリング

直接的な通信

send(process1, massage)
プロセス1にメッセージを送信する

receive(process2,  massage)
プロセス2からメッセージを受信する

通信リンクのプロパティ

リンクは自動的に確立される

1つのプロセスに1つのリンクがある

リンクは通常、双方向であるが単方向でもOK

間接的な通信

send(port1, message)
ポート1にメッセージを送信する

receive(port2, message)
ポート2からメッセージを受信する

通信リンクのプロパティ

メッセージは、ポートから送受信される

プロセスはポートを共有する場合のみ通信できる

プロセスのペアは、複数の通信リンクを共有できる

リンクは単方向でも双方向でもOK

同期

メッセージの受け渡しは、ブロッキング(同期)またはノンブロッキング(非同期)のいずれかに分類される。

様々な組み合わせが可能で送信と受信の両方がブロックされている場合、ランデブーがある?

ブロッキングセンド

メッセージが受信されるまで送信者はブロックされる

ブロッキングレシーブ

メッセージが利用可能になるまで受信者はブロックされる

ノンブロッキングセンド

送信者は送信をした後も送信を続けられる

ノンブロッキングレシーブ

受信者は、メッセージ(有効なメッセージやヌルメッセージ)を受信する

バッファリング

2つのプロセスが互いに通信する場合、通信リンクがそれらの間に存在する。リンクには、容量があります。その容量は、一時的に保存できるメッセージの数を表しています。保存するものをバッファと言います。

3つの方法で実装する

・容量が0
リンクにメッセージを含めることができない。送信者は受信者を待たなければいけない。メッセージ転送を行うには、2つのプロセスを同期する必要がある。(ランデブー)

・制限された容量 n個のメッセージをキューに含めることができる。キューがいっぱいの場合は、送信者は待機する必要があり、キューが空の状態の時は受信者は待機する必要がある。

・無制限の容量
送信者が待機する必要はない。

パイプ

2つのプロセスが通信できるようにするパイプとして機能する

通常のパイプ(単方向)

作成したプロセスの外部からアクセスができない。通常、親プロセスはパイプを作成し、それを使うことによって作成した子プロセスと通信する。

名前付きパイプ(双方向)

親子関係なしにアクセスができる。通信に親子関係は必要ない。

クライアントサーバーシステムでの通信

ソケット

ソケットはアプリケーション層とトランスポート層のインターフェースです

【ネットワーク】プロセス間の通信(トランスポート層)TCP・UDPプロセス間の通信 ・同じホストで2つのプロセスは、(OSが提供した)プロセス間通信機能を用いて通信する ・異なるホスト上...

リモートプロシージャコール

ネットワークによって接続された他のコンピュータ上でプログラムを呼び出し、実行させるための手法のことである。 あるいは、そのためのプロトコルのことである。

スポンサーリンク