オペレーティングシステム 第6回

オペレーティングシステム
第8回
担当教員:三笠俊哉
1
軽量プロセスとしてのスレッド
オーバーヘッド:プロセスの切り替えなどの管理にかかる時間
「オーバーヘッドは
どのようなとき大きくなるか?」
① プロセス生成時に,メモリ空間(アドレス空間)の生成が
必要。
② アドレス空間が別な場合,プロセス間でメモリ経由で
データの受け渡しができない。
一つのプロセスにさらに複数の子プロセスを持てるようにす
る。(軽量プロセス,スレッド)
2
マルチプロセッサ
• 1台のコンピュータで複数のCPUを持つ
対称型マルチプロセッサ
(SMP)
分散共有メモリ方式
メモリ
メモリ
CPU
CPU
メモリ
CPU
CPU
CPU
3
マルチプロセッサの特徴
• 複数の計算を同時に実行
• スケジューリング
– 各CPUはメモリから実行すべきプロセスを割り当てら
れる。(セルフスケジューリング)
– CPU間でプロセスを相互排除することが必要
– マスタに負荷が集中しないようにする。
– CPUが頻繁に実行するプロセスを変えないようにする。
– CPUの数より実行可能なプロセスが少ない場合は,
プロセスの切り替えが起きないようにする。
– 互いに通信し合うプロセスは,待ちが生じないように
同時に実行する。
4
多重プロセスのプログラム
5
多重プロセスのプログラム
多重プロセス:複数のプロセスを用いて構成さ
れたプログラム
• 1つのプログラムに,複数の順次実行の流れ
がある。
6
多重プロセスにする場合
•
•
•
•
主たる処理とネットワークからの入力を持つ。
主たる処理と利用者からの入力を持つ。
複数の端末やクライアントを持つサービス。
同時に複数の出入力を持つ。
7
多重プロセスの生成と消滅
• プロセスは新しいプ
ロセスを作ることが
できる。(生成)
• プロセスの消滅
親プロセ
ス
子プロセ
ス1
子プロセ
ス2
– 親プロセスが終了さ
せる
– 自分で終了
8
プロセス間の同期
複数のプロセスが協調しながら実行する場合,
互いに連絡を取り合う必要がある。(同期)
– 排他制御機能:
– 事象の連絡機能
– プロセス間通信機能
9
排他制御が必要なケース
プロセス1
sum=10
プロセス2
レジスター←(sum)
レジスター←(sum)
レジスター←(レジス
タ)+2
レジスター←(レジ
スタ)+3
sum←(レジスタ)
sum←(レジスタ)
プロセス1と2が順次にしか実行されない必要がある=排他実行
(クリティカルセクション)
10
排他処理の原理
• クリティカルセクションの入り
口でシステムコールを発行し
てそれ以降を排他実行する。
• 出口で排他実行を解除する。
11
lock/unlockによる排他制御
• “lock”という変数を用いると,”unlock”が発行
されるまで排他制御になる。
12
セマフォによる排他制御
同期用の整数変数yを用意する(セマフォ)
y=1
プロセス1は始めに,y=0にする。
プロセス2がy=0にしようとすると,すでにy=0
なので待ちになる。
5. プロセス1は排他処理終了後,y=1にする。
6. プロセス2がy=0にする。
1.
2.
3.
4.
13
事象の連絡が必要なケース
あるプロセスの処理が,他のプロセスの処理に
依存している
プロセス1
事象連絡領域=1
プロセス2
事象連絡領域
=0
0
事象連絡
領域
1
14
事象の連絡機能の原理
1. P1,P2をそれぞれシス
テムコールにする。
2. P1では事象待ちプロ
セスがある場合には,
待ちを解除。
3. P2では,事象が発生し
ていない場合には待
ちになる。
15
セマフォによる事象の連絡
• セマフォの初期値を0,
• 事象発生の連絡で1を代入。
• 事象の受け取りで0を代入。
16
プロセス間の通信
プロセス同士がデータを送り,受け取る。
プロセス1
write
プロセス2
read
17
UNIXのプロセス間通信
% ls | more
パイプラインはプロセス間
通信の一例
• パイプラインはプロセス
間の一方向の通信路
• パイプラインは一種の
ファイル
– lsにとっては書き込み
ファイル
– moreにとっては読み取
りファイル
18