オペレーティングシステム (プロセス管理)

Slides:



Advertisements
Similar presentations
アルゴリズムとデータ構造 第2回 線形リスト(復習).
Advertisements

連続系アルゴリズム演習 第2回 OpenMPによる課題.
第2回 プロセス管理 ジョブ、プロセスとは? プロセスの状態遷移 プロセス制御ブロック スケジューリング.
Chapter11-4(前半) 加藤健.
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
データ構造とアルゴリズム 第10回 mallocとfree
オペレーティングシステム 第5回 プロセスの相互排除
オペレーティングシステムJ/K 2004年10月7日
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
オペレーティングシステム (OSの機能と構造)
組込みシステムとは コンピュータ制御システム?
オペレーティングシステムJ/K 2004年11月4日
計算機システム概論・2回目 本日のトピック:プロセスについて プロセスとは プロセスのスケジューリングについて 多重プロセスの問題 排他制御
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
オペレーティングシステム 第6回 プロセス間通信
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Linuxカーネルについて 2014/01.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
CONCURRENT PROGRAMMING
第9回 プロセスの協調と排他制御 並行プロセスと資源の競合 競合問題 セマフォ 不可分命令の実装 プロセス間通信 PV命令
アスペクト指向プログラミングを用いたIDSオフロード
京都大学大学院医学研究科 画像応用治療学・放射線腫瘍学 石原 佳知
Occam言語による マルチプリエンプティブシステムの 実装と検証
チーム FSEL 立命館大学情報理工学部 ソフトウェア基礎技術研究室
オペレーティングシステム 第3回( ) デッドロックと排他制御.
プログラミング言語入門 手続き型言語としてのJava
オペレーティングシステムJ/K 2004年10月25日
全体ミーティング 金田憲二.
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オペレーティングシステム (プロセス管理)
オペレーティングシステム (プロセス管理)
C言語でスレッド (Pthread) 2007年1月11日 海谷 治彦.
マルチスレッド処理 マルチプロセス処理について
OSの仕組みとその機能 1E16M001-1 秋田 梨紗 1E16M010-2 梅山 桃香 1E16M013-3 大津 智紗子
精密工学科プログラミング基礎 第10回資料 (12/18実施)
オペレーティングシステム イントロダクション
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
オペレーティングシステムJ/K (仮想記憶管理)
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
オペレーティングシステム 第2回 割り込みとOSの構成
JXTA Shell (1) P2P特論 (ソフトウェア特論) 第4回 /
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
計算機工学III オペレーティングシステム #4 並行プロセス:排他制御基礎 2006/04/28 津邑 公暁
そろそろvolatileについて一言いっておくか
Ibaraki Univ. Dept of Electrical & Electronic Eng.
オペレーティングシステムJ/K 2004年11月15日2時限目
オペレーティングシステム 第7回 デッドロック
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
オペレーティングシステム (OSの機能と構造)
オペレーティングシステム (プロセススケジューリング)
オペレーティングシステムJ/K 2004年10月4日
オペレーティングシステムJ/K (管理のためのデータ構造)
アルゴリズムとデータ構造1 2009年6月15日
6.5 セマフォ セマフォ(semaphore): 複数のタスク(もしくはスレッド)が「同期」または「相互排除」の制御のために取得(acquire)・リリース(release)できるカーネルオブジェクトの総称.
ネットワーク・プログラミング デバイスドライバと環境変数.
オペレーティングシステムJ/K (並行プロセスと並行プログラミング)
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
オペレーティングシステム (プロセススケジューリング)
SMP/マルチコアに対応した 型付きアセンブリ言語
コンパイラ 2012年10月11日
アルゴリズムとデータ構造 2010年6月17日
オペレーティングシステム (OSの機能と構造)
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
デッドロック問題 lock-r2 lock-r1 (blocked)   lock-r2 (blocked) lock-r1  
全体ミーティング(9/15) 村田雅之.
L4-Linux のメモリ管理における問題点とその解決策
オペレーティングシステム (プロセス管理)
Presentation transcript:

オペレーティングシステム (プロセス管理) 2006年10月16日 酒居敬一(sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2006/

プロセスの生成と実行(30ページ) プロセスの生成 OSの成り立ちなどで異なる プログラムをコンパイルし実行可状態に置く 実行可能形式ファイルをロードする spawn 現在実行中のプログラムを複製する fork, rfork, clone,… 新しいプログラムはexecでオーバーレイする OSの成り立ちなどで異なる Unixは、複製によりプロセスを生成する

プロセスの関係 [大久保英嗣, オペレーティングシステムの基礎] 生成されたプロセスはすべて同時に動く

起動シーケンスの最終段階 static int init(void * unused) { lock_kernel(); /* * Tell the world that we're going to be the grim * reaper of innocent orphaned children. * * We don't want people to have to make incorrect * assumptions about where in the task array this * can be found. */ child_reaper = current; /* Sets up cpus_possible() */ smp_prepare_cpus(max_cpus); do_pre_smp_initcalls(); smp_init(); do_basic_setup(); prepare_namespace(); * Ok, we have completed the initial bootup, and * we're essentially up and running. Get rid of the * initmem segments and start the user-mode stuff.. free_initmem(); unlock_kernel(); system_running = 1; if (open("/dev/console", O_RDWR, 0) < 0) printk("Warning: unable to open an initial console.\n"); (void) dup(0); 起動シーケンスの最終段階 /* * We try each of these until one succeeds. * * The Bourne shell can be used instead of init if we are * trying to recover a really broken machine. */ if (execute_command) run_init_process(execute_command); run_init_process("/sbin/init"); run_init_process("/etc/init"); run_init_process("/bin/init"); run_init_process("/bin/sh"); panic("No init found. Try passing init= option to kernel."); }

プロセスに対して行われる各種の基本操作 生成(spawn)や複製(fork) 消滅 シグナル送信 同期 タスク管理領域を生成するか複製するか タスク管理領域を親のタスクが消す 消えるまでの間が消滅中状態(ゾンビ) シグナル送信 終了 停止 同期

プロセスに対する操作(forkによる生成) [大久保英嗣, オペレーティングシステムの基礎]

プロセス間通信(32ページ) パイプ(93ページ) ソケット(107ページ) 共有メモリ(Shared Memory) カーネルが作り出した仮想的な通信路 ソケット(107ページ) パイプの通信範囲を計算機間にまで広げたもの 共有メモリ(Shared Memory) 仮想記憶のところで説明します 擬似端末(Pseudo TTY) デバイスドライバにより作られた仮想的な端末

プロセスの同期 パイプを使う方法 mkfifo コマンドで名前つきパイプを作る 一方を cat コマンドで読み取りとして、 % mknod named_pipe % cat named_pipe aa bb cc dd % % cat > named_pipe aa bb cc dd ^D %

プロセスの同期(36ページ) 並列処理には必要不可欠である 同期のための仕組みがある セマフォ ロック モニタ SYS V IPC(Inter-Process Communication) ロック POSIX Thread モニタ Java が採用

このような逐次的資源が共有されるとき、Atomicに操作できるような機構が必要となる。 並行プロセス間で生じる問題 逐次的資源 たとえば、Read-modify-write のような、  一連の操作をAtomicに行う必要のある資源。 このような逐次的資源が共有されるとき、Atomicに操作できるような機構が必要となる。 もし、そういう機構がなければプログラムが意図したとおりに動かない。

処理の粒度 マルチジョブ マルチタスク マルチCPU レコードの排他的利用 トランザクションを不可分な処理単位とする メモリ上の共有領域の排他的利用 共有領域を使用するプログラムを排他的に実行 マルチCPU メモリ上の変数の排他的利用 プロセッサのバスサイクルを連続する

c1やc2は、自プロセスが 他プロセスに、臨界領域に入ること を知らせるための変数。 先に臨界領域に入ることを宣言した プロセスが実際に臨界領域に入る。 両方が臨界領域に入ろうとしたとき、 turn変数により一方が譲る。 臨界領域に入っているとき、 c1かc2の一方だけがtrueである。 [大久保英嗣, オペレーティングシステムの基礎]

TAS命令(計算機アーキテクチャの授業で既出) 相互排除 TAS命令(計算機アーキテクチャの授業で既出) もっとも原始的なロックの実装(primitive)。 2値セマフォを実現する。 セマフォ P操作(ロック)とV操作(アンロック)により実現。 再帰的ロックとも呼ばれる。 モニタ(Java言語で使われている) 共有資源とそれを操作する手続きを一体化。 セマフォのわかりにくさを、構造化により解消。 構造化セマフォと呼ばれることもある。

TAS命令 メモリ上の変数をテストする処理、メモリ上の変数に値をセットする処理、これらを順に他の処理をはさむことなく(=Atomic)行う。 テストとは、0かそうでないかを調べてフラグに結果を反映する処理 Intel系では lock xchg 命令で代用する。 バスサイクルをlock(不可分かつ連続)して処理 バイナリセマフォ、2値セマフォ、を実現する。

変形セマフォ セマフォ変数 P操作 V操作 正の値は利用可能な資源の数 負の値は現在待ちに入っているプロセスの数 セマフォの値をatomicに1減らしテストする テスト結果が負になったときは、待ち状態に入る V操作 セマフォの値をatomicにテストし1増やす テスト結果が負のときは、待ち状態にあるプロセスをひとつ動作可能状態にする

競合を避けるため相互排除機構を持っている。 相互排除とデッドロック 競合を避けるため相互排除機構を持っている。 これが時に問題を起こす。 2つのスレッドが資源Aと資源Bを同時にとりたいとき     資源が2つそろうまでは返さないぞ、というアルゴリズムだと… スレッド1 資源Aを獲得 資源Bを獲得したい! スレッド2 資源Bを獲得 資源Aを獲得したい!

デッドロックの発生条件と防止 2つのプロセスが資源R1と資源R2を同時にとりたいとき 逐次的資源に関する相互排除条件 待ち条件 資源要求は同時に行う 横取り不可条件 資源を同時に確保できない場合、解放し再度要求 循環待ち条件 資源を順序だてて取得する 2つのプロセスが資源R1と資源R2を同時にとりたいとき   資源が2つそろうまでは返さないぞ、というアルゴリズムだと… Deadlock! プロセスP1 プロセスP2 資源R1を獲得 資源R2を獲得 資源R2を獲得したい! 資源R1を獲得したい!

例:相互排除 /usr/src/linux/drivers/char/lp.c Atomic処理 スピンロック カーネルロック(全域的ロック) mutexやセマフォ(局所的ロック)

例:相互排除の実装 Atomic処理 スピンロック カーネルロック(全域的ロック) mutexやセマフォ(局所的ロック) /usr/src/linux/include/asm/atomic.h スピンロック /usr/src/linux/include/asm/lock.h カーネルロック(全域的ロック) /usr/src/linux/include/asm/smplock.h mutexやセマフォ(局所的ロック) /usr/src/linux/include/asm/semaphore.h

同じプロセスに属す限り、資源は共有しあう 軽量プロセス=スレッドという定義もある。 プロセスとスレッド(38ページ) どちらも実行のひとつの単位である そういう意味では「タスク」とひとくくりに扱う。 スレッドはプロセスに属する点が異なる 同じプロセスに属す限り、資源は共有しあう 軽量プロセス=スレッドという定義もある。 CPUが複数個存在する場合に、同じプロセスの複数のスレッドが実行できる。 高速処理や効率的な処理には良いが… 資源の競合が起きるかもしれない…

[大久保英嗣, オペレーティングシステムの基礎]