プログラムが実行されるまで 2002年4月14日 海谷 治彦.

Slides:



Advertisements
Similar presentations
社会人学習講座 「Javaプログラミング概論」
Advertisements

Java I 第2回 (4/18)
~手続き指向からオブジェクト指向へ(Ⅰ)~
2008/03/01 D-BOF k.inaba はじめての initial D 2008/03/01 D-BOF k.inaba
情報工学基礎(改訂版) 岡崎裕之.
アプレット (Applet)について.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
Java I 第2回 (9/22).
全体ミーティング (6/13) 村田雅之.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
Java2セキュリティ, クラスローダー,ベリファイア
UMLの概要と オブジェクト指向の 基本概念
プログラミングIII演習 第1回目.
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
社会人学習講座 「Javaプログラミング概論」
プログラムはなぜ動くのか.
コンパイラの解析 (2) GCJのデータ構造 - 1.
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
型付きアセンブリ言語を用いた安全なカーネル拡張
実行時のメモリ構造(2) Javaスタック内動作他
プログラミング言語入門 手続き型言語としてのJava
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
C言語でスレッド (Pthread) 2007年1月11日 海谷 治彦.
暗黙的に型付けされる構造体の Java言語への導入
プログラミング言語入門.
データ構造と アルゴリズム第4回 知能情報学メジャー 和田俊和.
クラスファイルの構造解析(2) 2003年6月23日 海谷 治彦.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
モバイルコード技術と セキュリティポリシィ (1)
高度プログラミング演習 (08).
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
オブジェクト指向プログラミングと開発環境
画像処理プログラミング 知的画像処理研究室 M2 小林 佳奈美.
計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
C言語 はじめに 2016年 吉田研究室.
JAVAバイトコードにおける データ依存解析手法の提案と実装
オブジェクト プログラミング 第2回 プログラムの基本.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習I 2003年4月30日(第3回) 木村巌.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
Boostのスマートなポインタを使ってみる
実装について 前田俊行.
アルゴリズムとデータ構造1 2009年6月15日
高度プログラミング演習 (11).
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
C言語講習 第0章 Hello, world!.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
プログラミングI 数理物理,総合理学等向け
アルゴリズムとデータ構造 2010年6月17日
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
第1章 文字の表示と計算 printfと演算子をやります.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

プログラムが実行されるまで 2002年4月14日 海谷 治彦

Cというか一般的なUNIX, Linuxのバイナリ プログラミング (手作業) コンパイル 実行 hoge.c a.out ソースコード (原始プログラム hoge.c 等) ロードモジュール (実行可能プログラム a.out 等)

分割コンパイル プログラミング (手作業) コンパイル リンケージ ・エディット 実行 オブジェクトコード (目的ファイル, マシン語, hoge.o など) ソースコード (原始プログラム hoge.c 等) ロードモジュール (実行可能プログラム a.out 等)

本授業で注目する点 オブジェクトコード(マシン語)の中身の構造 ばらばらのファイルに分かれたマシン語が相互利用できる仕組み(リンケージ) マシン語がマシンに読み込まれる仕組み(ロード) 読み込まれてからの振る舞い

相互利用とは? // a.c int foo(){ ..... } a.o a.o から foo() をどう探す? // b.c コンパイル a.o から foo() をどう探す? // b.c int bar(){ x=foo(); } b.o コンパイル b.o から bar() をどう探す? // c.c main(){ x=bar(); } c.o コンパイル

マシン語に読み込まれる レジスタ a.out メモリ ロードモジュールはどのように配置される? 配置後,計算過程においてレジスタ,メモリ等はどう変化する?

ノイマンマシンの基本構造 レジスタと呼ばれる数個の変数と,メモリと呼ばれるたった1つの配列しか使えないプログラミング環境.

Javaプログラム開発の流れ コンパイル javac hoge.java 実行 java hoge プログラミング (手作業) hoge.class ソースコード (原始プログラム hoge.java 等) クラスファイル (hoge.class 等)

JavaとC(等)との違い リンケージはどこでやっているのか? ロードはどうやってやっているのか? ロードした後,マシン内でやっている. 必要なクラス(マシン語)のみロードする.

Cのロード 基本的にリンクされた関数は全てマシン内に読み込まれる. a.o a.out b.o リンク // c.c main(){ // a.c int foo(){ ..... } 基本的にリンクされた関数は全てマシン内に読み込まれる. a.o コンパイル // b.c int bar(){ ........ } a.out b.o リンク コンパイル ロード // c.c main(){ if(x>10) foo(); else bar(); } foo() bar() main() . c.o コンパイル

Javaのロード foo.class 事前にリンクしない. 必要に応じて必要なクラスを追加ロード. // foo.java class foo{ ..... } foo.class コンパイル 事前にリンクしない. 必要に応じて必要なクラスを追加ロード. (分岐等の場合,一方しかロードされない.) // bar.java class bar{ ........ } bar.class コンパイル // go.java class go{ ... main(...){ if(x>10) new foo(); else new bar(); } .... 例えば, go.class foo.class . go.class 最初のロード java go コンパイル

Cの場合のロード元 基本的には自身の記憶デバイス(ディスク,FD,CDROM等)からしかロードできない. 1つのプログラムにおいて,多様なロード先を持つことは難しい.(というか原則,ロードは1回)

Javaの場合のロード FD 多様なソースからクラスをロードできる. ロード 1つのプログラムが複数のソースを持てる. ディスク ディスク ネット DB

JVMの基本構造(大雑把) クラスファイルの 内容チェック クラスデータを保存 クラス ファイル クラスローダー メソッドエリア 実行 エンジン ヒープエリア ヒープエリア ヒープエリア Javaスタック ヒープ 各実行スレッドのローカルデータ(実行経過)を保存 インスタンスデータを保存