担当:青木義満 yaoki@sic.shibaura-it.ac.jp 情報工学科 3年生対象 専門科目 システムプログラミング 第2回 UNIX・Linuxの基礎 担当:青木義満 yaoki@sic.shibaura-it.ac.jp.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
C言語によるプログラミングスタイル 制御システム工学科 山北 昌毅.
2014年度 プログラミングⅡ ~ Cプログラミングやってみよう ~.
2015年度 プログラミングⅡ ~ Cプログラミングやってみよう ~.
Flashプレイヤーを使った動画配信 情報工学科 宮本 崇也.
オレポータビリティ 日本Rubyの会 青木 峰郎.
Java I 第2回 (4/18)
2013年度 プログラミングⅡ ~ Cプログラミングやってみよう ~.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
オブジェクト指向言語論 知能情報学部 新田直也.
第2回ネットワークプログラミング 中村 修.
情報工学科 3年生対象 専門科目 システムプログラミング 第2回 UNIX・Linuxの基礎(1) 担当:青木義満.
App. A アセンブラ、リンカ、 SPIMシミュレータ
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
情報工学科 3年生対象 専門科目 システムプログラミング 第1回 導入 第2回 Linux、分割コンパイル 情報工学科 篠埜 功.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
ファイル操作と文字列の利用.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
情報工学科 3年生対象 専門科目 システムプログラミング 第1回 導入 第2回 Linux、分割コンパイル 情報工学科 篠埜 功.
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
オントロジーを使用した プログラム開発支援システムの提案
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
計算物理学基礎 第1回 UNIXの基礎 C言語の基本.
ネットワークプログラミング 中村 修.
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
FlexとBison+アルファ -実習編-
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
実行時情報に基づく OSカーネルのコンフィグ最小化
プログラミング入門2 第11回 情報工学科 篠埜 功.
東京工科大学 コンピュータサイエンス学部 亀田弘之
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
JXTA Shell (1) P2P特論 (ソフトウェア特論) 第4回 /
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
2013年度 プログラミングⅡ ~ はじめてのプログラミング ~.
東京工科大学 コンピュータサイエンス学部 亀田弘之
Fortranについて 高エネルギー加速器研究機構 平山 英夫.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
2014年度 プログラミングⅡ ~ はじめてのプログラミング ~.
B演習(言語処理系演習)第2回 田浦.
JAVAバイトコードにおける データ依存解析手法の提案と実装
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
プログラミング演習I 2003年4月30日(第3回) 木村巌.
コンパイラ 2012年10月1日
プログラミング入門2 第13回、14回 総合演習 情報工学科 篠埜 功.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第12回 システムプログラミング 反復サーバと並行サーバ 担当:青木義満
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
ネットワーク・プログラミング Linuxシステムとソフトウェア開発.
Make の使い方.
言語プロセッサ 第12日目 平成20年1月9日.
コンパイラ 2012年10月11日
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
知識ベースの試作計画 ●●●研究所 ●●●技術部 稲本□□ 1997年1月.
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
1.2 言語処理の諸観点 (1)言語処理の利用分野
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

担当:青木義満 yaoki@sic.shibaura-it.ac.jp 情報工学科 3年生対象 専門科目 システムプログラミング 第2回 UNIX・Linuxの基礎 担当:青木義満 yaoki@sic.shibaura-it.ac.jp

UNIXの誕生 UNIX 電気通信分野の巨人AT&T ベル研究所で1970年代に開発。 現在,PCワークステーション,マルチプロセッササーバー等でマルチタスク/マルチユーザーのOSとして広く利用

Linuxの誕生 Linux UNIXに触発され,UNIXライクなカーネルを自由に配布できる形で実装。 Finland, ヘルシンキ大学の大学院生,Linus Torvalds(ライナス・トーヴァルド氏)開発,1991年 小規模なUNIXシステムのMINIX(Andrew Tanenbaum氏)を元に開発,インターネット上の多くのUNIXプログラマも協力し,発展

Linuxの特徴 GPLというライセンス体系に基づいて、誰でも自由に改変・再配布することが可能 他のOSに比べ、低い性能のコンピュータでも軽快に動作 ネットワーク機能やセキュリティーに優れ、安定 必要な機能だけを選んでOSを再構築可能 システムの構築・運用に必要なソフトウェア群(コマンド、インストーラ、ユーティリティ)とともに配布。カーネルとこれらのソフトウェアをまとめた配布パッケージをディストリビューション(distribution)という

UNIX・Linuxの哲学 シンプル 目的の明確化 再利用可能な要素 「Keep It Simple, Stupid」, KISSの精神 1つのプログラムに1つの作業(目的を絞り込む) 再利用可能な要素 アプリケーションのコアとなる部分をライブラリ(関数群)として利用可能とする

UNIX・Linuxの哲学 フィルタ オープンなファイル形式 オープンソース,copyleft の精神 入力を目的に応じて変換して出力する機能 オープンなファイル形式 設定ファイル,データファイルにASCIIテキストファイル オープンソース,copyleft の精神 Free Softwareの思想 GPL(GNU General Public License)

Copyright と Copyleft 使用許諾契約書 Copyleft 通常の商用ソフトウェアは,ソフトウェアの使用に関しての制限を設ける Copyleft フリーソフトウェアの使用に関して他者が制限を設けることを禁じる GPLに従って配布されているソフトウェアの例 gcc: Cコンパイラ emacs: テキストディタ

UNIX/Linuxプログラミングへの誘い C言語プログラミング (復習も兼ねて) コンパイラとインタプリタ Cコンパイラ(gcc)の使い方 Cコンパイラの処理の流れ(詳細) 静的リンクと動的リンク

コンパイラとインタプリタ 言語プロセッサ(言語処理系) 2方式の言語プロセッサ ソースファイルを機械語のプログラムに変換 変換前のプログラム:ソース(原始)プログラム 変換後のプログラム:オブジェクト(目的)プログラム 2方式の言語プロセッサ 翻訳ソフトウェア(コンパイラ) 解釈ソフトウェア(インタプリタ)

翻訳ソフトウェア(コンパイラ) ソースプログラム全体を一括翻訳 オブジェクトプログラムを生成 コンパイラ アセンブラ C,Fortran,COBOLなどの高級言語に対する翻訳ソフトウェア アセンブラ アセンブリ言語に対する翻訳ソフトウェア ソースプログラム C,Fotran,COBOL アセンブリ言語 翻訳ソフトウェア コンパイラ アセンブラ オブジェクト プログラム 機械語 一括入力 実行 結果 【解読】 【実行】

解釈ソフトウェア(インタプリタ) ソースプログラムの一文ずつを解析して実行 → インタプリタ → インタプリタ BASIC,Java Script, Perl 等のスクリプト言語 解釈ソフトウェア インタプリタ ソースプログラム 実行 結果 BASIC,Perl, Java Script, Ruby 【解読・実行】

コンパイラの構成 字句解析 構文解析 (パーザ) コードの最適化 (オプティマイザ) オブジェクト コード生成

コンパイル方式 vs インタプリタ方式 実行速度 実行の手間 コンパイル方式 >> インタプリタ方式 コンパイル方式 >> インタプリタ方式 コンパイル方式:機械語を即実行 インタプリタ方式:一文ずつ解釈して実行 約倍~数十倍コンパイル方式の方が高速 実行の手間 コンパイル方式 < インタプリタ方式 コンパイル方式:修正後,要コンパイル インタプリタ方式:修正後,直ちに実行可能

インタプリタ方式の普及 CPU速度の向上 移植性の向上 例)インタプリタ50秒,コンパイラ1秒の処理 CPU100倍高速化 → インタプリタ0.5秒,コンパイラ0.01秒 移植性の向上 コンパイル方式:機械語に変換(CPU依存) インタプリタ方式:同一のソースが全てのコンピュータで動かせる

Cコンパイラの使い方 GNUプロジェクトのgcc(GNU C Compiler)が有名 (フリーソフト,ダウンロードしてインストール可能) $ gcc option filename -o ファイル名を指定して実行ファイルを生成 -c リンケージエディタ(ld)を実行せずに結果を xxxx.o(オブジェクトファイル)を生成 -lx リンケージエディタ(ld)においてライブラリファイルlibx.a を検索。libc.aはdefaultでリンク。libm.aは算術演算 ライブラリで,-lmで指定。 Optionの例 filenameの種類 xxxx.c C言語ソースファイル xxxx.i プリプロセッサにかけられたC言語ソースファイル xxxx.s アセンブリ言語ソースファイル xxxx.o オブジェクトファイル(機械語)

ファイル名指定しないと”a.out”を生成 cppコマンド #で始まる行が解釈・展開される #includeで指定されたヘッダファイルが取り込まれる cpp, cc1, as, ldコマンドの実行を制御 オプションやファイル名の拡張子により コマンドを起動 cc1コマンド 字句・構文解析,最適化→アセンブリ言語コード生成 asコマンド オブジェクトファイル生成 アドレス未決定 ldコマンド 複数のオブジェクトファイルを集め, 実行形式ファイルを生成 ファイル名指定しないと”a.out”を生成

標準プログラム システム,アプリケーションプログラムの置き場所 システムが提供する汎用プログラム群 /usr/bin 特定のホストコンピュータを対象として管理者が追加したプログラム群 /usr/local/bin 1、2を明確に分けることで,システムのアップグレードなど 保守を容易にしている

ヘッダーファイル ヘッダーファイル Cの場合 システム関数用ヘッダー 定数の定義,システムとライブラリ関数の呼び出し宣言等が収められたファイル Cの場合 stdio.h (標準入出力ヘッダー) stdlib.h (標準ライブラリヘッダー) math.h (算術関数用ヘッダー) /usr/include, その下のサブディレクトリ システム関数用ヘッダー /usr/include/sys など

ライブラリ ライブラリ 再利用を目的として作成されたコンパイル済み関数群(例:stdio, mathライブラリ等) 置き場所 /lib /usr/lib gccはデフォルトでは標準Cライブラリしか検索しないため,追加したいライブラリがある場合には明示的に指定する 静的ライブラリ(アーカイブ) すぐに使える状態でまとめられたオブジェクトファイルの集合体(拡張子***.a) 例: /usr/lib/libc.a(標準Cライブラリ), /usr/lib/libm.a(算術ライブラリ) 等 ライブラリに格納されているプログラムで使う場合, 関数を宣言しているヘッダーファイルをインクルード プログラムコードとライブラリがコンパイラとリンカによって結合され, 1つの実行可能プログラムを生成 その他,動的ライブラリ(共有ライブラリ) → 各自静的ライブラリとの違い調べる 算術ライブラリ使用例: gcc program.c -o program /usr/lib/libm.a もしくは      gcc program.c -o program -lm (libm.aの短縮形)

実際にgccコマンドを使用 1つのソースファイルから 複数のソースファイルから, オブジェクトファイル(ーcオプション) 実行ファイル(-oオプション) を生成 複数のソースファイルから, 複数のオブジェクトファイル(ーcオプション)を生成 上記オブジェクトファイルから静的ライブラリを生成 1つの実行ファイル(-oオプション)を生成 分割コンパイル という

ライブラリを用いたプログラム開発手順 ライブラリ化したい関数を記述したソースファイルを作成。(func1.c, func2.c) 関数のプロトタイプ宣言を記述したヘッダーファイルを作成。 main関数のみのソースファイル main.cを作成

具体的手順 2つの関数を含む小さなライブラリの作成 自作ライブラリ用のヘッダファイルの作成 ライブラリを使用したメインプログラムの作成 func1.c, func2.c オブジェクトファイル生成 gcc -c func1.c func2.c 自作ライブラリ用のヘッダファイルの作成 ライブラリに含まれる関数群のプロトタイプ宣言 ライブラリを使用したメインプログラムの作成 自作ヘッダーファイルのインクルード main関数の作成(ライブラリ関数使用), コンパイル gcc -c program.c ・ 作成済みのオブジェクトファイルとリンク, 実行ファイル生成 ・  gcc -o program program.o func1.o func2.o

ライブラリ(アーカイブ)作成手順 複数のオブジェクトファイルを結合させ,ライブラリ(アーカイブ)を作成 例 func1.o, func2.o から lib.a という名のライブラリを作成(アーカイブコマンド:ar を使用) ar crv lib.a func1.o func2.o ライブラリの使用 gcc -o program program.o lib.a ライブラリや実行可能プログラムに含まれる関数の調べるコマンド(nm)

強力な開発支援ツール “make” 非常に便利!! コンパイルを要するソースファイルの数が多くなった場合,手間がかかる 1つのヘッダファイルを複数のソースファイルで使用している場合,ヘッダファイルの修正→ 関連する全てのソースファイルの際コンパイル そこで・・・・ “make” ユーティリティ 変更によって影響を受けるファイルを確実に再コンパイル プロジェクト構成ファイル群のバージョン管理 強力なプロジェクト管理ツール makefile により,アプリケーションを構築する方法,各種設定を行う 非常に便利!!

makefile の構文 ファイル間の依存関係とファイル生成ルールを定義 依存関係の例 myapp : main.o 2.o 3.o ソースファイル: main.c, 2.c, 3.c ヘッダファイル : a.h, b.h, c.h myapp : main.o 2.o 3.o main.o : main.c a.h 2.o : 2.c a.h b.h 3.o : 3.c b.h c.h 実行ファイルmyappがmain.o, 2.o, 3.oに依存 1つのファイルを更新  → 関連するファイルを自動的に再コンパイル

makefile ルールの説明 ターゲットの作成方法を記述したルール makeコマンドが2.oを再コンパイル gcc -c 2.c タブにより,具体的なファイル生成ルールを記述。 makefile の一例 myapp : main.o 2.o 3.o gcc -o myapp main.o 2.o 3.o main.o : main.c a.h gcc -c main.c 2.o : 2.c a.h b.h gcc -c 2.c 3.o : 3.c b.h c.h gcc -c 3.c TAB

実践 makefileとmakeコマンド 用意するファイル makeコマンド ソースファイル:main.c, a.c, b.c インクルードファイル:a.h, b.h makefile: Makefile1 makeコマンド make -f Makefile1 (-f オプション:メイクファイル名を指定) ソースファイル,ヘッダファイルを変更し,その際のmakeコマンドの実行結果を確認する

実践演習 ソート関数群のライブラリ サーチ関数群のライブラリ メイン関数ソースファイル sort_func.c, sort_func.h 整数型配列を受け取り、ソートを行う関数群の記述されたファイル ソートを行う関数は、最低2つの手法を用意すること(バブルソート、単純選択法、クイックソート、等々) サーチ関数群のライブラリ search_func.c, search_func.h 整数型配列を受け取り、キーボードから入力された値を配列中からサーチする関数の記述されたファイル(線形探索、二分探索、等々) サーチを行う関数は、1種類の実装でも構わない。 メイン関数ソースファイル main.c 3のmain.cでは適当なサイズの整数型配列を用意し,ソート関数群,サーチ関数群を使用してデータの並び替え(昇順、降順選択可能とすること)と、値の探索を行うこと。 実行ファイル生成にはメイクファイルを作成し,makeコマンドを使用すること!

課題の提出方法 □下記のファイルをメール添付にて青木まで送信 ・sort_func.c ・search_func.c ・main.c  ・Makefile □提出先  ・青木:yaoki@sic.shibaura-it.ac.jp □メール題目:system1 学籍番号 苗字 例)system1 L05001 aoki □提出期限  ・10月8日(火)19時まで

コマンドの詳細を調べる man (マニュアル表示コマンド)を活用 例:「ls」,「gcc」コマンドについて調べたい man gcc コマンドの処理内容,様々なオプションの解説 わからないことはこれで調べる!(Englishだけど・・・) → http://www.alc.co.jp など利用

コンパイルオプション一覧 参考資料