bmf-tech
ホーム
記事
カテゴリ
タグ
bmf-tech
bmf-tech
ホーム
記事
カテゴリ
タグ
プログラムはなぜ動くのか 知っておきたいプログラミングの基礎 第2版
アルゴリズムとデータ構造
2021年12月9日 12:09:09 更新
os
CPU
メモリー
プログラムはなぜ動くのか 知っておきたいプログラミングの基礎 第2版
第1章 プログラマにとってCPUとは
第2章 データを2進数でイメージしよう
第3章 コンピュータが小数点数の計算を間違える理由
第4章 四角いメモリーを丸く使う
第5章 メモリーとディスクの親密な関係
第6章 自分でデータを圧縮してみよう
第7章 プログラムはどんな環境で動くのか
第8章 ソース・ファイルから実行可能ファイルができるまで
第9章 OSとアプリケーションの関係
第10章 アセンブリ言語からプログラムの本当の姿を知る
第11章 ハードウエアを制御する方法
第12章 コンピュータに「考え」させるためには
第1章 プログラマにとってCPUとは
問題
プログラムとは?
コンピューターに実行させる処理の順番を示すもの
プログラムの中には、何が含まれるか?
命令とデータ
マシン語とは?
CPUが直接解釈できる言語
実行時のプログラムが格納されている場所
メモリー(メイン・メモリー)
メモリーのアドレスとは?
メモリー上で命令やデータが格納されている場所を示す値
コンピューターの構成要素の中で、プログラムを解釈・実行する装置
CPU
CPUの中身をのぞいてみよう
p.13
CPU
Central Processing Unit
ON/OFF水地の機能を持った素子であるトランジスタから構成されている
CPUの内部
レジスタ
命令やデータを格納する一種のメモリ
制御装置
メモリー上の命令やデータを呼び出す
命令の実行結果に応じてコンピュータ全体を制御
演算装置
メモリーからレジスタに読み出されたデータを演算
クロック
CPUが動作するタイミングとなるクロック信号を発生させる
クロック周波数が大きいほどCPUの動作は高速
第2章 データを2進数でイメージしよう
コンピュータが情報を2進数で取り扱う理由
p.33
IC
Integrated Circuit(集積回路)
ICが持つピン
直流電圧が0Vか+5V(5V以下を扱うICもある)しか流れない。(ハイインピーダンスは考慮しないものとする)
2つの状態しか表せない
ICの状態が2進数に合う
ハイインピーダンス
- 電気信号を受け入れない状態
ところで2進数とは?
p.35
重み
10進数の39
3×10と9×1
10や1を重みという
10進数の場合の重みは1桁目10の0乗、2桁目10の1乗、3桁目10の2乗...
2進数
1桁目2の0乗、2桁目2の1乗、3桁目3の2乗...
基数
〇〇の☓☓乗の〇〇の部分のこと
重み
2進数の39
00100111
(0×128)+(0×64)+(1×32)+(0×16)+(0×8)+(1×4)+(1×2)+(1×1)=39
第4章 四角いメモリーを丸く使う
問題
アドレス信号ピンを10本持ったメモリーICで指定できるアドレスの範囲は?
2進数で0000000000~1111111111
10進数で0~1023
高水準言語のデータ型は何を表すものか?
メモリー領域を専有するサイズとそこに格納されるデータの形式
32ビットでメモリー・アドレスを表す環境では、ポインタとなる変数のサイズは何ビットか?
32ビット
物理的なメモリーの構造と同様なのは、何バイトのデータ型か?
1バイト
LIFO方式でデータを読み書きする構造を何というか?
スタック
データの大小に応じてリストが2方向に枝分かれするデータ構造を何と呼ぶか?
2分探索木(バイナリー・サーチ・ツリー)
スタックとキュー、さらにリング・バッファ
p.83
スタック
LIFO(Last In First Out)
キュー
FIFO(First In First Out)
第5章 メモリーとディスクの親密な関係
問題
ストアド・プログラム方式とは?
記憶装置にプログラムを格納し、逐次実行する方式
メモリーを使ってディスクのアクセス速度を向上させることを何と呼ぶか?
ディスク・キャッシュ
ディスクの一部を仮想的にメモリーとして使う仕組みを何と呼ぶか?
仮想記憶(仮想メモリー)
プログラムのEXEファイルの中に、関数を静的に結合することを何と呼ぶか?
DLL(Dynamic Link Library)
関数を結合する方式
スタティック・リンク
ダイナミック・リンク
Windowsパソコンにおいて、一般的なハード・ディスクの1セクターは何バイトか?
512バイト
セクターはディスクの物理的な記憶単位
メモリーに読み出さないと実行できない
p.97
プログラムはメモリーにロードされてから実行される
ディスク・アクセスを高速化する「ディスク・キャッシュ」
p.99
データを利用するアプリケーション
データを初めて読み出すときはディスクから読み出す(低速)
ディスクから読み出されたデータをメモリーの一部に保存(ディスク・キャッシュ)
同じデータを再度読み出す場合はメモリーから読み出す(高速)
ディスクをメモリの一部として使う「仮想記憶」
p.100
仮想記憶
ディスクの一部を仮想的にメモリーとして使う
メモリーが不足している状態でもプログラムの実行が可能
実際に実行するプログラムの部分はメモリ上に存在する必要がある
メモリ(実メモリまたは物理メモリと呼ぶ)とディスク上の仮想メモリの内容を部分的に置き換えながら(スワップしながら)プログラムを実行する必要がある
仮想記憶の手法
ページング方式
ページイン
ディスクの内容をメモリに読み出すこと
ページアウト
メモリーの内容をディスクに書き込むこと
セグメント方式
実行されるプログラムを処理やデータの集合などの単位にまとめたセグメントに分割
セグメント単位でメモリーとディスク間の置き換えを実行
ディスクの物理構造も見ておこう
p.108
ディスクの領域の区切り方
セクター方式
固定長の領域に区切る
トラック
ディスクの表面を同心円状に区切った領域
セクター
トラックを固定長サイズに区切った領域
-
Wikipedia
)
クラスタ
論理的にディスクを読み書きする単位
バリアブル方式
可変長の領域に区切る
第6章 自分でデータを圧縮してみよう
問題
ファイルにデータが記憶される基本単位は?
Shift JISにおける半角英数の1文字は何バイト?
1バイト(8ビット)
ファイルにはバイト単位で記録する
p.115
ファイルに書くのされるデータ単位
バイト
第7章 プログラムはどんな環境で動くのか
問題
アプリケーションの動作環境は何で示されるか?
OSとコンピュータ本体(ハードウェア)の種類
第8章 ソース・ファイルから実行可能ファイルができるまで
問題
CPUが解釈・実行できる形式のプログラムを何コードと呼ぶか?
ネイティブコード
プログラムの実行時に、データやオブジェクトのために動的に確保されるメモリー領域を何と呼ぶか?
ヒープ
ロード時に作られるスタックとヒープ
p.165
スタック
関数内部で一時的にしようされる変数(ローカル変数など)や、関数を呼び出すときの引数を格納するためのメモリー領域
ヒープ
プログラムの実行時に任意のデータやオブジェクトを格納するためのメモリー領域
ちょっと高度なQ&A
p.167
コンパイラとインタプリタの違い
コンパイラ
実行前にソースコード全体を解釈して処理する
インタプリタ
実行時にソースコードの内容を一行ずつ解釈して処理する
第9章 OSとアプリケーションの関係
問題
モニター・プログラムの主な機能は何か?
プログラムのロードと実行
OSの上で動作するプログラムのことを何と呼ぶか?
アプリケーションまたは応用プログラム
OSが提供する機能を呼び出すことを何と呼ぶか?
システムコール
第10章 アセンブリ言語からプログラムの本当の姿を知る
問題
ネイティブコードの命令にその機能を表す英語の略称をつけたものを何と呼ぶか?
ニーモニック
アセンブリ言語のソースコードをネイティブコードに変換すること何と呼ぶか?
アセンブル
逆は逆アセンブル
アセンブリ言語におけるセグメントとは何か?
プログラムを構成する命令やデータをまとめたグループのこと
関連書籍
os
CPU
メモリー