reading-books
  • Introduction
  • Computer Systems
    • はじめて読むマシン語
    • プロセッサを支える技術
    • オペレーティングシステム入門
  • Architecture
    • データ指向アプリケーションデザイン
    • Web API The Good Parts
  • Code Reading
    • MINCSコードリーディング
  • In Progress
    • Goによる並行処理
    • ビッグデータを支える技術
Powered by GitBook
On this page
  • 概要
  • 本
  • かかった時間
  • 読む前の状態
  • この本を読んで達成したいことはなにか
  • 読む前後の変化
  • 読書メモ
  • 第 1 章:プロセッサとコンピュータシステムの基礎
  • 第 2 章:プロセッサの変遷
  • 第 3 章:[詳説]プログラマのためのプロセッサアーキテクチャ
  • 第 4 章:仮想化サポート
  • 第 5 章:マルチプロセッサの出現と普及
  • 第 6 章:プロセッサ周辺技術
  • 第 7 章:GPGPUと超並列処理
  • 第 8 章:今後のプロセッサはどうなっていくのか?

Was this helpful?

  1. Computer Systems

プロセッサを支える技術

概要

本

  • プロセッサを支える技術

かかった時間

  • 13.5 時間

読む前の状態

  • はじめて読むマシン語 を読んだ

この本を読んで達成したいことはなにか

  • プロセッサの動作とプロセッサと周辺の装置がどのように連携して動作しているのか

  • OS のシステムコールを発行してカーネルが処理をする際に、CPU にどのような命令を実施しているのか、またどのような手順で実施しているのか

  • 特権命令、非特権命令などのプロセッサの命令の概念を理解する

読む前後の変化

  • プロセッサ内にメモリコントローラを内包し、I/Oコントローラはバスを経由するなどして周辺デバイスと連携していることがわかった

  • VMMまわりのプロセッサの動きは面白い。特権命令違反を検知してハードウェアが割り込みして命令を代行するなど

  • 準仮想化のI/Oの仕組みも面白くて、一部のVMMの命令をゲストOSが実行できるようにして操作を変換する

  • ハードウェアレベルの回路設計などはあまり理解できていない

読書メモ

第 1 章:プロセッサとコンピュータシステムの基礎

  • コンピュータアーキテクチャの基本的な要素の説明

    • プロセッサ

    • メモリ

    • 入出力装置

  • 半導体技術の概観

    • ムーアの法則

    • デナートスケーリング

  • コンピュータでデータをどのように表現するのか

    • 文字コード

    • 浮動小数点(IEEE754)

    • ビッグエイディアンとリトルエンディアン

  • プロセッサと命令

    • 命令アーキテクチャがプロセッサの仕様

    • 各プロセッサ(x86とARMなど)は互換性がない

  • 機械命令プログラムの作り方

    • アセンブラ

    • インタプリタ

    • JITコンパイル

      • 繰り返し実行されるプログラムは実行中にコンパイルして機械命令に変換

第 2 章:プロセッサの変遷

  • プロセッサを構成する素子の変遷

    • 真空管、トランジスタ、IC、LSI、VLSI

  • 命令アーキテクチャの変遷

    • プログラム内蔵式コンピュータ、仮想記憶、マルチプロセス、TSS、メモリ管理機構、特権状態、ISA

    • 特権状態ではOSを動作させることができる。ユーザ状態ではメモリ管理機構などを操作する命令は使えない

    • ISAは後方互換がある命令アーキテクチャ

  • マイクロアーキテクチャの変遷

    • 単位時間により多くの命令を実行できるようにする改善

    • パイプライン処理、演算器の高速化、RISCとCISC、スーパースカラ実行、Out-of-Order実行、分岐予測、キャッシュ、マルチコア

  • その他参考

    • 計算機工学

    • IA-32 インテル® アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル

      • 上巻・中巻もある。システムプログラミングに関する資料は下巻の本資料。

      • 特権レベルの話は p.127 にある

第 3 章:[詳説]プログラマのためのプロセッサアーキテクチャ

3.1 マイクロアーキテクチャを支える技術

  • プロセッサの命令の実行

    • フェッチ:メモリから命令を読み出す

    • デコード:解釈してどこにあるデータをどのように加工するなどの命令の意味を解釈する

    • オペランド:デコード後、必要なデータを取り揃える

    • 演算:データに加減算などの指定された加工を行う

    • ライトバック:結果を命令で指定されたところに格納する

  • 構造的ハザード

    • 同時に複数の命令がメモリやレジスタファイル、演算ユニットなどの1つしかない資源を必要として取り合う問題

    • ハードウェアレベルで対応する

      • 対応策1:優先する命令に資源を使わせて、他の命令の処理を待たせる(パイプラインバブル、パイプラインストール)

      • 対応策2:資源を追加する

  • データハザード

    • 直前の命令の結果を次の命令が必要とすることで、パイプライン処理ができなくなること

      • 現在のプロセッサはレジスタをバイパスすることができる

        • 交換法則が成り立つ命令(ADD, XOR, OR)はレジスタへのライトバックをバイパスできる

      • ハードウェア的なアプローチとしては、パイプラインバブルや無関係な命令を差し込むことで待つ

      • ソフトウェア的なアプローチもあって、並行に処理できるようにアルゴリズムを書き換える

        • コンパイラによる最適化のアプローチもあり、ソフトウェアパイプラインのコードを生成するコンパイラが存在する

  • 制御ハザード

    • 条件分岐をする場合に、飛び先のアドレスが確定するまで次の命令のフェッチを始めることができない。パイプラインバブルが発生する

      • 関数のインライン化(ソフトウェア的なアプローチ)

        • ジャンプを必要とするコールとリターンをなくす

      • ループアンローリング(ソフトウェア的なアプローチ)

        • ループの中身を記述することでループする回数を減らす

  • キャッシュ

    • データ単位

      • キャッシュライン

        • メモリから持ってくるデータの単位(塊)

        • タグをつけておく。タグにはメモリアドレスや状態ビットが含まれる

        • キャッシュラインの大きさは32バイト~256バイト程度。タグは32ビット空間の場合32ビット、64ビット空間の場合は64ビット程度。

          • キャッシュラインが小さすぎるとタグのオーバーヘッドが大きくなり、大きすぎるとキャッシュの大部分のデータが無駄になることが増え、キャッシュが有効活用できなくなる

        • キャッシュの構成

          • データアレイ、タグアレイ、キャッシュコントローラ

    • データ構造

      • フルアソシエイティブ方式

        • すべてのキャッシュラインのタグにそれぞれ比較回路を設けて、プロセッサの要求するアドレスとタグの一致を並列にチェックする

        • 比較回路はタグを記憶するメモリよりも大きなチップ面積を必要とし、消費電力も大きいので、大容量のキャッシュを構成するのに向いていない

      • ダイレクトマップ方式

        • ラインアドレスとキャッシュラインを1対1に対応させる(ラインアドレスには複数のキャッシュラインの中間ビットが含まれる)

        • タグの中に、nビットのラインアドレスとライン内のバイトの位置を指定する

          • スラッシングという問題が起こる

            • キャッシュラインの奪い合いによる性能の低下

      • セットアソシエイティブ方式

        • メモリアドレスに対応するキャッシュラインを複数設ける

        • メモリアドレスに対応するキャッシュラインが複数存在することで、スラッシングが生じにくくなっている

        • 商用のマイクロプロセッサではほぼセットアソシエイティブ方式が採用されている

    • キャッシュを多段で構成することでメモリアクセス回数を減らす

  • RISCとCISC

    • RISCの場合は命令長が4バイトと決まっているので、命令の開始位置を見つけるのが容易。CISCは命令長が可変長なので、命令をデコードしないと難しく、1サイクルで実施するのが難しい

    • x86はCISC命令を扱いつつ、内部の命令実行はハードウェアのレベルでRISCに変換して実行することができるようになった

    • CISCでもRISCと同程度の性能が出せるようになっている

  • 演算器の高速化(TODO)

    • プロセッサの処理が複雑で時間がかかることの1つが演算回路

      • 整数加算器の高速化

        • 全加算器を考えると、32ビットのオペランドの計算を実施するには31つの全加算器を通過することになる

        • キャリー入力を高速化

          • G信号、P信号を用いた高速な加算器がプリフィックスアダー

            • パラレルプリフィックスアダー

            • 計算機構成特論 Part 1

      • 整数乗算器の高速化

      • 除算高速化のポイント

      • 浮動小数点演算機の仕組みと使い方

  • スーパースカラ

    • プロセッサに備わっている並列性を利用して1サイクルで複数の命令を同時に実行する

      • 例えば整数演算命令と浮動小数点演算命令など

      • 命令に必要な資源が競合していないこと、条件分岐命令などのチェックは必要。ハードウェアレベルで制御

  • Out-of-Order実行

    • 書かれた順(In-Order)に実行すると命令の実行に待ちが発生する

    • 機械命令の順番を変更して、後の命令でも実行可能な命令を先に実行することがOut-of-Order実行

      • データ依存関係のためにすぐには実行できない命令を後回しにすることができるのでデータハザーの影響を軽減する効果がある

      • リザベーションステーション

        • デコードした命令を直接パイプラインに送るのではなく、それぞれの命令種別ごとに設けられたリザベーションステーションに命令を格納

        • オペランドが揃って命令が実行可能になった命令を順次実行パイプラインに送出して演算を実施させる

      • 逆依存性の問題

LD  r1,[a];    // メモリ上の変数aをレジスタr1にロード
ADD r2,r1,r5;  // r1とr5を加算してr2にストア
SUB r1,r5,r4;  // r5からr4を減算してr1にストア

ADD命令はLD命令が完了していないと実行することができない。SUBはr5とr4が求まっていれば実行することができる。しかしOut-of-Order実行でADD命令よりも前にSUB命令が実行されてしまうと結果が変わってしまう。逆依存性がある場合は命令の順序を入れ替えると正しい結果が得られなくなってしまう。

  • リネーム

    • 逆依存性の問題を避けるための方法

    • プログラムに書かれたレジスタ番号を物理レジスタ番号に対応させ、命令が結果を書き込む論理レジスタには空いている物理レジスタを割り当てる

    • Out-of-Order実行されても影響がなくなる

LD  p11,[a];    // メモリ上の変数aをレジスタr1にロード
ADD p12,p11,r5; // r1とr5を加算してr2にストア
SUB p13,r5,r4;  // r5からr4を減算してr1にストア
  • レジスタリネームの仕組み

    • Out-of-Order実行を行うプロセッサは、物理レジスタのプールと論理-物理レジスタの対応テーブルを持つ

    • 命令デコードのときに、空き物理レジスタを割り当てて対応をテーブルに記録する

    • 命令の実行が完了したときに、不要になった物理レジスタを回収して空き物理レジスタプールに戻す

  • メモリバリア命令

    • 命令以前のメモリアクセス命令が完了しないと、その命令の後のロードストア命令が実行されない仕組み

  • 分岐予測(TODO)

    • 制御ハザードによる損失を低減する仕組み

  • メモリ、I/Oと入出力インターフェース(TODO)

  • パフォーマンスカウンタ

    • プロファイラとパフォーマンスカウンタ

      • プロファイラは対象となるプログラムを実行させながら、タイマー割り込みなどを用いて定期的にその時点で実行中の命令のアドレスをロギングする

      • その時点でどの関数を実行中だったかがわかる

    • パフォーマンスカウンタ

      • ある関数がなぜ長い実行時間がかかっているか?などに関して詳細なプロセッサ内部の実行状況の情報を与える

      • カウント値を読めるレジスタの集まり

        • カウントがenableされている期間にプロセッサが実行した命令数

        • 各レベルのキャッシュのアクセス回数

        • 各キャッシュのミス回数

        • 実行された条件分岐命令数

        • 予測ミスになった条件分岐数

3.2 プロセッサの利用範囲を広げるアーキテクチャ拡張

  • メモリ管理機構

    • セグメント方式では物理メモリのアドレスがフラグメンテーションをおこし、メモリ使用を効率が悪い

    • ページ方式を取ることが一般的。x86のプロセッサ的にはセグメント方式もページ方式もどちらも対応している

      • x86では1ページの大きさは4KB。ページに割り当てる物理アドレスは任意

      • 論理アドレスに対応する物理アドレスの対応表はページテーブルと言われる

      • TLB(Translation Lookaside Buffer):ページテーブルのキャッシュ

        • 論理アドレスの一部のビットをIndexとして使用。都度ページテーブルを参照する必要がなくなる

      • ページテーブルには物理アドレスが存在しない論理アドレスを割り当てることができ、仮想的に実メモリよりも大きいメモリ空間を持つことができる

      • 64ビットアドレス空間で1ページが4KBの場合、ページテーブルのサイズが2^55バイトとなるため、多階層のアドレス変換を用いる

    • ページサイズが小さいとTLBミスが頻発して性能が低下する

      • 1ページの大きさがMBオーダのラージページを使うことができる

        • TLBは通常のページテーブルのためのTLBとラージページ用のTLBが存在する

  • 割り込み

    • I/Oコントローラのステータスレジスタの状態を確認することで完了したかどうかがわかる

      • OSがステータスレジスタの状態をポーリングすることで状態を知る方法

    • ポーリングではなく、I/Oが完了したタイミングでプロセッサに割り込みすることができる

    • 割り込みはエラー発生時などにも用いることができる。ゼロ除算や許容範囲外のメモリアクセスなど

      • プロセッサ内部の割り込みのことをトラップという

    • 割り込みの緊急度を加味して、高速に割り込むことができるようにしたものがベクタ割り込み

      • 割り込みレベルを用いる

  • 仮想化

    • VMM(Hypervisor)によって1つのハードウェアを複数のハードウェアが存在するように見せることが仮想化

      • VMM上のOSがメモリアクセスする際、仮想物理アドレスから物理アドレスに変換する必要がある

      • 効率よく変換するためのハードウェア機構が追加されている

  • マルチメディア/暗号など

    • ハードウェアとして高速に処理するための機構が追加された(詳細は割愛)

3.3 x86 Nehalemアーキテクチャのプロセッサ

  • IA-32eモード

    • Compatibilityモード(IA-32e Compatibilityモード)

      • 従来の16ビットや32ビット空間用に作られたバイナリプログラムをそのまま動作させることができる

    • 64ビットモード(IA-32e 64モード)

      • 64ビットアドレス空間を使うアプリケーションが動作する

    • x86のレジスタセット

      • 汎用レジスタ

        • 整数演算データを保持するレジスタ

      • SSE(Streaming SIMD Extensions)用のXMMレジスタ

        • SSE関連のレジスタ

      • 命令ポインタ

        • 次に実行する命令のアドレスを指定するレジスタ。プログラムカウンタとも言う

    • x86で扱うことができるデータタイプ

      • 8ビットのバイトがデータの単位

      • リトルエンディアン(下位アドレスから上位アドレスに向けて書き込んでいく)で配置される

    • 2アドレス命令形式

  • Core i7プロセッサの構成

    • フロントエンド、実行エンジン、キャッシュ階層から構成される

第 4 章:仮想化サポート

4.1 仮想化の目的、メリット/デメリット

  • 仮想化のメリット

    • 分割されたハードウェアのイメージを提供する

      • ゲストOSは仮想マシンのハードウェアを操作する命令を実行するだけ

    • リソースの稼働率の向上

  • VMMの実行オーバヘッド

    • 大量のメモリが必要

    • 資源の割り当て管理が必要

4.2 仮想化を実現するために

  • メモリの仮想化

    • ゲストOSが物理アドレスと思っているものは、各ゲストOS個別の仮想物理アドレスでVMMは仮想物理アドレスを物理アドレスに変換する

  • I/Oの仮想化

    • VMMは各ゲストOSがハードウェアを操作する命令を発行したときにインターセプトしてVMMがゲストOSの代わりに命令を完了させたかのように振る舞う

4.3 仮想化をサポートするハードウェア機構

  • ハードウェア操作命令の検出

    • 特権状態とユーザ状態を区別する。VMMが特権状態、ゲストOSはユーザ状態として扱う

      • ゲストOSが特権命令を実行すると特権違反となりトラップが発生する

      • そしてVMMの中の例外処理部に命令実行が移る、という方法でゲストOSのハードウェア資源のアクセスを検出する

  • ハードウェア状態の退避、復元

    • Intelのプロセッサはハードウェアの状態を退避、復元を一括で行う命令を実装している

  • 二重のアドレス変換

    • 二重のアドレス変換した結果をTLBとして保存しておけばキャッシュヒットする限りは二重の変換は不要

    • x86ではハードウェアが自動でページテーブルを参照して変換結果をTLBに書き込むハードウェアテーブルウォークという機構がある

    • Intelの場合はハードウェアのシャドウページテーブルを用いることで二重の変換をキャッシュする

      • ゲストOSがプログラムを切り換えてページテーブルが変わるたびにシャドウページテーブルを作る必要があり、仮想化の大きなオーバーヘッドとなる

  • 仮想TLB方式

    • ゲストOSはVMMの介在なしに自分のページテーブルを自由に書き換えることができる

    • ハードウェアがアドレス変換に使うシャドウページテーブルはVMMが管理

    • ハードウェア上にシャドウページテーブルとTLBで2つのキャッシュが存在する。VMMのページテーブルも存在する

    • IntelのEPT(Extended Page Table)というハードウェア機構で二重のページテーブルウォークを自動で実施しTLBに書き込む

      • ハードウェアがVMMのアドレス変換の役割を担うことで仮想化のオーバーヘッドを軽減している

  • I/Oの仮想化

    • エミュレート方式

      • ゲストOSがI/Oコントローラのレジスタを操作し、ハードウェアアクセを特権違反命令例外として検出して、VMMが矛盾のない操作を実施する方式

      • デバイスドライバのエミュレートは大変

      • 種類が多く、VMM側がすべてのデバイスドライバをサポートするのは大変

      • ハードウェアの操作やデータ転送のオーバヘッドが大きいので性能的な限界がある

    • パススルー方式

      • ホストOSのI/OコントローラをゲストOSに直接割り当ててしまう方式

      • それぞれのI/Oコントローラが各ゲストOSに対応するためたくさんの入出力装置が必要になってしまう

      • ナイーブなパススルーでは、誤った物理アドレスが指定されることで他の仮想マシンへ影響が及ぶ可能性がある

    • Para Virtualization(準仮想化)方式

      • ゲストOSがI/Oコントローラのレジスタ操作ではなく、ディスクのデータブロックのR/WやLANのパケット送受のような抽象度の高いI/O要求に変換する方式

      • ゲストOS側にフロントエンドドライバ(FEドライバ)が必要

      • VMMでI/O要求を処理する専用のゲストOSを構築。I/O専用ゲストはハイレベル要求をI/Oコントローラなどのレジスタ操作に変換して入出力装置を通信する

第 5 章:マルチプロセッサの出現と普及

5.1 マルチスレッドプロセッサ

  • マルチスレッドの2つの方式

    • VMT(垂直マルチスレッド)

      • 複数のスレッドを切り替えて実行する(切り替えにはマイクロ秒などかかる)

      • キャッシュミスやTLBミス、I/Oアクセスなどでスレッドの実行が止まるタイミングで別の実行可能なスレッドに切り替える

      • レジスタファイルやプログラムカウンタは各スレッド個別に保有

      • 演算器やキャッシュ、TLBなどは共有

    • SMT(同時マルチスレッド)

      • 独立に実行できるスレッドの命令を混ぜて実行することでスーパースカラプロセッサを有効活用できる。同時実行しているイメージ

      • 命令のデコードをマルチスレッドでできるようにする必要がある。スレッド番号を見てどのスレッドのレジスタを使うか判断する

      • 命令のフェッチはスレッドごとに交互に行う

    • マルチスレッドではレジスタはスレッドごとに設けられるが、キャッシュやTLBは共有する

    • キャッシュの競合によってミス率が増えるとメモリアクセス回数が増え、メモリバンド幅がボトルネックとなり性能が出ないこともある

    • マルチスレッド化による性能向上は10~30%程度

      • SMTのほうが追加ハードウェア量は増えるが性能向上が見込める

  • マルチスレッドの考え方は実行機構の待ちなどによる空きサイクルを減らして有効活用しようという考え方

5.2 マルチプロセッサシステム

  • マルチプロセッサではコアが複数搭載されている。コアには各種ユニット、1次命令キャッシュ、1次データキャッシュ、TLBなどを含む

    • 3次キャッシュやメモリコントローラ、外部インターフェースなどは全コア共通

  • キャッシュコヒーレンシ制御

    • プロセッサのキャッシュの整合性

MSIプロトコル

  • 1プロセッサの場合は、キャッシュラインが空かそうでないかを占めるインバリデート状態(空/無効)を持っていればOK

  • MSIプロトコルではキャッシュラインの内容がメモリと同じかどうかを示す Shared という状態を保持する

    • Modified

    • Shared

    • Invalid

  • メモリからロードしたデータを書き替える場合は、他のプロセッサのキャッシュに対して インバリデート 要求を送る

    • 同じアドレスのデータを持っている場合は無効にしてください、という要求

    • スヌープともいう

    • 他のプロセッサからの回答(Invalid=1にした、そのアドレスのデータは持っていない)を確認してキャッシュに書き込みする

  • ライドバックキャッシュの場合

    • 他のプロセッサがキャッシュを更新した内容がまだメモリに反映されていない場合がある

    • あるプロセッサがメモリからReadするときに、他のプロセッサに対してそのアドレスのModified状態のキャッシュラインを持っている場合はメモリに書き戻す要求を送る

    • 書き戻しが完了したことを確認して、メモリアクセスする

MESIプロトコル

  • MSIプロトコルでは書き込みする前にスヌープが必要で時間がかかる

  • 一般に各プロセッサは独立した処理をしていることが多く大部分のスヌープは無駄

  • 無駄を省くためにMESIプロトコルという方法がある

    • キャッシュラインの状態として Exclusive という状態を追加する

    • Exclusive状態はそのキャッシュラインのデータはメモリから読み込まれたままで変更されておらず、同じデータは他のプロセッサのキャッシュには入っていない状態

    • Exclusive状態であれば、インバリデート要求なしにメモリに書き込むことができる

    • Modified状態の場合も同様に、他のプロセッサには同じデータがないのでインバリデート要求なしに書き込むことができる

MOSIプロトコル、MOESIプロトコル

  • MOSIプロトコルでは、メモリからReadするためのスヌープを他のプロセッサが受け取ったときに、メモリに書き戻さずに、他のプロセッサのキャッシュから要求元のキャッシュにデータを送る

  • いずれメモリに書き戻す必要があり、書き戻しの責任をもつのがOwner状態

  • インクルージョンキャッシュ/ノンインクスージョンキャッシュ

    • 1次、2次、LLCでキャッシュの重複を持つかどうか

    • インクルージョンキャッシュでは1次、2次キャッシュに格納されているキャッシュラインが必ずLLC(ラストレベルキャッシュ)にも格納されている

  • プロセッサ間での通信

    • IntelではQPI(Quick Path Interconnect)というチップ間のP2Pを接続する高速インターコネクトを用いている

  • マルチプロセッサの性能向上の限界

    • 資源競合

      • コアで共通して使うリソース(L3キャッシュ、メモリコントローラ、I/Oコントローラなど)がボトル

    • キャッシュコヒーレンシ

  • キャッシュラインのフォールスシェアリング

    • 同一アドレスに複数のプロセッサコアが書き込みを行う場合

    • プロセッサが書き込む際にインバリデート要求が必要で、相互のコア同士でインバリデート要求が発生する

    • プロセッサ間でキャッシュラインが行き来することになる

      • 同一のキャッシュラインでもアドレスの位置が異なる場合は、同一のキャッシュラインでもデータの共有は発生していない。偽の共有なのでフォールスシェアリング(False Sharing)という

  • 共有メモリシステムと分散メモリシステム

第 6 章:プロセッサ周辺技術

6.1 メインメモリ技術

  • SRAM(Static Random Access Memory)

    • 1ビットの記憶に6個のトランジスタが必要

      • ビットあたりの単価が高い

    • 静止した状態でも情報を保持することができる

  • DRAM(Dynamic Random Access Memory)

    • 1ビットの記憶に1個のトランジスタと1個のキャパシタ(コンデンサ、蓄電器)が必要

    • 同じチップ面積でSRAMの8倍程度の情報を記憶できる

    • キャパシタとトランジスタで作られたスイッチがついた記憶セルがマトリクス状に並んでいる

    • トランジスタはDRAM記憶セルへのスイッチ

    • 電位を上げるとオンになり、キャパシタをビット線に接続する

    • キャパシタの電位がビット線の電位になる

    • DRAMから読み出す場合は0でも1でもないフロート状態にしてワード線をハイにする

    • DRAM記憶セルのスイッチトランジスタはオフ状態でも漏れ電流が発生するので時間が経つを記憶した情報がわからなくなる

      • 各行を32~64ミリ秒ごとに1回は読み出してキャパシタの電位を元の状態に戻す必要がある。DRAMの リフレッシュ が必要

  • DDRはDRAMの規格

    • DDR2,DDR3,DDR4など

    • 主にデータ転送速度の違い

    • DIMMは8ビット幅のDRAMチップを8個搭載して64ビット幅とし、アドレスやコマンド信号は全チップに同じ信号が伝わるように結線したもの

    • DIMMはエラー検出のためにDRAMチップが1つ追加されて、合計で9つのチップが搭載されている

  • プロセッサにあるメモリコントローラは、コマンド線を使ってRASやCAS信号を送ってアドレスを指定する

  • メモリのシステムのエラー検知

    • パリティチェック

    • ECC

      • エラー訂正符号

    • ハミングコード

  • 参考

    • 現代PCの基礎知識(3):チップセットとメモリのあれこれ

6.2 入出力装置の接続

CPUと周辺機器の接続は以下のような構成になっている。

出典:Intel® X99 Chipset Block Diagram

  • プロセッサチップから直接PCI Express 2.0への接続してI/OできるタイプとIOH(Input/Output Hub)経由でI/Oするタイプがある

  • PCIバスもPCI Expressもソフトウェアからは同じに見える

  • PCIバス

    • アドレスとデータで共用する32本or64本の信号線とバス上の情報がアドレスなのかデータなのか区別するための信号や各種制御信号を持ったコモンバス構造のバス

      • クロック周波数の向上が難しい

      • 多くの信号線が必要でプリント基板の配線設計が難しい

  • PCI Express

    • 1ペアの信号線で2.5Gbit/sで信号を送電する「高速シリアル伝送」技術を採用

      • データにクロックを混ぜ込む方法

      • 受けて側にもデータとクロックを分離する必要はある

    • 最大で16本まで束ねて使用することができる

  • IO空間を制御するIN、OUT命令をx86プロセッサはサポート

  • Config_Addressレジスタ

    • バス番号(Bus#)

    • デバイス番号(Dev#)

    • ファンクション番号(Func)

    • レジスタ番号(Reg#)

  • デバイス番号ごとに存在するConfig_Dataのアドレスを参照してPCIデバイスごとの情報にアクセスすることができる

  • BIOSが空間ヘッダを読んで、各デバイスに必要なアドレス空間を確保して、物理メモリ空間にデバイスを制御するレジスタを配置する

    • 設定完了後は各デバイスの制御レジスタがメモリ空間に配置されているので、デバイスドライバが経由でデバイスを動かすことができるようになる

  • バスブリッジによる接続できるデバイスの拡張

第 7 章:GPGPUと超並列処理

一旦省略

第 8 章:今後のプロセッサはどうなっていくのか?

8.1 消費電力がすべてを支配する

  • 理想的なCMOS回路ではオフ時には電力は消費しないが実際にはわずかに漏れ電流が発生する

消費電力を求める式

W=αCV^2f/2
  • C:静電容量(チップ全体の信号線の容量)

  • V:電源電圧

  • W:消費電力

  • f:クロック周波数

  • α:チップ電帯の信号線がスイッチする比率

  • 漏れ電流がある状態でクロック周波数を上げると、さらに消費電力が増えてしまう

  • クロック周波数を増やす方針から、複数のマルチプロセッサを作るマルチコアへの方向転換

  • 省電力技術の工夫

    • DVFS(Dynamic Voltage Frequency Scaling)

      • OSが仕事量をモニタリングして、仕事量に応じて電源電圧とクロック周波数を変える方法

    • ターボブースト、ターボコア

      • マルチコアプロセッサの一部のコアだけしか使用していないときに、使っていないコアの消費電力枠を動作しているコアに割り当てる

      • 動作コアの処理スピードをアップさせる

    • クロックゲート、キャッシュ機構

      • 使っていないユニットへのクロック入力を止める方法

8.2 より高性能へ、より多くの機能を

  • トランジスタの使用用途は、マルチコア化と周辺機能の取り込み

8.3 より高信頼で安全なプロセッサ設計

  • プロセッサの誤作動は「故障」、「電源ノイズ」、「中性子、α線」

  • エラーを検知する仕組み(ECC)などをプロセッサに取り込む

8.4 今後のプロセッサの方向性とは?

  • 用途に応じたプロセッサ設計

Previousはじめて読むマシン語Nextオペレーティングシステム入門

Last updated 5 years ago

Was this helpful?

x99-chipset-block-diagram