• 検索結果がありません。

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
30
0
0

読み込み中.... (全文を見る)

全文

(1)

Cプログラミング1(再)

第5回

講義では、Cプログラミングの基本を学び

(2)

Cに必要なコンピュータ知識

Cはコンピュータの力を引き出せるように設計

(3)

コンピュータの構造

1. パーソナルコンピュータの構造

パソコン本体= CPU(中央処理装置):

制御装置、演算装置、レジスタ、キャッシュメモリ

補助記憶装置(ハードディスク)

メモリ(主記憶装置)

入力装置:キーボード、マウス、スキャナ等

出力装置: モニタ(ディスプレイ)、プリンタ等

自分の(目の前にある)コンピュータの仕様を調べてみよう

(4)

2. メモリにはアドレスが付いている

数の接頭語: k M G T

アドレス(address, 番地) : メモリに付けられた番号

16進数で表現される : 0x000000 ~ 0xFFFFFF

リソース(resource, 資源): メモリ、ハードディスク

の記憶容量など

(5)

3. メモリへの読み書き

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

(6)

4. CPUとメモリはバスでつながっている

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

(7)

5. ROMとRAM

ROM: Read Only Memory

読み込み専用のメモリ

RAM: Random Access Memory

(8)

6. CPUと入出力装置もバスでつながる

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

(9)

プログラムが実行されるまで

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

(10)

2. CPUの基本処理

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

(11)

3. プログラムはメモリ上に置かれる

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

(12)

4. マシン語命令の実行

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

(13)

プログラムの進行

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

(14)

ライブラリの実行

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

(15)

5. 演算装置(ALU)による演算処理

ALU : Arithmetic Logic Unit

2つの数値の入力からひとつの演算結果を得る 入力はレジスタに入っている 出力もレジスタに入っている 「レジスタAの値を 3000番地に保存する」には、 3000を別なレジスタBに保存して、レジスタAの値を Bの値となっている番地のメモリに書く 事が必要 ポインタ

(16)

ALUがもたらす情報

演算結果の出力だけではなく、

フラグ情報も出力 --- 演算結果が0か、マイナスか、

桁あふれが生じたか、偶数か奇数か フラグレジスタにフラグ情報が格納され得る

(17)

6. メモリバスのビット数

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

(18)

プログラムの構造

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

(19)

プログラムの構造

2) アプリケーション(application)

「応用ソフト」 ワープロ、ゲームなど

3) オペレーティングシステム(OS) 「基本ソフト」

コンピュータシステム全体の管理システム

Windows, MacOS, Linux, Unix, Android, iOS, ...

(20)

オペーレーティング システム

2. ソフトウェアの階層構造

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

(21)

3. プログラムの実行とシェル

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

(22)

4. プログラムの構造

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

(23)

5. プロセスとスレッド

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

(24)

プロセスとスレッド(続)

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

(25)

入出力

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

(26)

3. リダイレクト

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

(27)

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)

(28)

5. ストリーム

ストリーム(stream ) 入出力を表す

元の意味は「流れ」---データの流れ バイトストリーム

(29)

6. 入力の終わりはEOF

EOF = End Of File ファイルの終わり

これは制御コード

入力するには Ctrl D (Unix)

Ctrl Z (Windows)

(30)

宿題

(1) リダイレクトを使って、プログラムの出力

結果をファイル result.txt に書き出してみよう

(2)リダイレクトを使って、本来はキーボード

からの入力をファイルから入力させてみよう

(3)ファイルを読み込み、その結果を逆順にし

て別なファイルreverse.txtに書き出すプログラ

ムを書こう

参照

関連したドキュメント

2021] .さらに対応するプログラミング言語も作

これは基礎論的研究に端を発しつつ、計算機科学寄りの論理学の中で発展してきたもので ある。広義の構成主義者は、哲学思想や基礎論的な立場に縛られず、それどころかいわゆ

実際, クラス C の多様体については, ここでは 詳細には述べないが, 代数 reduction をはじめ類似のいくつかの方法を 組み合わせてその構造を組織的に研究することができる

年限 授業時数又は総単位数 講義 演習 実習 実験 実技 1年 昼 930 単位時間. 1,330

分配関数に関する古典統計力学の近似 注: ややまどろっこしいが、基本的な考え方は、q-p 空間において、 ①エネルギー En を取る量子状態

 文学部では今年度から中国語学習会が 週2回、韓国朝鮮語学習会が週1回、文学

 本資料は、宮城県に所在する税関官署で輸出通関又は輸入通関された貨物を、品目別・地域(国)別に、数量・金額等を集計して作成したもので

本資料は、宮城県に所在する税関官署で輸出通関又は輸入通関された貨物を、品目別・地域(国)別に、数量・金額等を集計して作成したもので