今日の内容 Garbage Collection (GC, ごみ集め ) 参照されなくなったメモリ領域を解放すること 配列境界検査

Similar documents
コンパイラ演習 第 7 回

今回の内容 命令スケジューリング グラフ彩色によるレジスタ割り当て

今回の内容 エスケープ解析 メモリに置かれる値のうち ヒープではなくスタックに alocate できるものを発見 Garbagecolection の負荷を軽減 JavaSE6 が採用 2006 年夏にリリース予定 [ 参考 ] リージョン推論 静的メモリ管理の一般的枠組み 本講義では MLKit[

コンパイラ演習第 11 回 2006/1/19 大山恵弘 佐藤秀明 今回の内容 バリアント / レコード 表現方法 型付け パターンマッチ 型付け switch 文への変換 簡単な最適化 マッチング漏れ 以降のフェーズでの処理 発展 exhaustivenessinformation の利用 パター

Microsoft PowerPoint - handout07.ppt [互換モード]

Microsoft PowerPoint - OS07.pptx

MMUなしプロセッサ用Linuxの共有ライブラリ機構

ex04_2012.ppt

PowerPoint Presentation

Microsoft PowerPoint ppt

21 章のお話

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

プログラミング実習I

ex05_2012.pptx

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

PowerPoint プレゼンテーション

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

メモリ管理

memo


Microsoft PowerPoint - 09.pptx

メモリ管理

演算増幅器

memo

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

Microsoft PowerPoint - 演習1:並列化と評価.pptx

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

プログラミング基礎

Microsoft PowerPoint - OS08.pptx

Microsoft Word - 3new.doc

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint ppt

2006年10月5日(木)実施

Microsoft PowerPoint ppt

@ LL Future 2008/08/30 MORITA Hajime

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

演算増幅器

gengo1-8

ICDE’15 勉強会 R24-4: R27-3 (R24:Query Processing 3, R27 Indexing)

Microsoft PowerPoint - kougi9.ppt

第1回 プログラミング演習3 センサーアプリケーション

Microsoft PowerPoint - prog03.ppt

Prog1_10th

Microsoft PowerPoint - prog03.ppt

プログラミングI第5回

Microsoft PowerPoint - 11.pptx

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

計算機アーキテクチャ

※ ポイント ※

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

Microsoft PowerPoint - 06.pptx

Microsoft PowerPoint - OS11.pptx

プログラミングA

pp2018-pp9base

PowerPoint プレゼンテーション

gc.dvi

アドレス帳移行手順

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

また 初期化について 以下のサンプルコードのように指定すれば 定義時に値を代入できます * オマケ配列は同名で複数個の箱を用意出来ます 同名ではありますが それぞれは別々の個体であるわけです また この複数個の変数は メモリ上に連続で確保されます 2. 文字と文字列 C 言語では文字と文字列は異なる

02: 変数と標準入出力

PowerPoint Presentation

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

第3回 配列とリスト

ファイナライザを理解する ~ ファイナライザに起因するトラブルを避けるために ~ 2013 年 11 月 25 日 橋口雅史 Java アプリケーションでファイナライザ (finalize() メソッド ) を使用したことがあるプログラマーは多いと思います しかし ファイナライザの仕組みや注意点につ

第9回 配列(array)型の変数

memo

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

論理と計算(2)

Prog1_15th

TFTP serverの実装

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

スライド 1

<4D F736F F D208AC888D B836A F C91808DEC837D836A B81698AC7979D8ED A E646F6

Prog1_12th

02: 変数と標準入出力

cp-7. 配列

プログラミング基礎I(再)

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

10-vm1.ppt

02: 変数と標準入出力

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並

Microsoft PowerPoint - KanriManual.ppt

スライド 1

Microsoft PowerPoint - kougi7.ppt

並列計算導入.pptx

UNIX 初級講習会 (第一日目)

Microsoft PowerPoint - kougi6.ppt

プログラミングI第10回

Microsoft PowerPoint - chap10_OOP.ppt

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

PowerPoint プレゼンテーション

02: 変数と標準入出力

PowerPoint プレゼンテーション

02: 変数と標準入出力

PowerPoint プレゼンテーション

Transcription:

コンパイラ演習 第 2 回 (202/0/05) 中村晃一野瀬貴史前田俊行秋山茂樹池尻拓朗鈴木友博渡邊裕貴潮田資秀小酒井隆広山下諒蔵佐藤春旗大山恵弘佐藤秀明住井英二郎

今日の内容 Garbage Collection (GC, ごみ集め ) 参照されなくなったメモリ領域を解放すること 配列境界検査

Garbage Collec4on 概論 遠藤敏夫先生の資料を参考にしています h7p://matsu- www.is.4tech.ac.jp/~endo/gc/gc.pdf 遠藤敏夫先生 東京工業大学大学院特任准教授 h7p://matsu- www.is.4tech.ac.jp/~endo/

今回紹介する GC の種類 参照カウント (reference coun4ng) Tracing GC マーク & スィープ Copying GC

参照カウント (Reference Coun4ng) オブジェクトへの参照 ( ポインタ ) の数をオブジェクト自身に記録しておく 参照を作る / なくすたびにカウントを増減 カウントが 0 になったらオブジェクトを解放

参照カウントの例 ここで roots とは レジスタやメモリスタックなど GC の起点となる集合 ( 参照され得ることが分かっている集合 ) を表す

参照カウントの例

参照カウントの例

参照カウントの例

参照カウントの例

参照カウントの例

参照カウントの例 2

参照カウントの例 2 2

参照カウントの例 2 2

参照カウントの例 2 2 2

参照カウントの例 2 2

参照カウントの例 2 2 0

参照カウントの例 2 2 0 カウントが 0 になったら解放

参照カウントでは上手くいかない例 2 2

参照カウントでは上手くいかない例 2 2

参照カウントでは上手くいかない例 2 2

参照カウントでは上手くいかない例 2 2 2

参照カウントでは上手くいかない例 2 2 循環参照はどうする?

マーク & スィープ マークとスィープの 2 段階からなる マーク : 参照可能なオブジェクトにフラグを立てる スィープ : フラグの立ってないオブジェクトを解放 フラグが付かなかったものを解放

3 色マーク & スィープの例 まず全て 白 にする

3 色マーク & スィープの例 到達可能なオブジェクトを 灰 にする

3 色マーク & スィープの例 未探索の参照のない 灰 を 黒 にする 今回は該当なし

3 色マーク & スィープの例 到達可能なオブジェクトを 灰 にする

3 色マーク & スィープの例 未探索の参照のない 灰 を 黒 にする

3 色マーク & スィープの例 灰 が無くなったのでマーク終了

3 色マーク & スィープの例 全ての 白 を解放する ( スイープ ) フラグが付かなかったものを解放これらのオブジェクトを解放する

Copying GC ヒープを二分割し 片方だけを使う 片方が埋まったら 参照可能なオブジェクトをもう片方に移す 移されなかったオブジェクトはそのまま解放 移すついでにヒープのデフラグができる

Copying GC の例 (GC 開始前 ) From- space b d a c e To- space

Copying GC の例到達可能なオブジェクトを to- space へコピー From- space a a To- space b コピー元のオブジェクトにコピー先のオブジェクトへの参照を保存する c コピー済みだがまだ from- space を指すオブジェクトは 灰 d e

Copying GC の例 灰 のオブジェクトから参照されるオブジェクトをコピー From- space b a a b To- space c コピー済みでもう from- space を参照しないオブジェクトは 黒 d e

Copying GC の例 灰 のオブジェクトから参照されるオブジェクトをコピー From- space b a c a b c d To- space d e

Copying GC の例 灰 のオブジェクトから参照されるオブジェクトをコピー From- space b a c a b c d To- space d e c から d への参照を復元するためにコピー元の d に保存された参照を利用する

Copying GC の例 灰 のオブジェクトから参照されるオブジェクトをコピー From- space b a c a b c d To- space d e

Copying GC の例 (GC 終了 ) From- space b a c a b c d To- space d e

GC の利点 欠点 malloc/free vs. 参照カウント vs. tracing GC malloc/free 参照カウント Tracing GC プログラムの書きやすさ (?) 停止時間 実行時間全体 (?) メモリ効率 マーク & スィープ vs. copying メモリ確保は大抵 copying GC が勝つ メモリ効率は大抵マーク & スィープが勝つ 回の GC にかかる時間はスィープを lazy に行うマーク & スィープが勝つ

Tracing GC の改良 インクリメンタル GC: ちょっとづつ GC GC の処理を細切れにしてプログラムの実行と交互に行う手法 世代別 GC (Genera4onal GC) ヒープを幾つかの 世代 に分ける手法 大抵のオブジェクトはすぐ不要になるので 若い世代 の GC だけで済ませる 寿命の長いオブジェクトの探索回数を減らせる ただし どちらの手法も write barrier が必要になる Write barrier = ここでは オブジェクトへの書き込み時に特別な処理を行うこと

GC のその他の話題 保守的な GC (conserva4ve GC) 並行 GC (concurrent GC) と並列 GC (parallel GC) 分散環境の GC 分散参照カウント 分散 tracing GC

Conserva4ve garbage collec4on とは 参照と整数の区別がつかない環境でも行える garbage collec4on のこと 例えば C 言語ではメモリの中身を見ても整数とポインタを区別できない 解決方法 : とりあえず全部ポインタだと思う

配列境界検査 GC のための拡張と同様に配列データに長さを表すタグを付加する 配列アクセスを行う命令列の前に 配列長と添字を比較する命令を出力する 234 567890 2 234 567890

共通課題 MinCaml に以下の改造を加えよ 配列長を表すタグを配列に付加する 配列アクセスの前に境界検査を行い配列の範囲外にアクセスしようとしていたらプログラムを終了させるなどの処理を行う

コンパイラ係用選択課題 Garbage collec4on を自作コンパイラまたは MinCaml に実装せよ 使用する GC アルゴリズムは自由 ゴミをたくさん作りながら動くサンプルプログラムを記述しそれが複数回の GC を経て動き続けることを確認すること

演習でどの GC を実装するか? たぶん copying GC が一番楽 興味があれば mark- sweep GC に 挑戦してみるのもよい コンパイラ側の改造が多いのを いとわなければ reference count も おもしろい さらに余裕があれば incremental GC や genera4onal GC も

GC 導入のための コンパイラの変更 () ヒープを作成する (stub の ) コードの改造 Copying GC を採用する場合はヒープを 2 つ用意する等 ヒープ内にメモリを確保するコードの改造 ヒープポインタとヒープリミットを比較しヒープがあふれそうなら GC ルーチンに飛ぶ ヒープ内のデータを扱うコードの改造 配列やタプルなどに型やサイズを表すタグを付加 採用する GC によっては mark bit 領域や reference count 領域などを追加しそれらを操作するコードも追加

GC 導入のための コンパイラの変更 (2) GC が rootset を得るための機構の追加 スタックに積まれた各ワードの型を GC ルーチンが知るための機構の導入 フレームに保存された PC の値からそのフレームの各ワードの型を得られるような表を作る スタックに値をプッシュする際にその値の型の情報もどこかに書き込んでおく など 大域変数のアドレスと型を GC ルーチンが知るための機構の導入

課題の提出先と締め切り 提出先 : compiler- report- 20@yl.is.s.u- tokyo.ac.jp 締め切り : 2 週間後 (/9) の午後 時 コンパイラ係用課題の締め切り : 202 年 2 月 27 日 Subject: Report 2 < 学籍番号 : 5 桁 > 半角スペース 個ずつ 例 : Report 2 099 本文にも氏名と学籍番号を明記のこと u 質問は compiler- query- 20@yl.is.s.u- tokyo.ac.jp まで

コンパイラ係の 成績評価について () 選択課題を つ以上提出してください また選択課題と同等以上の難度の言語機構の実装をもって選択課題の提出とみなすことも可能です 事前に相談してください

コンパイラ係の 成績評価について (2) 各コンパイラ係に前田と TA が面談をします 基本的にはレイトレ競技会の当日または付近の日 compiler- query- 20@yl.is.s.u- tokyo.ac.jp にメールして予約をとって下さい 場所は地下端末室 時間は 20 分程度 やること : 自作コンパイラの特徴や独創的な点などの説明 自作コンパイラによる プログラム ( レイトレ含む ) の コンパイル 実行のデモ 自作コンパイラでコンパイルしたレイトレが自作 CPU またはシミュレータ上で動く様子を見せて下さい