OS (プロセスとは)
こんにちは
最近、OSの勉強を初めたので、インプットした内容をこの記事以降でまとめていきたいと思います。参照している本が1000ページを超えるため、かなり長めになるかと思います。頑張って一日一記事書きます。
最初は、プロセスマネジメントについて触れていきたいと思います。重要な単語を上げながら、それぞれ詳細に踏み込んでいきます。
1、プロセスとは
1)プロセス
プロセスとは、実行中のプログラムのことを指しています。
Program Counter(プログラムカウンター)
プロセスのステータス(今実行されているか?)の値
プロセスのメモリレイアウトはいくつかセクションに分けることができます。
- テキストセクション(実行可能なコード)
- データセクション(グローバル変数)
- ヒープセクション(プログラム実行している間、動的に割り当てられるメモリ)
- スタックセクション(関数が発動される際に一時的なデータストレージ)
テキスト・データは固定、スタック・ヒープは伸縮可能
Activation record(起動レコード)
関数が呼び出されるたびに、関数パラメータを含むこのレコード、ローカル変数、関数で返されるアドレスがスタックに保存されます。コントロールが関数から返却されれば、このレコードは、スタックから外されます。同様にヒープセクションも動的にメモリが割り当てられます。
それ自身によるプログラムは、プロセスではありません。
- プログラム・・・受動的な実体(Diskに保存されている指令のリストファイル)
- プロセス・・・積極的な実体
実行ファイルがメモリに読み込まれた時に、プログラムがプロセスとなります。
プロセスそれ自身は、他のコードにとっては実行環境になることもできます。
例:Java programming environment
2)プロセスの状態
プロセスが実行される際に、状態というものが変わります。その状態というものは、直近のプロセスの状態を表しています。例えば、、、
- New プロセスが新しく作られた状態
- Running 指令が実行された状態
- Waiting プロセスが他のイベントが発動されるのを待っている状態
- Ready プロセスがプロセッサーに割り当てられるのを待っている状態
- Terminated プロセスの実行が終わった状態
ここで重要なことは、1つのプロセスだけがどんなプロセッサーにおいてもRunning状態になることができるということです。たくさんのプロセスが、ReadyまたはWaitingの状態です。
3)Process Control Block(プロセスコントロールブロック)
それぞれのプロセスがOSの中でPCB(Process Control Block)またはTask Control Blockというものによって表されています。これは、たくさんの特定のプロセスに関連した情報が含まれています。例えば、
- Process state プロセスの状態を表す
- Program Counter このプロセスが実行されるための次の指令のアドレス
- CPU registers レジスターはコンピュータ設計の数字やタイプによって、変わってきます
- CPU-scheduling information 値のベースやレジスターのリミット、ページテーブルなどが含まれる
- Accounting information CPUの量、制限時間、アカウントナンバーなどが含まれる
- I/O status information そのプロセスに割り当てられているI/Oデバイスのリスト
要するに、PCBは起動時・再起動時に必要な情報がリポジトリとして提供される
4)Threads(スレッド)
これまでに述べてきたプロセスモデルは、プロセスは実行の単体のスレッドを行うプログラムということです。最近の多くのOSがいくつかの実行のスレッドを持つことがプロセスにできるようにしてきました。そのおかげで、1つ以上のタスクをこなすことができるようになったのです。
最初の記事はこのぐらいにしておきたいと思います。次回は、Process Scheduling についてです。
Discussion