Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

IT技術 (Technology)

プロセスとは? Linuxの例も交えてご紹介

投稿日:2021年11月26日 更新日:

 

<目次>

(1) プロセスとは? Linuxの例も交えてご紹介
 (1-1) プロセスとは?
 (1-2) プロセスの構成要素
 (1-3) プロセスの状態遷移

(1) プロセスとは? Linuxの例も交えてご紹介

(1-1) プロセスとは?

一言で言うと「実行中のプログラム」です。プログラムはメモリ上にロードされると「プロセス」として実行されます。
Linuxの場合は、「psコマンド」で起動中のプロセスを見る事ができます。特に「-aux」オプションで実行すると全プロセスを表示できます。
$ ps -aux
(図111)

またgrepコマンドと組み合わせる事で、特定の明細を検索する事もできます。

$ ps -aux | grep [検索したい文言]
(図112)

プロセスは「状態」を保持しており、プログラムの実行におけるライフサイクル(生成~消滅まで)を管理しています(⇒後の「プロセスの状態遷移」で説明)

(1-2) プロセスの構成要素

プロセスには内部的には以下の要素に分解されます。

(図121)

①スタック部
プログラム実行時の一時的なデータを保管します。具体的にはメソッド/関数のパラメタ、戻り値のアドレス、ローカル変数など。

②ヒープ部
プログラム実行時に使われる動的メモリです。

③データ部
グローバル変数やstaticな変数(インスタンス化せずに全オブジェクト間で共有)を保持します。

④テキスト部
プログラムカウンタ(※注1)やCPUのレジスタ(※注2)の情報を保持。

(※注1)
プロセスの次の実行処理指示のアドレスを保持したポインタ(アドレスを保持する変数)
(※注2)
プロセスの状態を保持する微小のメモリ領域です。主に割り込み(interrupt)が発生して、再開する際に適切な地点から再開できるように中断情報を保持しています。

(1-3) プロセスの状態遷移

冒頭で述べた通り、プロセスはプログラム実行のライフサイクルを管理しており、プロセスの生成~消滅までの様々な状態をステータスとして保持する事ができます。以下はそのステータスの詳細です。

(図131)

(表)
生成(New/Create) プロセスを生成する段階です。対象のプログラムがOSにより取得され、プロセス生成がされます。

もう少し詳細には、PCB(※注1)は既に生成されているが、プログラムはメインメモリ(CPUから直アクセス可のメモリ)にはロードされていない状態です。

実行可能状態(Ready) 生成(New/Create)の後の状態で、プロセスが生成されて実行可能な状態です。

システム的には、プロセス生成後にセカンダリメモリ(※注2)からメインメモリに移されて、実行のためにOSからのCPU割当てを待っている(順番待ち)状態です。このステータスは複数のプロセスが同時になる可能性があります。

実行状態(Run) 実行可能状態(Ready)の後の状態で、プロセスが実行中の状態です。

OSにより実行対象のプロセスとして選択され、CPUが割当てされて、CPUにより処理実行されます。CPUの割当ては「ショートタームスケジューラ」(※注3)により行われます。

待ち状態(Blocked or wait) 実行状態(Run)から遷移する可能性のあるステータスで、OSはプロセスを「待ち状態」に遷移させます。例えば、以下のような状況下でこのステータスに変化します。
(例)
・あるリソースの割当てを待っている場合(割当てを待つ)
・I/O操作(例:プリンタ等への要求、ファイル書き込み等)の終了を待っている(完了を待つ)
・ユーザーからの入力を待っている状態の場合(入力を待つ)

システム的には、プロセスはメインメモリ上で待機しており、CPUの割当ては一旦解除されています。

消滅(Terminated or Completed) 処理が終了に、OSによりプロセスが終了させられる状態です。

通常は処理が正常終了した状態にこのステータスになりますが、場合によっては異常終了のケースにも、このステータスになる事があります。

システム的にはメインメモリから削除されており、PCB(プロセスの状態情報等)が削除された状態です。

中断系(Suspended系) ①実行可能中断
実行可能状態(Ready)状態だったが、メインメモリの不足等によりセカンダリメモリ(※注2)に移動されて中断している状態です。

②待ち中断
元々は待ち状態(Blocked or wait)だったが、メインメモリの不足等によりセカンダリメモリ(※注2)に移動されて中断している状態です。

  (※注1)
PCBは「Program Control Block」の略で、OSがプロセスの「状態」をはじめとするプロセスに関する情報を保持するためのデータ構造の事です。具体的にはプロセスの「状態(state)」、「ID(PID)」、「CPUスケジューリング情報(優先度など)」があります。

(※注2)
セカンダリメモリはCPUから直接アクセス出来ないメモリで、まずメインメモリに移す事で初めてCPUからアクセス可能になります。

(※注3)
「ショートタームスケジューラ」は別名「CPUスケジューラ」とも呼ばれ、Ready状態のどのプロセスを実行するか?を判断します。

(※注1)
PCBは「Program Control Block」の略で、OSがプロセスの「状態」をはじめとするプロセスに関する情報を保持するためのデータ構造の事です。具体的にはプロセスの「状態(state)」、「ID(PID)」、「CPUスケジューリング情報(優先度など)」があります。
 
(※注2)
セカンダリメモリはCPUから直接アクセス出来ないメモリで、まずメインメモリに移す事で初めてCPUからアクセス可能になります。
 
(※注3)
「ショートタームスケジューラ」は別名「CPUスケジューラ」とも呼ばれ、Ready状態のどのプロセスを実行するか?を判断します。

Adsense審査用広告コード


Adsense審査用広告コード


-IT技術 (Technology)

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Slackのアプリを作成する手順をご紹介

  <目次> (1) Slackのアプリを作成する手順をご紹介  (1-1) Slackアプリの作成手順   ●STEP1:Slackアプリの新規作成   ●STEP2:Slackアプリの権 …

Windows10でアイコンの間隔が広くなる不具合の対処

  <目次> (1) Windows10でアイコンの間隔が広くなる不具合の対処  (1-1) 発生状況・エラーメッセージ等  (1-2) 原因・対処 (1) Windows10でアイコンの間 …

リトルエンディアンとビッグエンディアンの違いや概要

  <目次> (1) リトルエンディアンとビッグエンディアンの違いや概要  (1-1) 「リトルエンディアン」と「ビッグエンディアン」とは?  (1-2) どのようなシーンで利用される? ( …

USBブートのやり方(Windows 10)と起動しない時の確認項目について

  <目次> (1) USBブートのやり方(Windows 10)と起動しない時の確認項目について  (1-1) USBブートとは?  (1-2) USBブートのやり方(手順)  (1-3) …

Slackで自動返信の投稿をするボットをPythonで作る手順(ngrokでローカルPCをサーバーに見立てて)

  <目次> (1) Slackで自動返信の投稿をするボットをPythonで作る手順(ngrokでローカルPCをサーバーに見立てて)  (1-1) STEP1:Slackアプリの新規作成&権 …

  • English (United States)
  • 日本語
Top