講義日程-2008年度夏学期
計算システム論第二 †
- 担当:中村 宏 准教授
- 1.5単位
- 10:15-11:45 工学部六号館 62講義室
- 参考文献
いわゆるパタヘネ本。
- Conmputer Organization & Design: The Hardware/Software Interface 3rd Edition
- コンピュータの構成と設計
内容 †
物理的制約のもとで複数のシステムを有機的に組み合わせ,計測,認識,制御,知能などを実現する最適化されたインタラクティブな計算システムの構成理論と手法を学ぶ。
- 計算システムのモデリング
- 命令セットアーキテクチャ
- データパスと制御論理
- メモリシステム:キャッシュメモリ、仮想記憶
- 入出力制御
- プロセスの管理
- フォールトトレラントシステム
授業ノート †
Presented by sen. tzik all blame reserved.
- 計算システムとは
- 目的に応じて
- ハードウェアとソフトウェアを組みあわせて構成
目的によってさまざまな構成がありうるが、基本は同じ。
- ハードウェア構成(p2,3)
- CPU(Central Processing Unit) ,Processing Unit(PU) + 主記憶
- 出入力装置
- 補助記憶装置(HDDとか)
- プロセッサの速度はムーアの法則に従って増加するのに対し、記憶装置や入出力の速度は相対的に遅く、そこがボトルネックになっている。それを解決するための手法が最近のプロセッサには取りいれられている。(キャッシュとか)。たとえば、HDDの読み込み速度はCPUの100万倍くらい遅い。
でも、基本的な部分は変わってないよ。
- システム設計の階層
- プログラムの構成
- 高級言語(C,C++) → コンパイル → a.out(バイナリ)
- 高級言語による設計の時には、下位レベル(ハードウェアのこと)を考える必要はない
- 概念レベル(仕様書、頭の中)
- 高級言語レベル(C,C++) ハードウェアに非依存
- 機械命令レベル(PU依存)
- レジスタトランスファレベル
- ゲートレベル
- スイッチレベル
iii.までがソフト屋さんの仕事。ここが変わるとソフト、ハード両面に影響が出るので設計はとても重要。
ivはレジスタ間の転送をハードウェアで実現する手法を規定
VHDL,Verilogとかのハードウェア記述言語を使う。
データパスと制御論理
v.は第一でやったところ
vi.はトランジスタの話。基本的にはこのあたりを気にする必要はあんまりない。
- 階層設計に関する検討
1つのシステムがとても複雑になってきている。
→設計の見通しの良さ
設計が階層化されていれば、バグが生じたときに1つだけ上の階層に戻ってやり直しができる。
→最終的な品質(製品としての性能と設計期間)
- セマンティックギャップ(semantic gap)
高級言語の機能と、ハードウェアで実現されている機能(アセンブラ)のレベルのギャップが大きい。
高級言語マシンというものが、今から20年くらい前にはさかんに研究されていた。
RISC(Reduced insttuction set computer)
→ハードウェアで実現する機能、命令は簡単なものでも良い。
プログラムの実行時間=(プログラムあたりの命令数)*(1命令あたりの実行時間)
高級言語マシンでは、1↑ 2↓
RISCでは1↓2↑
'(1命令あたりの実行時間) = (1命令あたりの所要サイクル数)*(サイクル時間)'
単純な命令を繰り返すもののほうが、流れ作業に向いている。面倒なのでウィキペとか参考書とかを参照(パイプライン処理:http://ja.wikipedia.org/wiki/パイプライン処理/)
- ハードウェア/ソフトウェア協調設計
例えば、組み込みとか、ちょっと凝った処理をしたいときにプロセッサを設計することはよくある。(携帯電話であればコストダウン、数値計算だけに特化したスパコンを作るetc.)一般的に、ハードウェアでやることを増やすと性能はあがるが、コストも増える。ハード/ソフトの協調設計ではこのトレードオフになる。どうするのがいいかはお金と時間による
{ハードウェア|ソフトウェア}で実現する機能の決定。
2.命令セットアーキテクチャ
2.1命令(instruction)
PUが処理すべき動作を指示
命令セットアーキテクチャ(instruction set architecture)
→命令の体系、ハードウェアとソフトウェアのインターフェイス、計算機構成の重要な抽象化レベル
命令の種類
- 算術演算命令(加算、減算etc.)
- 論理演算命令(and,or)
- データ転送命令(メモリなどとの間でデータを転送)
- 分岐命令(if文のようなもの)
命令語(instruction words)
命令を表現するword(バイナリ)
MIPSの命令については、これが分かりやすいかも
http://ocw.kyushu-u.ac.jp/0009/0006/lecture/10.pdf
2.2 主記憶のアドレシング
PUのレジスタは数十個(MIPSの場合は32ないし64個)なので、メモリからデータを読みこむ必要がある。図はめどいので教科書とかを参考。
アドレス付けの単位
- バイトアドレシング → 1つの番地で、1バイト管理
- ワードアドレシング → 1つの番地で、1ワード(4bit)管理
主記憶のサイズ
プリント2^32=2^32バイト(32bitアドレス空間) →4GB
最近はこれじゃ足りないので、64bitアドレス空間を使っているもの増えてきた。
命令セットアーキテクチャ
プロセッサAからプロセッサBへ。
今までのソフトウェアが動くか?
そもそも同じなら、完全互換。命令を追加した場合は上位互換。Intelのx86は、上位互換を維持するために、複雑怪奇な命令セットになっているのだとか…
エンディアン(Endian)
- big endian
- litte endian
数値データを置く場所がどちらへ進んでいくか?
数値データのMSD(most significant digit)をアドレス番号の小さい方に対応させるのがbig endianで、LSD(least significant digit)をアドレス番号の小さい方に対応させるのがlitte endian。互いにデータのやりとりをしなければ何も問題はない。 mipsはどちらにも対応していた(はず)
命令セットの違いはソフトウェア側でなんとかなる。でも、アドレスづけの単位やらエンディアンの違いは、どうにもならないこともある。
2.3命令セットアーキテクチャの分類
用意されているオペレーション(操作)の種類による分類ではなく、利用できるオペランド(操作対象)に大きく依存
- PU内部のオペランド指定方式
- 主記憶のオペランド指定方式
2.3.1 PU内部の記憶部
- スタック(stack)
- アキュムレータ(accumurator)
- レジスタ(register) ←最近の汎用プロセッサはこれ
詳細はググれカス(by 中村先生)