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

Similar documents
C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

計算機アーキテクチャ

コンピュータ工学Ⅰ

コンピュータ工学Ⅰ

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

情報処理演習 B8クラス

演算増幅器

ComputerArchitecture.ppt

PowerPoint プレゼンテーション

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

2006年10月5日(木)実施

ファイル入出力

ファイル入出力

PowerPoint プレゼンテーション

Prog1_12th

Microsoft PowerPoint - 第3回目.ppt [互換モード]

PowerPoint プレゼンテーション

Microsoft Word - Cプログラミング演習(10)

PowerPoint プレゼンテーション

PowerPoint Presentation

Microsoft Word - Cプログラミング演習(9)

10-vm1.ppt

問 2. タイミングチャート以下に示す VHDL コードで記述されている回路に関するタイミングチャートを完成させよ ) レジスタの動作 use IEEE.std_logic_64.all; entity RegN is generic (N : integer := 8 port ( CLK, EN

コンピュータの仕組み(1)ハードウェア

スライド 1

PowerPoint Presentation

PowerPoint プレゼンテーション

第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的

PowerPoint プレゼンテーション

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

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

情報工学Ⅰ-02

ガイダンス 2

04-process_thread_2.ppt

02: 変数と標準入出力

02: 変数と標準入出力

Microsoft PowerPoint - OS02.pptx

計算機システム概論

Microsoft PowerPoint - 11Web.pptx

OS

スライド 1

目次 第 1 章はじめに 本ソフトの概要... 2 第 2 章インストール編 ソフトの動作環境を確認しましょう ソフトをコンピュータにセットアップしましょう 動作を確認しましょう コンピュータからアンインストー

ポインタ変数

Microsoft PowerPoint - ProcML-12-3.ppt

情報科学概論

01-introduction.ppt

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

Microsoft PowerPoint - sp ppt [互換モード]

2ALU 以下はデータ幅 4ビットの ALU の例 加算, 減算,AND,OR の4つの演算を実行する 実際のプロセッサの ALU は, もっと多種類の演算が可能 リスト 7-2 ALU の VHDL 記述 M use IEEE.STD_LOGIC_1164.ALL; 00 : 加算 use IEE

gengo1-12

出 アーキテクチャ 誰が 出 装置を制御するのか 1

目次 第 1 章はじめに 本ソフトの概要... 2 第 2 章インストール編 ソフトの動作環境を確認しましょう ソフトをコンピュータにセットアップしましょう 動作を確認しましょう コンピュータからアンインストー

PowerPoint プレゼンテーション

スライド 1

TFTP serverの実装

05-scheduling.ppt

slide4.pptx

Microsoft PowerPoint - os ppt [互換モード]

スライド 1

Microsoft PowerPoint - pc11.ppt

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

Microsoft PowerPoint pptx

Microsoft PowerPoint - 1st

Operating System 仮想記憶

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

gengo1-12

Microsoft Word - 3new.doc

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

ソフトウェア基礎技術研修

OS

Microsoft PowerPoint - OS07.pptx

< B8CDD8AB B83685D>

Microsoft PowerPoint - sp ppt [互換モード]

講義計画 1. コンピュータの歴史 1 2. コンピュータの歴史 2 3. コンピュータの歴史 3 4. 論理回路と記憶, 計算 : レジスタとALU 5. 主記憶装置とALU, レジスタの制御 6. 命令セットアーキテクチャ 7. 演習問題 8. パイプライン処理 9. メモリ階層 : キャッシュ

gengo1-12

計算機アーキテクチャ

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め

コンピュータのしくみ

Taro-ファイル処理(公開版).jtd

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

今週の進捗

スライド 1

Microsoft PowerPoint - OS09.pptx

スライド タイトルなし

Microsoft PowerPoint - OS02.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - sp ppt [互換モード]

※ ポイント ※

Microsoft PowerPoint - prog04.ppt

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

ic3_cf_p1-70_1018.indd

PowerPoint プレゼンテーション

ポインタ変数

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

MW100 Modbusプロトコルによるデータ通信の設定について

Microsoft PowerPoint - Lec ppt [互換モード]

Microsoft PowerPoint - No6note.ppt

情報処理概論(第二日目)

Microsoft PowerPoint - kougi2.ppt

Transcription:

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

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

コンピュータの構造 1. パーソナルコンピュータの構造 自分の ( 目の前にある ) コンピュータの仕様を調べてみよう パソコン本体 = CPU( 中央処理装置 ): 制御装置 演算装置 レジスタ キャッシュメモリ 補助記憶装置 ( ハードディスク ) メモリ ( 主記憶装置 ) 入力装置 : キーボード マウス スキャナ等出力装置 : モニタ ( ディスプレイ ) プリンタ等

2. メモリにはアドレスが付いている 数の接頭語 : k M G T アドレス (address, 番地 ) : メモリに付けられた番号 16 進数で表現される : 0x000000 ~ 0xFFFFFF リソース (resource, 資源 ): メモリ ハードディスクの記憶容量など

3. メモリへの読み書き CPU での計算レジスタ : 電卓の メモリ ( 記憶場所 ) に相当主記憶からデータを アドレス によって取り出す レジスタにデータを取り込む ( 読み込み ) 計算する ( 計算結果はレジスタに残る ) レジスタの値をメモリに書き込む ( 書き込むにもアドレスが必要 ) プログラムは メモリの特定のアドレスに格納されているデータに対して処理を行う ものである (p.152)

4. CPU とメモリはバスでつながっている バス (bus) : いろいろなデータが行き来する道 CPUとメモリをつなぐバス データバス 読み書きするデータのやりとり アドレスバス 読み書きするアドレスの指定 コントロールバス データを書き込むのか読みこむのかを指定 1 つの信号線は 1 ビットのデータを送る アドレス空間 : アドレスバスの本数 = 指定できるアドレスの大きさ

5. ROM と RAM ROM: Read Only Memory 読み込み専用のメモリ RAM: Random Access Memory 読み書き両用のメモリ

6. CPU と入出力装置もバスでつながる 基本的に 入出力装置もメモリ同様バスで接続され メモリと同様にアドレスが付けられている = メモリマップド I/O メモリとは異なる入出力専用のバスが用意されていることもある

プログラムが実行されるまで 1. CPUを構成する3つの装置制御装置 CPU の処理内容を決める制御信号を送る セレクタへ信号を送る 演算装置 (ALU) 足し算や引き算を行う演算はレジスタのデータだけが対象レジスタ群命令やデータの一時記憶アキュームレータ 汎用レジスタ インデックスレジスタ プログラムカウンタ 命令レジスタ フラグレジスタ スタックポインタ 浮動小数点数演算レジスタ

2. CPU の基本処理 読み込み 書き込み 演算処理 メモリの特定の番地の値を特定のレジスタに記憶 特定のレジスタの値をメモリの特定の番地に記憶 特定のレジスタと特定のレジスタの間で演算し 結果を特定のレジスタに記憶

3. プログラムはメモリ上に置かれる インストール (install 実装 ) プログラムを実行できるように準備すること 注 : 似た言葉で ダウンロード (download) があるが プログラムをダウンロードしただけでは使えない プログラムは通常ハードディスクに保存されている それを 実行 するにはメモリ上に配置する = ロード (load) プログラムの実行 =run, execute

4. マシン語命令の実行 CPU がプログラムを実行する時のサイクル 1) fetch ( フェッチ 命令の取り出し ) 2) decode( デコード 解読 ) 3) operand fetch( オペランド フェッチ 処理対象の取り出し ) 4) execute( エグゼキュート 命令の実行 ) 5) write back( ライトバック 結果の保存 )

プログラムの進行 プログラムもメモリに置かれているプログラムカウンタによって どのプログラムが実行されているか を管理基本的には プログラムがフェッチされたら カウンタの数が 1 命令分だけ増える = 順次処理 反復処理 : プログラムカウンタの値を小さな値に戻す選択処理 : プログラムカウンタの値を先に進める ( 途中の処理を飛ばす )

ライブラリの実行 プログラムにおいて 別個に用意されているプログラム ( ライブラリ ) を実行する場合 1) 今のプログラム カウンタの値をスタックに保存 2) プログラムカウンタの値をライブラリの先頭のアドレスにセット そのライブラリが実行される 3) ライブラリの実行が終わったら スタックからプログラムのアドレスを取り出す 4) その次のプログラムから実行を行う

5. 演算装置 (ALU) による演算処理 ALU : Arithmetic Logic Unit 2 つの数値の入力からひとつの演算結果を得る入力はレジスタに入っている出力もレジスタに入っている レジスタ A の値を 3000 番地に保存する には 3000 を別なレジスタ B に保存して レジスタ A の値を B の値となっている番地のメモリに書く事が必要ポインタ

ALU がもたらす情報 演算結果の出力だけではなく フラグ情報も出力 --- 演算結果が0か マイナスか 桁あふれが生じたか 偶数か奇数か フラグレジスタにフラグ情報が格納され得る

6. メモリバスのビット数 アドレスバスの大きさメモリの容量が決まる --- アドレスでメモリの番地を指定 8 本なら 2 8 通りの番地 256 16 本なら 2 16 通りの番地 65536... 汎用レジスタの大きさ = データバスの大きさ CPU 性能 :32 ビット CPU なら 32 ビット (4 バイト ) 64 ビット CPU なら 64 ビット (8 バイト ) 一度にやりとりできるデータの大きさ int 型のビット長

プログラムの構造 1. プログラムの種類 1) デバイスドライバ (device driver) コンピュータを構成するハードウェアを動かす入力デバイス : キーボード マウスなど出力デバイス : プリンタ サウンド モニタなど 新しい機器を接続するにはそのデバイスドライバを組み込む必要がある = インストール (install)

プログラムの構造 2) アプリケーション (application) 応用ソフト ワープロ ゲームなど 3) オペレーティングシステム (OS) 基本ソフト コンピュータシステム全体の管理システム Windows, MacOS, Linux, Unix, Android, ios,... C は Unix 開発のために作られたプログラミング言語

2. ソフトウェアの階層構造 アプリケーション ユーザプログラム 関数呼出 ライブラリ関数 システムコール オペーレーティングシステム スケジューラ ファイルマネージャ メモリマネージャ システムコールサービスルーチン デバイスドライバ ハードウェア キーボードハードディスクディスプレイ

3. プログラムの実行とシェル 人間 人間にとって了解しやすい文字や図で命令を行う 文字を数に変えて情報をやりとり シェル オペレーティングシステム 特定のハードウェアに特化したやりとり ハードウェア

4. プログラムの構造 実行可能プログラム (binary) は セグメントに分けられてメモリ上にロードされ 実行されるテキストセグメント : マシン語命令の格納領域ユーザプログラムやライブラリなどデータセグメント : 作業対象情報の格納読み込み専用 静的領域 動的領域スタックセグメント : 情報の一時的記憶用自動変数 プログラムカウンタ

5. プロセスとスレッド 5.2.4 節から : CPU によるプログラムの実行 (1) 命令の取り出し ( フェッチ ), (2) デコード ( 解読 ), (3) オペランドフェッチ (4) エグゼキュート ( 命令実行 ) (5) ライトバック ( 結果の保存 ) プログラムを実行させるのはオペレーティングシステムプロセス スレッド : CPU がプログラムを実行する単位高機能なシステムならマルチプロセス マルチスレッド低級なシステムの例 : Arduino --- シングルプロセス

プロセスとスレッド ( 続 ) 一つの CPU しかないコンピュータでも 見かけ上マルチプロセスで走る タイムシェアリング (TSS): 短い時間間隔でプロセスを切り替えながら実行する プロセスとスレッドの違い : メモリ空間が同じかどうか 異なる 共有

入出力 1. 入出力とバッファ バッファとは 2. 標準入出力 標準入出力とは C の標準ライブラリ 自分で説明を試みよ

3. リダイレクト リダイレクト (redirect) = re + direct Unix や Windows ではリダイレクトの記号がある実際に試してみよう : 実行プログラム名 < 入力ファイル名実行プログラム名 > 出力ファイル名実行プログラム名 >> 出力ファイル名実行プログラム名 < 入力ファイル名 > 出力ファイル名

4. ファイル入出力 ファイルに保存されたデータの読み込みや ファイルにデータを書き込む処理の手順 1) ファイル名を指定して ファイルを開く 2) ファイルを読み書きする 3) ファイルを閉じる C プログラミング 0) ファイル操作の変数を用意例 : FILE *fp; 1) fp = fopen( ファイル名, r ) fp = fopen(( ファイル名, w ) 2) fscanf(fp, %d, &x); fprintf(fp, %d = %d, a,b); 3) fclose(fp)

5. ストリーム ストリーム (stream ) 入出力を表す 元の意味は 流れ --- データの流れ バイトストリーム テキストデータ vs バイナリデータ

6. 入力の終わりは EOF EOF = End Of File ファイルの終わり これは制御コード入力するには Ctrl D (Unix) Ctrl Z (Windows) ただしこれは シェル によって伝わる

宿題 (1) リダイレクトを使って プログラムの出力結果をファイル result.txt に書き出してみよう (2) リダイレクトを使って 本来はキーボードからの入力をファイルから入力させてみよう (3) ファイルを読み込み その結果を逆順にして別なファイル reverse.txt に書き出すプログラムを書こう