全体ミーティング(9/15) 村田雅之.

Slides:



Advertisements
Similar presentations
並列プログラミング言語による Dining Philosophers Problem の検証 大井 謙 数理科学コース 4 年 福永研究室 2010 年 3 月 4 日 ( 木 ) 1.
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
(Rubyistのための) 超音速:ML入門
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
ソフトウェア基礎科学 授業資料: 論理関係(logical relations)のお話
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
全体ミーティング (4/25) 村田雅之.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第1回 情報工学科 篠埜 功.
オペレーティングシステムJ/K 2004年10月7日
Natural Semantics 実行過程の、最初と最後の状態(state)の関係を考える。
Semantics with Applications
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
米澤研究室 全体ミーティング 2010/12/22 M2 渡邊裕貴.
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
プログラミング言語論 第12回 関数型プログラミング 情報工学科 篠埜 功.
論文紹介: A Second Look at Overloading
CONCURRENT PROGRAMMING
Solving Shape-Analysis Problems in Languages with Destructive Updating
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
TAL : Typed Assembly Language について
プログラミング言語論 第2回 情報工学科 篠埜 功.
型付きアセンブリ言語を用いた安全なカーネル拡張
オペレーティングシステム 第3回( ) デッドロックと排他制御.
プログラミング言語入門 手続き型言語としてのJava
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
暗黙的に型付けされる構造体の Java言語への導入
Windows PowerShell Cmdlet
Muonic atom and anti-nucleonic atom
Macro Tree Transducer の 型検査アルゴリズム
Javaプログラムの変更を支援する 影響波及解析システム
 型推論1(単相型) 2007.
依存型で型付けされた 副作用のある関数のための 型保存コンパイラ
Selfish Routing and the Price of Anarchy 4.3
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
Cプログラミング演習 第10回 二分探索木.
Structural operational semantics
ATTAPL輪講 (第4回) 続 Dependent Types
論文紹介 - Solving NP Complete Problems Using P Systems with Active Membranes 2004/10/20(Wed)
計算機工学III オペレーティングシステム #4 並行プロセス:排他制御基礎 2006/04/28 津邑 公暁
SUNFLOWER B4 岡田翔太.
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
 型推論3(MLの多相型).
Type Systems and Programming Languages
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
米澤研究室 全体ミーティング 2010/07/07 M2 渡邊裕貴.
Type Systems and Programming Languages ; chapter 13 “Reference”
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
7.8 Kim-Vu Polynomial Concentration
オペレーティングシステムJ/K (並行プロセスと並行プログラミング)
4.プッシュダウンオートマトンと 文脈自由文法の等価性
プログラミング言語論 第2回 篠埜 功.
~sumii/class/proenb2009/ml6/
全体ミーティング (12/15) 村田雅之.
Eijiro Sumii and Naoki Kobayashi University of Tokyo
18. Case Study : Imperative Objects
全体ミーティング 2010/05/19 渡邊 裕貴.
SMP/マルチコアに対応した 型付きアセンブリ言語
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コンパイラ 2012年10月11日
全体ミーティング(6/3) 修士2年 飯塚 大輔.
型理論 ラッセルのパラドックス: 「集合の集合」は矛盾を引き起こす。 ラッセル、ホワイトヘッド 「プリンキピアマセマティカ」
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
 型理論の初歩 2007 fall.
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
Static Enforcement of Security with Types
Presentation transcript:

全体ミーティング(9/15) 村田雅之

今日の発表内容 Types for Safe Locking C. Flanagan and M. Abadi Proceedings of the 8th European Symposium on Programming Languages and Systems, 1999

並列プログラム特有の問題 競合状態(race condition) デッドロック タイミングに依存するため解析が難しい 複数のスレッドが1つのデータに同時にアクセスする デッドロック 既に確保されたロックを互いに要求し合って 各スレッドの処理が進行しなくなる タイミングに依存するため解析が難しい

問題の解決法 type systemで解決する 命令型言語を対象とする call-by-value スレッド・ロックに関わる操作 レコード (reference cell)

singleton lock type ロックごとに型をつける ロックを型レベルで扱うことができる permission l : (m::Lock) ロックを型レベルで扱うことができる permission ロック(singleton lock type)の集合

スレッド・ロック fork e new-lock x:m in e sync e1 e2 eを実行する新しいスレッドを作る ロックは継承されない new-lock x:m in e 新しいロックをxに束縛してeを評価 mには新しいロックの型が束縛される sync e1 e2 e1 を評価した結果のロックを確保してe2を評価 e2を実行中、ロックe1を保有している

レコード・関数 refm e : Refm t λp x:t1 . e : t1 →p t2 mという型のロックで保護されているレコード p(permission)にあるロックを持っていないと 関数を適用することができない

型のチェック あるレコードにアクセスするには対応する ロックを保有していなければならない Exp Deref , Exp Set 関数適用のときにpermissionがチェックされる Exp Appl

Operational Semantics ロックの環境、レコードの環境、各スレッドの状態の3つの組で表す(abstract machine) スレッドの実行順は任意 expressionを拡張 in-sync l f l(ロック)を保有した状態でfを評価する

競合状態の定義 2つ以上のスレッドで同じ場所へのreference rについて !r (dereference)またはr := V (set) を評価している状態 abstract machineがこの状態に遷移しない ことを示す →競合状態が発生しない

競合状態にならないことの証明(1) Lemma 1 Lemma 2 (Mutual Exclusion) ある状態でwell-typedで、状態遷移可能ならば 次の状態もwell-typed Lemma 2 (Mutual Exclusion) ひとつのロックについてCritical Sectionを実行するスレッドはひとつのみ(CSについてwell-formed) ある状態でwell-formedで状態遷移可能ならば 次の状態もwell-formed

競合状態にならないことの証明(2) Lemma 3 Lemma 4 well-typedなスレッドはロックを持っていない限り レコードにアクセスしない Lemma 4 well-typedでcritical sectionについてwell-formed ならば競合状態でない 以上4つから、well-typedなプログラムは 競合状態に遷移しないことがいえる

polymorphism over lock types 任意のロックを扱う関数が書ける 例 let f = Λn::Lock. λz. Refn Int. z := z+1 in new-lock x:m in f[m] (Refm 0)

existential types (1) new-lock x:m in eの返り値に新しく確保したロックを含むことができなかった 違うsingleton lock typeで同じ名前のものができて混乱しないように 複数回同じnew-lockが呼ばれた時など? new-lockで新しく作ったロックを含む型を existential typeとして返すことでこれを克服

existential types (2) P = new-lock x:n in let y = (x, (refn 0)) in pack m::Lock = n with y open P as m::Lock, y:(m *Refm Int) in sync first(y) !second(y) ∃m::Lock. (m ×Refm Int)

デッドロックを防ぐ ロックにpartial orderをつける 今保有しているロックより上位のロックしか確保できないようにする

デッドロックを防ぐための拡張 m::Lock → m::(m1, m2)と拡張 m1,m2はlock typeの集合 m1 ∋ m1 < m < m2 ∈ m2 permissionを拡張してlocking levelを持たせる locking levelより上のロックしか獲得できない 新しくロックを確保したらそのロックを新しい locking levelとする

まとめ スレッドを用いた並列プログラムに特有の 問題である競合状態とデッドロックについて、型システムを用いて防ぐ方法を示した