SSブログ

命令キャッシュ・割り込み・パソコン通信他(月刊ASCII 1988年8月号7) [月刊アスキー廃棄(スクラップ)]

「なんでも相談室」ではハード関係で結構良い解説記事があった。読み返すと懐かしい。この号からは「命令キャッシュの仕組み」と「割り込みということ」をスクラップする。

命令キャッシュの仕組み
Q:MC68020などのMPUではチップの中に命令キャッシュを持っているそうですが,そのような命令キャッシュは具体的にはどの様な効果があるものなのですか?
A:元来キャッシュ・メモリは、低速な記憶装置と高速な記憶装置の間にあるアクセスタイムの差(ギャップ)を吸収して,実行速度を向上させることを目的として考案されたものです.対象となる低速の記憶装置よりも高速・小容量の記憶装置(メモリ素子)で構成されます.例えば,ディスク・キャッシュでは低速な記憶装置にディスク装置が該当し,高速な記憶装置には主記憶装置が該当します。モトローラ社のMC68020(以下68020)などに搭載されている命令キャッシュでは、高速なMPUの実行速度(内部レジスタ)と低速な主記憶装置との仲立ちをしていることになります.
 1987年2月号のこのコーナーにディスク・キヤッシュについての記事が掲載されましたが,オンチップ・キャッシュ・メモリも基本的には同じ考え方に基づくものです.キャッシユ・メモリの基本的な動作原理や置換アルゴリズムについては今回はふれませんので,そちらを参考にしてみてください.
 さて,ご質問の68020に内蔵されている命令キャッシュは、プログラム・コードのみを対象とし,データはキャッシュとは無関係です.68020では主記憶へのアクセス方法がプログラム・アクセスとデータ・アクセスに分かれています.プログラム・アクセスによる書き込みは禁止されているので,この命令キャッシュではメモリへの書き出しの必要がありません.
 68020のオンチップ・キャッシュの構成は図4のようになっています.全容量は256bytesで,ロングワード64個のエントリから構成されています。各エントリは2ワード(32bit)の命令データ(コード)が格納される場所と,その命令が主記憶上でどのアドレスに該当するものであるかを示す認識票のようなものと,1個のV(valid;有効)ビットから構成されていると考えてください認識票はタグと呼ばれるもので,プリフェッチ・アドレス(命令先読みアドレス)の上位24bitとFC2の値から構成されています.FCとは,各バス・サイクルのアクセスの種類を表す3bitからなる信号です.FC2の値によって,そのアクセスの対象がUser領域かSupervisor領域がを判断することができます.また,アドレスの下位8bitのうちbit2からbit7までの6bitをインデックスとして用い64個のエントリから1つを選択し,bit1で2ワードのうちのどちらを選択するかを決定します.
 このように命令の格納されているアドレスから,キャッシュ中で格納される位置が決定される方式をダイレクトマッピング方式と言います.ダイレクトマッピング方式の利点は、複雑なアルゴリズムをもって命令データの置換動作をするわけではないので,ハードウェアが簡潔なもので済み、オンチップ化しやすくなります.キャッシュがオンチップ化されれば、外付けすることと比べてその分ハードウェアの設計が単純化されます.
 次に,動作の概要を説明しましょう.図4をごらんください。次にアクセスされる命令のアドレスから前述の方法でエントリを選択し,タグとアドレス(およびFC2)を比較した結果がマッチしていて、かつそのエントリが有効である場合にキャッシュ・ヒットとなり,マッチしない場合や無効である場合はミスになるというものです.ミスした場合は,その命令が格納されているアドレスから得られるインデックスが適合するエントリに新しい内容として書き込まれます(古いデータは捨てられます)
 ヒット率は,プログラムを次のように2つのグループに大別して示されます.プログラム・グループ1は,プログラム・アクセスの頻度がデータ・アクセスに対して2倍以上のもので,プログラム・グループ2はその逆に2倍以下のものです.グループ1に対するヒット率は約65%で,グループ2では約30%となるそうです.
 命令キャッシュ(をRAMと見立てた場合)のアクセス・タイムは動作クロックやMPU周辺のハードウェア構成に左右されるので一概にどの位の速度であるとは言えませんが,クロック20MHzの68020が理想的な状態で使用されるとしたら,だいたい20n秒~30n秒のSRAMを外部に備え付けた場合と同等の速度になるようです.内部的には、キャッシュのアクセスは2サイクル・タイムで行われるので,命令のパイプライン処理によって,実際のアクセスにかかる時間がその前の命令の実効時間に吸収されてしまい、外から見るとアクセスに掛かる時間がほとんどゼロになってしまうこともあります.
 また,この命令キャッシュの使用、未使用はプログラムから専用のレジスタを介して制御可能です。
 図5は、MPU上のキャッシュ・メモリを含んだコンピュータシステム全体の記憶装置の構成を表しています.低速大容量のディスク装置から高速小容量のキャッシュ・メモリまで,記憶装置が階層構造をなしていることが解ると思います.このように,記憶装置を階層構造化することのメリットには,マルチタスクOS(仮想記憶)への対応とコストの問題があるわけです.
 コスト面以外のメリットとして,もう一つ忘れてはならないことがあります.それは,バスの開放時間の増加です.オンチップ・キヤッシュ・メモリを持っていると,キャッシユ中でヒットしている限りは,MPUからのバスアクセスが激減します.MPUのバスの使用時間が減ることは,そのまま他のバスマスタがバスを占有する時間が増えることになります.他のバスマスタとは、DMAC(ダイレクト・メモリ・アクセス・コントローラ)などに代表されるものです.
 その時間の増加は,システム全体のスループットが向上することに他なりません.コンピュータシステムはMPUと記憶装置だけでないことは周知の事実です.MPUの演算処理能力もそうですが,周辺機器へのI/Oが効率良く稼動されてはじめて優れたコンピュータシステムと言えるので,バスが開放されている時間が増加することは非常に大切です.
 こうしたキャッシュ・メモリは、システム全体を通してコストの面と性能の向上に盛ながら役立っているものであることが解ります.そして,これからのマルチタスクのシステムを考えるときには,コンピュータシステム全体を通して微妙なバランスを保持することができなくては,実用的なシステムとして通用しません.オンチップ・キャッシュなどは,そうしたバランスを保つためのアイデアの1つとして捉えることができると思います.(梅田)
参考文献「MC68020ユーザース・マニュアル2ndEditions,MotorolaInc,CQ出版資料提供日本モトローラ(株)

ASCII1988(08)g03命令キャッシュ_図4_W520.jpg
ASCII1988(08)g04命令キャッシュ_図5_W367.jpg
CPUのキャッシュメモリはこの頃から用いられ始めた。CPUが高速になりメモリが追いつかない時代になってきた。8bit機の時代はただでさえ遅いCPUをWaitをかけて減速して動かしても売れていた時代があった。こうしたときNo Waitが売りだった。なんだか情けない感じがする。

割り込みということ
Q:「ハードウェア割込」とか「ソフトウェア割込」という言葉をよく耳にしますが,この二つはどう違うのでしょうか.またi8086などの機械語命令に「割込命令」というものがありますが,何をする命令なのでしょうか.
A:割込とは、簡単に言うとCPUが外部機器から信号を受けたりCPU内部でエラーが発生したとき,その時点で実行中のプログラムを中断して,一時的に他のプログラムを実行する動作のことです.このうち、外部機器(ハードウェア)からの信号で発生する割込を「ハードウェア割込」や「外部割込」といいます.これに対して,CPU内部のエラーや,ある種の命令を実行することで発生する割込を「ソフトウェア割込」または「内部割込」といいます.
 まず,ハードウェア割込がなぜ必要なのか,どのように使われるのかについてお話ししましょう。
 コンピュータの動作はごく簡単にいうと,入力機器から入力したデータを,CPUが加工・計算し,結果のデータを出力機器に送ることの繰り返しです。ところが,入力機器や出力機器などの外部機器とCPUは、動作する速度がかなり違います。CPUが外部機器の動作を待っているのでは、効率が悪くなってしまいます.そこで,必要なときにだけ外部機器がCPUを呼び出して,データのやり取りを行えるように考え出されたのが「ハードウェア割込」なのです.
 CPUは外部機器から割込要求の信号を受けると,その時点で実行している処理を中断し,割込を要求している外部機器とデータのやり取りをする処理を行います.その処理が終った後は、さきに中断されていた処理を再開します。割込が発生したときに呼び出されるサブルーチンのことを,「割込処理ルーチン」や「割込ハンドラ」と呼びます.
 割込ハンドラはCPUに対して割込を要求する機器ごとに必要となります.実際のコンピュータでは,システムソフトウェアであるオペレーティングシステムやBIOS(Basic Input/Output System)の中に含まれています。
 ハードウェア割込の簡単な例を挙げてみましょう.
 PC-9801シリーズのキーボードは、キーが押されると,本体へ割込を起こす電気的信号が送られ,同時にキーの番号とキーが押されたことを示すデータがI/Oポートに送られます.CPUは割込の信号を受けると,その時点で実行している処理を中断し,I/Oポートからキーデータを受け取ってキーバッファと呼ばれるメモリ領域に保存します.その処理が終わると,元の処理の続きに戻ります.プログラム中でキーボードからのデータが必要なときは,キーバッファの内容を読み出します.
 このように,割込を利用することによってキー入力をバッファに蓄え,必要な時点にすぐ読み出せるようにすることを,「バッファリング(buffering)」と言います.バッファリングを行わないと,CPUがキー入力の処理を行っているとき以外に押されたキーのデータは無視されてしまうので,キーの反応がたいへん悪くなってしまいます.
 また,外部機器の中には一部のデータ通信装置のように外部との同期をとりにくいものがあります.このような機器とデータをやり取りする場合,できるだけ速やかに行わなければいけません.もし,このような機器からデータを受け取っている最中に割込が発生すると,データが抜け落ちてしまうことがあります.そのようなことがないよう,ハードウェア割込では外部機器の性質に応じて優先順位を定め、優先順位の低い機器からの割込を後回しにすることができます.
 このほか一時的にある機器の使用を止めたいときなどに,その機器からの割込を無視したりすべての割込を同時に禁止したりすることもできます.これを,割込のマスクと言います。
 例えば,PC-8801シリーズでCRTコントローラからの割込をマスクすると,画面書き込みを高速に行うことができるようになります(もっとも,書き込んでいる間は画面が真つ黒になってしまいますが...).
 8086系のCPU(i8086,i80286,V30など)では,機器毎に優先度を定めたり割込をマスクする,割込コントローラと呼ばれるICを使います,8086系CPUに使われる割込コントローラ8259Aは,1個で最大8つまでの外部機器を接続できるようになっています.また,複数個を図6のように接続することによって,もっと多くの割込信号を取り扱うことができます.8259Aは8本の割込信号の優先度や任意の割込信号のマスクを,CPUから設定できるようになっています.
 通常の外部割込は,割込コントローラのマスクレジスタや,CPUの割込マスクフラグをセットすることによって,マスクできますが,電源の異常やCPUが暴走状態になった場合など、緊急時に割込がマスクされていると,CPUを正常な状態に戻すことができなくなってしまいます.そのため,マスクされることのないNMI(Non Maskable Interrupt)と呼ばれる割込が用意されています。NMIは,CPUのNMI端子に電気的信号が送られたときに発生します。NMIと通常の割込は、マスクできるかできないかの点以外は,ほとんど同じと考えてよいでしょう.
 ハードウェア割込の話はこのくらいにして,次にソフトウェア割込について簡単に説明します。 ソフトウェア割込には,「割込命令」を実行した結果起こるものと,その他の命令を実行した結果CPU内部に例外的な状態が発生した場合に起こるものがあります.
 ご質問の通り,8086系CPUには“int n”という割込命令があります.この命令を実行すると,CPUはオペランドで指定した番号の割込ハンドラに制御を移し,その処理が終つた後は元のプログラムの実行に戻ります.つまり,普通のサブルーチンコールとほとんど同じことをするわけです.サブルーチンコールと違うのは、サブルーチンのアドレスを指定するのではなく,割込ハンドラの番号(割込ベクタ)を指定することと,サブルーチンを呼び出すときにCPUの内部状態を示す「フラグレジスタ」をスタックに退避する点です.
 MS-DOSではOS内部のサブルーチンを利用するファンクションコールに割込命令が使われています.割込命令では、サブルーチン(割込ハンドラ)のアドレスが,「割込ディスクリプタテーブル」と呼ばれるメモリ上の領域にまとめて書かれているので,ユーザープログラマはOSの具体的なアドレスを知らなくてもよいのです.そのためサブルーチンコールを使う場合に比べるとプログラムが解りやすくなり,命令のバイト数も少なくて済みます(int xxhは2バイト,call [segment:offset]は5バイト).一方,CPU内部でエラーが起こったときに発生するソフトウェア割込を,「例外割込」といいます.例えば,除算命令で除数を0にしてしまった場合や,デバイスの存在しないアドレスにアクセスしようとした場合など,プログラム実行中に致命的なエラーが起こるとCPUがエラー状態のまま止まってしまうことがあります.そこでこのようなエラーが起こった場合に,CPUが自分自身に割込をかけてエラー処理のルーチンを起動するのが例外割込です。
 68000系のCPUは,CPUの内部に実装されていない命令を実行すると,例外割込が発生します.これを特に「トラップ(trap=わな,落し穴)割込」といいます。MC68000などをCPUにもつ,MacintoshのOSでは,命令コードがA000hからAFFFhまでのトラップ割込をOSコールに使用しています.16進表示で最上位の桁が“A”であることから,これを「Aライントップ」と呼びます. 同じく68000系のCPUでは,数値演算コプロセッサの制御に未実装命令コードF000hからFFFFhまでの「Fライントラップ」を使用します。従って,Fライントラップの割込処理ルーチンでコプロセッサの機能をエミュレートすることによって,数値演算コプロセツサを装備していないシステムと装備しているシステムで,速度の差はあるものの,全く同じプログラムを実行することが可能になります(余談ですが,モトローラ社ははじめ、MC68000のAライントラップを命令セットの拡張用にと考えていたのですが,アップル社がMacintoshのOSで使ってしまったため,Aライントラップの使用をあきらめたという話もあるそうです).
 MC68020,i80286,i80386といった,最近の16~32ビットのCPUでは,複数のプログラムを見かけ上同時に実行できるマルチタスクのOSが走るようになっています.マルチタスクOSでは,例外割込を巧妙に利用することで,実行するプログラムを切り替えたり,不当なメモリアクセスが行われないように監視したりします.
 この他,よく使われるソフトウェア割込に「シングルステップ割込」があります.シングルステップ割込とは,1つの命令を実行する度に発生する割込で,主にプログラムのデバングに使われます。
 以上,割込の種類と働きについてざっとお話ししてきましたが,割近に関する話はまだたくさんあります.簡単なアプリケーションプログラムを書いたりする限りでは割込のことを意識しないで済みますが,ハードウェアを直接操作するプログラムを作るときには割込の知識が必要になります。割込の処理のしかたはCPUによって,また同じCPUを使っていても機種によって少しずつ違いますので,各機種のマニュアルやCPUのマニュアルなどを参考にしてみてください。(竹田)

ASCII1988(08)g05割り込み_図6_W520.jpg
「速度命」を信条としてプログラムを書いていたので当然割り込み命令も使った。たまに割り込み禁止をするのを忘れるバグを発生させしばらく悩んだことを思い出す。

パソコン通信が広まってきた時代の入門記事をスクラップする。
ASCII1988(08)d01パソ通_W520.jpg
面白いと感じた部分は
ASCII1988(08)d03パソ通_買い物_W329.jpg
今では当たり前のネットでの買い物、34年前はパソコン通信でやっていた。パソコン通信で買い物ができるとは凄いことだと思っていたというかできることを知らない人たちがいた。
パソコン通信は敷居が高かった。大前提としてパソコンが必要だった。パソコンを持っていない人が興味を持って参加することがあり、私たちは宣教師よろしく買い物に付き合い、初期設定をしてパソコンの使い方を教えることから始めた。私たちは、なんとおせっかいな奴らだったのだろうか。
パソコン以外にモデム代
ASCII1988(08)d05パソ通_表2_W514.jpg

通信ソフト
ASCII1988(08)d05パソ通_表3_W353.jpg

ネットワーク
ASCII1988(08)d08パソ通_表4_W520.jpg
とかなり金がかかった。そのうえ電話代テレホーダイが懐かしい。
昔のパソコン通信は電話代が高かったし、アクセス料金というものもあった。まあ、今でも「ギガが足りない」だとか言っているし、課金があるので同じことか。
アクセス料金と電話代・・・
つきあい方しだい

 イニシャルコストがCDプレイヤー代だとすると,CDのディスク代に相当するのが,アクセス料金と電話代だ.アクセス料金は,実験運用期間中には気にならなかったが,現在では,ほとんどのネットワークサービスでなんらかのアクセス料金が徴収される.アクセス料金には,大きく分けて,固定料金制と従量制の2つの体系がある.各ネットワークの料金体系については,表4に示した.従量制で予算よりもアクセスし過ぎるとどうなるかはわかりますよね.
 そして,ネットワークユーザーが,アクセス料金とともに恐怖しているものが電話料金だ(その前に電話がないと話にならないのだが,これはむしろイニシャルコストの方に入る).3分10円なら1時間でも200円じゃないかという油断が,破綻を招く.メールを読んで返事を書いたりして,いつも見ているボードをざっとながめたら,最低でも15~30分はかかるし,興味のあることをちょっと調べてみたり,プログラムのダウンロードやVOICEなどを始めたら1時間,2時間で済まないこともしばしばである.さらに長距離となると,あっという間に10万,20万というオーダーになってしまうこと請け合い.だから,首都圏以外の地域に住んでいる人は,アクセスポイントが近くにないBBSでは,情報の入手などを中心に気をつけて使うようにし,ホームグラウンドは、近くにアクセスポイントのあるBBSにするのが賢明かもしれない.


「三馬鹿大将」TVで観てた。
ASCII1988(08)g01三馬鹿大将_W520.jpg
ASCII1988(08)g01三馬鹿大将_写真1_W520.jpg
とにかく笑った。エピソードは一つも覚えていないけれど、腹を抱えて笑った記憶がある。
歌も覚えている。「うひはーへんちくりんへんちくりんのどんぷかどん」で始まる歌。「ラリーだモーだカーリーだ」

最後は映画の「アキラ」34年前だったのか。
ASCII1988(08)g06アキラ_W520.jpg
「わずか48秒のCGパフォーマンス」だと。
ASCII1988(08)g06アキラ_図1_W520.jpg
ASCII1988(08)g06アキラ_図2_W420.jpg
ASCII1988(08)g06アキラ_図3_W373.jpg
ASCII1988(08)g06アキラ_図4_W452.jpg
実写と違いアニメならCGを使わなくてもいいように思った。どれだけ効果があったのかは分からない。
nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。