オペレーティングシステム 第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
© Copyright 2024 ExpyDoc