エントリー

カテゴリー「備忘録」の検索結果は以下のとおりです。

コンピュータ基礎の基礎~キャッシュメモリ

  • 2010/07/29 13:49
  • カテゴリー:備忘録

 コンピュータ基礎の基礎,第2回目はキャッシュメモリです。

 CPUの速度はドンドン速くなっているのに,メモリの速度は絶望的に速くなっていません。

 もちろんDRAMだってSDRからDDR,DDR2,DDR3と世代を経るごとに速度は上がっていますが,実はDRAMというのはコンデンサを使って電気をためることで記憶する仕組み自身に速度的な限界があって,DDRだのDDR2だのという速度向上の工夫は,そのアクセスの方法に工夫を行って高速化を試みたものに過ぎません。

 だから,高速化されたとはいえ,例えば連続でアクセスした時だけとか,そういう特定の条件の時だけ速度がアップするようになっているので,悪い条件でアクセスすると,昔のDRAMに比べて劇的に高速化されるというわけではありません。

 そんなですから,数GHzという超高速で動作するCPUの足を引っ張っているのがメモリということになります。もっとも,こういう状況はコンピュータが生まれてからずっと続いている問題ですので,なんとかこれを工夫して,遅いメモリに足を引っ張られないようにCPUを動かす方法が昔から考えられてきました。

 それがキャッシュメモリです。

 プログラムやデータには時間的あるいは空間的な局所性があり,ある命令の次に実行される命令は,その近所にあるという性質があります。また一度読み出したプログラムやデータは,もう一度使われることもあるし,その前後にあるものが使われることも多いことが経験的にわかっています。

 そこで,一度メインメモリから読み出したデータを,メインメモリよりもずっと高速なメモリに蓄えておき,以後はこれを使うようにすると遅いメモリにいちいち取りに行くことがなくなります。

 ただし,高速なメモリというのはとても高価ですから,たくさん用意することができません。そこで,出来るだけ少ない容量で性能改善が行われるように,様々な方式が考えられてきました。

 また,アドレス1つに対してキャッシュに蓄えられるデータの大きさは1ワードとは限らず,最近は4ワードや8ワードを蓄えるものも多くなってきました。

 キャッシュの大きさは有限ですから,1アドレスごとにたくさんのデータを蓄えておけば,アドレス情報が少なくて済むので有効利用が出来そうですが,なにせ格納できるアドレス情報が少ないですから,プログラムがあちこちをアクセスするようになると,キャッシュにちっともヒットしなくなります。

 かといって,1ワードごとにアドレスを割り振っていたら,アドレス情報の格納のためにメモリが使われてしまうので,無駄遣いになります。このあたりはそのCPUやどんなプログラムを走らせるのかによって最適解が変わってきますので,良く検討されなければなりません。

 ところで,メインメモリの遅さというのは,なにも読み出しの時だけではありません。結果を書き込む際にも遅いわけですが,これもキャッシュメモリに一時的に蓄えておけば,CPUは書き戻しを待たずに次の処理にとりかかれます。つまり,キャッシュメモリというのは,読み出しと書き戻しの2つの動きがあるということです。

----

問題:ダイレクトマップ方式のキャッシュにおいて,アドレスA,Bは同一のキャッシュブロックアドレスに割り当てられているため,アクセス時にコンフリクトミスを生じる。このキャッシュに接続されたプロセッサが,次に示す順にアクセスを行った。

a)アドレスAから読み出し
b)アドレスBに書き込み
c)アドレスBから読み出し
d)アドレスAに書き込み
e)アドレスBに書き込み

 ライトスルーキャッシュは,書き込み時にキャッシュと同時に主記憶を書き換える方式であり,この中で,書き込みミス時に直接主記憶のみを更新する方式をNo-write allocate(direct write)方式のライトスルーキャッシュと呼ぶ。

 一方,ライトバックキャッシュは書き込みの度に主記憶を更新せず,書き戻しの際にまとめて更新する方式である。

 今,この2つの方式について,上のa)からe)までのアクセスを順に行った際ヒットするかどうかを示した組み合わせの中で正しいものを選べ。ただし,Hがヒット,Mがミスヒットを示す。

1.
ライトスルー MMHMH
ライトバック MMHHH

2.
ライトスルー MMMMH
ライトバック MMHMM

3.
ライトスルー HHMHM
ライトバック HMHMM

4.
ライトスルー HMMMH
ライトバック HHMMH

5.
ライトスルー MMMMM
ライトバック MMHMH

----

回答:

 ダイレクトマップ方式のキャッシュメモリということなので,問題にあるようにアドレスAとアドレスBの内容は同時にキャッシュメモリ内には存在できない。

 また,No-write allocateのライトスルー方式というのは,書き込み時のアドレスがキャッシュに存在した場合(ヒットした場合)はキャッシュとメインメモリの両方を書き換え,キャッシュに存在しない場合(ミスの場合)には,メインメモリだけを更新し,このアドレスをキャッシュには取り込まないものである。

 一方のライトバック方式というのは,書き込み時のアドレスがキャッシュに存在した場合(ヒットした場合)には,キャッシュのみを書き換え,メインメモリには書き込まない。キャッシュに存在しない場合(ミスの場合)には,キャッシュメモリにそのデータを読み込んだ後,キャッシュメモリを書き換える。メインメモリへの書き込みは,キャッシュを追い出されてしまった時に行われる。

 まず,ライトスルーを検証する。

a)ではアドレスAのデータがキャッシュに存在せず,ミス。ここでキャッシュにはアドレスAのデータが入る。

b)ではアドレスBへの書き込みが発生するが,キャッシュに存在するのはアドレスAのデータなので,ミス。アドレスBのデータはメインメモリに書き込まれ,キャッシュはそのまま。

c)ではアドレスBからの読み出しをするが,キャッシュにはアドレスAのデータが入っているため,ミス。ここでキャッシュはアドレスBのデータを格納する。

d)ではアドレスAへの書き込みが発生するが,キャッシュに存在するのはアドレスBのデータなので,ミス。アドレスAのデータはメインメモリに書き込まれ,キャッシュはそのまま。

e)ではアドレスBに書き込みが発生するが,キャッシュにはアドレスBのデータが存在するため,ヒット。キャッシュメモリとメインメモリの両方にアドレスBのデータが書き込まれる。

 次に,ライトバックを検証する。

a)ではアドレスAのデータがキャッシュに存在せず,ミス。ここでキャッシュにはアドレスAのデータが入る。

b)では,アドレスBに書き込みが発生するが,キャッシュに存在するのはアドレスAのデータなので,ミス。アドレスBのデータはキャッシュに書き込まれ,メインメモリには追い出されたアドレスAに書き込みが発生する。

c)ではアドレスBからの読み出しをするが,キャッシュに存在するのはアドレスBのデータなので,ヒット。

d)ではアドレスAに書き込みが発生するが,キャッシュに存在するのはアドレスBのデータなので,ミス。アドレスAのデータはキャッシュに書き込まれ,メインメモリには追い出されたアドレスBに書き込みが発生する。

e)ではアドレスBに書き込みが発生するが,キャッシュに存在するのはアドレスAのデータなので,ミス。アドレスBのデータはキャッシュに書き込まれ,メインメモリには追い出されたアドレスAに書き込みが発生する。

 よって,ライトスルーはMMMMH,ライトバックはMMHMMとなり,正解は2.となる。

----

 さて,前述のようにキャッシュメモリにはメインメモリからの読み出しと,メインメモリへの書き戻しの2つ,キャッシュの中身の入れ替えを加えた3つの作業が発生しますが,それぞれの方法によって,いくつかの分類がなされています。

 まず,読み出しの方法による分類です。

・フルアソシアティブ方式

 各ラインにデータを格納する部分と,そのデータの存在するアドレス情報を格納するタグと呼ばれる部分を持ち,CPUが要求したアドレスとタグに書かれたアドレスの一致を確認する方式。
 キャッシュメモリの全ての部分にどのアドレスのデータも格納できるために効率が良く,ヒット率も高いが,総当たりをしなければならないので回路規模も大きくなり,速度も厳しくなる。

・ダイレクトマップ方式

 各ラインにデータの存在するアドレス情報をタグとして持つことは同じであるが,アドレスの中位ビットによって示されるインデックスによってラインが1つに決定される方式。回路規模も小さく,高速動作が可能だが,インデックスが同一でもアドレスが異なる場合はミスヒットとなり,データの入れ替えが頻繁に発生して大幅に速度が低下するという欠点がある。

・nウェイセットアソシアティブ方式

 フルアソシアティブ方式とダイレクトマップ方式の欠点を補う方式で,ダイレクトマップ式をn個並列に並べたもの。ダイレクトマップ式ではインデックスが同じものは1つしかキャッシュされなかったが,この方式ではn個がキャッシュされる。nは2や4が多いが,例えば各ウェイのラインが1つで,nがライン総数に等しい場合はフルアソシアティブ方式と同じ意味となる。


 とまあ,言葉で書いてもなかなかわかりにくいので,例を挙げてみましょう。アドレスが32ビット,1ワード32ビットのプロセッサを例に取ります。キャッシュの容量は256バイトとし,キャッシュの1ラインあたり1ワードすなわち4バイトを格納するものとして,3つの方式を書き表してみます。

(1)フルアソシアティブ方式の場合
キャッシュラインの構成 タグ部30ビット+データ部4バイト(32ビット)
ラインの本数 256 / 4 = 64本
アドレスの使い道 上位30ビットがタグの30ビットと比較される
         残った2ビットは各ラインに入っているバイトを示す

(2)ダイレクトマップ方式の場合
キャッシュラインの構成 タグ部24ビット+データ部4バイト(32ビット)
ラインの本数 256 / 4 = 64本(ということはインデックスは6ビット必要)
アドレスの使い道 上位24ビットをタグの24ビットと比較
         続く6ビットがどのラインに入っているかを示す
         残った2ビットは各ラインに入っているバイトを示す

(3)2ウェイセットアソシアティブ方式
キャッシュラインの構成 タグ部24ビット+データ部4バイト(32ビット)
ラインの本数 256 / 4 / 2 = 32本が2つ並列に存在,合計64本
アドレスの使い道 上位24ビットをタグの24ビットと比較
         続く1ビットがウェイの選択
         さらに続く5ビットがラインを示す(インデックス)
         残った2ビットは各ラインに入っているバイトを示す

(4)4ウェイセットアソシアティブ方式
キャッシュラインの構成 タグ部24ビット+データ部4バイト(32ビット)
ラインの本数 256 / 4 / 4 = 16本が4つ並列に存在,合計64本
アドレスの使い道 上位24ビットをタグの24ビットと比較
         続く2ビットがウェイの選択
         さらに続く4ビットがラインを示す(インデックス)
         残った2ビットは各ラインに入っているバイトを示す

 こうして具体例を並べてみると,言葉で書いてみるとややこしい話でも,32ビットあるアドレスの各ビットにどんな役割を与えるかという話だけになります。

 フルアソシアティブ方式だと,64本のキャッシュラインにどんなアドレスでも入る代わりに,比較は30ビット行う必要があります。それに,キャッシュの入れ替えを行う対象がキャッシュ全域に及ぶため,その判定に時間がかかります。

 これがダイレクトマップ式だとアドレスの比較は24ビットで済みますし,キャッシュの入れ替えは機械的に判断されますから楽ですが,アドレスの6ビットで入るキャッシュラインが決まっています。言ってみれば6ビットの比較があらかじめ済んでいる,ということでしょうか。

 4ウェイアソシアティブ方式では,ダイレクトマップ式においてキャッシュラインを決めていた6ビットのうち2ビットをウェイの切り替えに使っているので,インデックスは4ビットとなり,16本のラインが決まってしまいます。しかし4ウェイですので,同じインデックスでも4つまで格納できるというわけです。


 続いて,書き戻し方式による分類です。

・ライトスルー方式

 CPUからデータの書き出しを行う際に,キャッシュメモリと同時にメインメモリも逐一書き直す方式。通常はキャッシュにデータが存在しない場合にはメインメモリのみに書き込みを行うNo-write allocate方式を採用する。キャッシュとメインメモリとの間のデータの不一致が起きない代わりに,CPUからのデータ書き戻しには時間がかかってしまう。

 書き込み時に,そのアドレスのデータがキャッシュに存在した場合はヒットとなり,キャッシュとメインメモリの両方に書き込まれる。そのアドレスのデータがキャッシュに存在しない場合はミスとなり,メインメモリのみに書き込まれる。write allocate方式の場合には,ここでキャッシュにも書き込まれるが,その根拠である書かれたデータは次に読まれるはずというのは案外あてにならず,一般的ではない。

・ライトバック方式

 CPUからデータの書き出しを行う際に,キャッシュメモリだけを書き換える方式。当然キャッシュメモリとメインメモリの不一致が発生するが,不一致であるという事をとりあえず記録しておき,キャッシュの内容が入れ替えのために捨てられるときに,メインメモリにラインごと一括して書き込む。ライトバック方式では,write allicate方式が採用される。

 書き込み時に,そのアドレスのデータがキャッシュに存在した場合はヒットとなり,キャッシュのみに書き込まれ,メインメモリは更新されない。その代わり両者が不一致であることがタグに書き込まれ,このデータがキャッシュから追い出されるタイミングでメインメモリに書き込まれることを示しておく。

 そのアドレスのデータがキャッシュに存在しない場合はミスとなるが,まず最初にキャッシュのリフィル(入れ替え)を行い,そのアドレスの内容をキャッシュに取り込む。続けてキャッシュのデータを新しいデータで上書きし,不一致をタグに記録する。

 メインメモリへの書き込みは,そのアドレスがリフィルによってキャッシュから消されてしまう時で,この結果時間のかかる書き込みの回数が少なくできる。


 どちらが良いかは使い道に寄るところがあって,ライトスルー方式でもライトバッファを入れれば速度的な問題は起きにくい上に,回路も簡単でキャッシュとメモリとの不一致が原理的に起きませんから,小容量のキャッシュならメリットがあります。例えばCPUに内蔵される1次キャッシュに使うとおいしいです。

 これに対してライトバック方式ですが,なんと言ってもメモリへのアクセス回数が減りますから,例えばマルチプロセッサなどバスマスタが複数ある場合にはバスが効率よく使えるので有利です。


 最後に,キャッシュの入れ替えに関する分類です。

・LRU方式

 Least Recently Used方式の略で,最も古くアクセスされたデータを捨てて入れ替える方法。新しいものほど良く使われるだろうという局所性を根拠としている。効率の良い方法ではあるが,アクセスの履歴を取らねばならず,タイミングが厳しい。

・ラウンドロビン方式
 データを履歴によらず,順番に捨てて入れ替える方式。取り込みの古いデータから捨てるという根拠による。回路が簡単というメリットがある一方,使用頻度が考慮されず,ヒット率の高いデータでも捨てられることになってしまうので,効率は悪い。

・ランダム方式
 捨てるデータをランダムに選ぶ方式であるが,これはどのデータも平均的に使われる(使われない)だろうという根拠に基づく。効率はそれほど良くないがなんといっても回路が簡単である。


 注目すべき点は,ダイレクトマップ式の場合には,同じインデックスのデータが来たら無条件にそのラインを捨てて書き換えるので,こうした入れ替えの仕組みを持つ必要がないということです。

 しかし,nウェイセットアソシアティブ方式ではn個あるウェイのうちどちらを捨てるのか決めねばなりませんし,フルアソシアティブ方式に至ってはたくさんあるラインの内どれを捨てるか決めねばなりません。

 当然,良くヒットしているものを捨ててしまっては効率が落ちますから,それなりの理由で捨てるものを選ぶ必要があるわけですが,それが複雑になってしまってはCPUの処理速度全体の足を引っ張ってしまいます。

 一方,ダイレクトマップ式では捨てるデータが決まっていることから一見すると合理的ですが,同じインデックスで異なるアドレスを交互にアクセスするようなケースでは,毎回キャッシュの入れ替えが起こってしまうという最悪の事態が起こります。


 このように,キャッシュメモリというのはなかなか複雑で,データの読み込み方,データの捨て方,データの書き戻し方の3つの分類による組み合わせで,様々なものが考え出されます。データと命令をそれぞれ別のキャッシュ取り込むことや,キャッシュの容量,キャッシュの階層を分けることなど,さらにたくさんのバリエーションが存在するのは,それだけキャッシュメモリにはお金がかかり,メインメモリ全部がCPUと同じ速度で動作するという理想にほど遠いことを示していると言えるかも知れません。

コンピュータ基礎の基礎~パイプライン

  • 2010/07/27 19:47
  • カテゴリー:備忘録

 コンピュータは,これまで様々な工夫で速く動作するように作られてきました。その当時は最先端だったことでも,今は非常に基礎的なものとなっていたりするのですが,何分普段使うものではないので,ついつい忘れてしまいがちです。

 そこで,この場をちょっとした復習に使おうと思います。第1回目はパイプラインです。

問題:あるCPUも命令実行におけるパイプライン処理が,以下の6段のステージをもつとする。

 F:命令読みだし(instruction fetch)
 D:命令解読(instruction decode)
 A:番地計算(address calculation)
 B:オペランド読みだし(operand fetch)
 E:命令実行(instruction execution)
 W:結果格納(write back)

 パイプライン処理を行わない場合,命令実行Eの所要時間は15ns,Eを除く各ステージの所要時間は10nsであるとする。また,パイプライン処理を行う場合は,上記の他に各ステージにおいて2ns必要となる。2nsの打ち合わせは,クロックスキューの調整とパイプライン処理の準備のための時間である。この時,以下の問いに答えよ。

1)パイプライン処理を行わない場合の実行過程(時間を横軸)を3命令分図示せよ。
2)パイプライン処理を行う場合,ステージの所要時間(パイプラインピッチ)はいくらとなるか?
3)パイプライン処理を行う場合の命令実行過程を3命令分図示せよ。
4)パイプライン処理による定常状態における速度向上率を求めよ。
5)命令実行パイプライン処理の流れを阻害する要因(ハザード)について説明せよ。

回答:

1)

 このCPUは6つのステージを持っていますが,Eステージだけは15nsかかり,それ以外は10nsで処理が出来るということです。Eステージというのは実際の命令の処理を行う部分ですから,時間が余計にかかる傾向があります。そこでここをさらに2つに分けるなどして,処理時間を短くするようなことも行われます。

 パイプライン処理を行わない,つまり順番に3命令分処理するという事ですので,以下のように書くことができます。下の数字は時刻です。

 F D A B E W F D A B E W F D A B E W
0 10 20 30 40 55 65 75 85 95 105 120 130 140 150 160 170 185 195
 
 このCPUは,3命令を実行するのに195nsかかるという事になりますね。1命令当たりの65nsかかっています。

2)

 パイプライン処理というのは,各ステージを同時に実行していく方法です。パイプラインというより,ベルトコンベアという感じが正しいと思います。1つの製品を作るのに1時間かかるとしても,1つの行程が10分の流れ作業で作ると,完成品は10分に一度の割合で出てきます。ということは,見た目には1つの製品を10分で作っているように見えるわけです。

 一見ウソのように思いますが,これはウソでもなんでもなく,6つの行程がひっきりなしに動いているからです。いわば,1つの製品を作るの必要な工程を順番にせず,一気に同時に行っているから時間が短くなっていると考えられるわけですね。

 ややこしいのは,ステージの時間が揃っていない場合です。自分が5分で出来ても,次の人が10分かかっていたら,次の人の手前にものが溜まってしまい,結局10分に一度しかものが完成しません。つまり,一番長い時間のかかる処理に全ての処理を揃えて上げないと,パイプライン処理というのは成り立たないのです。

 さて,このCPUは,6つのステージに分かれています。それぞれのステージの処理時間は,Eを除いて10ns,Eだけは15nsかかります。

 このCPUでパイプライン処理を行う場合,一番遅いステージに揃えて上げる必要があります。一番遅いのはEの15nsに2nsを確か足した17nsですので,全てのステージを17nsで並べて上げるとよさそうです。この17nsという数字が,パイプラインピッチです。

3)

 では,実際にパイプライン処理を図示してみましょう。

 F D A B E W
   F D A B E W
     F D A B E W
0 17 34 51 68 85 102 119 136

 どうですか,始めと終わりに全てのステージが動いていない部分がありますが,3命令とは言わずたくさんの命令を流せば,ほとんどの時刻で全てのステージが動いてくれそうです。

 実際,同じ3命令の仕事をパイプライン処理することで60ns近くも早く終わらせることに成功しています。この威力は大きいです。

4)

 まず,パイプライン処理をしなかった場合の処理時間ですが,これは1)にあるように,195nsです。

 これをパイプライン処理にした場合,3)のように136nsで済んでいます。速度向上率は,(195-136)/136*100=43.38%です。

 一番遅いステージに揃え,なおかつ各ステージに2nsの余計な時間がかかってしまうとしても,4割も速度が上がっています。これがパイプライン処理の効能です。

5)

 ところで,4)の「定常状態」なのですが,では定常状態ではない時というのはどういう時かというと,ステージが遊んでしまうような状態をさします。例えば分岐命令があった場合に起こる状態です。

 分岐命令があると,その後に続く命令が確定しません。ですから確定するまで,次の命令が取り込まれることなく,各ステージはしばらく遊んでしまいます。

 これをハザードといいます。

 パイプライン処理というのは並列処理の一種ですから,前後の命令が時間的に相関がある,つまり前の命令の結果が後ろの命令に影響を与えるような場合,同時に処理することは出来ません。

 分岐もそうですし,他にも前の命令で計算した結果を次の命令で使うような場合,前の命令の処理が完了しないと後ろの命令が実行できません。

 こうしたハザードをなんの対策も行わずに放置すると,せっかくのパイプライン処理が台無しになってしまうので,いろいろな対策を盛り込むことになります。

 まず,前の命令の結果を続く命令が利用する場合です。これは,前の命令の計算結果が出るステージから,結果を次に使うステージにバイパスしてやれば,前の命令の完了を待たずに済みます。これをレジスタフォワーディングといいます。

 レジスタフォワーディングでも間に合わない様な場合,残念ながら結果が出るまで次の命令の実行を止めます。この待ち時間をロード遅延といい,ロード遅延を行うために必要なパイプラインを止める仕組みを,インタロックといいます。

 ロード遅延を許さず,必ずパイプラインを止める方法もありますが,もしも後の命令と依存関係のない命令と順番を入れ替えることが出来るなら,パイプラインを止めずに済みます。これを遅延ロードといいます。

 しかし,現実的に命令の入れ替えが可能になることは少なく,その場合は何もしない命令(NOP)を入れて,パイプラインを止めないようにします。これで,インタロックを実装しなくても待ち時間(ロード遅延)を確保出来ます。

 ですが,結局なにもしない命令を入れることは,パイプラインを止めることと同じ事です。なら,インタロックを入れてパイプラインを止めてしまっても結果は同じですし,何もしない命令が入ってこない分プログラムが小さくなるということもあり,こちらの仕組みを使うCPUも多くあります。

 もう1つ,分岐命令ですね。分岐命令は,実行結果によって処理する命令が違ってきますから,分岐の結果が確定するまで次の命令を取り込むことが出来ません。

 当たり前のこととはいえもったいないですから,分岐命令に続く命令が置かれる場所を遅延スロットという特別な場所とし,ここに置かれた命令を,実際の分岐を遅らせて先に実行してしまいます。分岐を遅らせることから,これを遅延分岐といいます。

 こうすると分岐命令があっても命令の実行が行われるようになります。そして,もしこの遅延スロットに入れる命令が,分岐の結果に依存しないような命令だったりしたら,1つ余計に命令が実行出来た事になりますね。

 これを目指してコンパイラは,遅延スロットに置くことの出来る命令を探し出して,入れ替えるように動いてくれます。それでも入れ替えることの出来る命令がなかった場合には,なにもしない命令(NOP)を入れる事になります。

 この仕組みは,CPUの回路規模がほとんど大きくならずに済み,分岐が行われる場合でも余計に1命令実行することが可能になるというメリットがあります。

 なお,遅延スロットは1つとは限りません。2つの場合も3つの場合もありますが,それぞれ実際の分岐が行われるより先に2つもしくは3つの命令が先に実行されるように作ってあります。だから,遅延スロットの数が変わるとプログラムの互換性が損なわれますので,その数は互換性を維持する限りは変更が許されません。

 もう1つ,最近は,ふんだんに使えるようになったトランジスタを利用し,こっと積極的に分岐先を予測する分岐予測と,予測された命令を実行する投機実行が使われるようになりました。予測の精度上げれば遅延分岐よりも効率が良く,遅延分岐のようなわかりにくさもないため,新しいプロセッサでは遅延分岐よりも分岐予測と投機実行が好まれる傾向にあるようです。

Macintosh用語の基礎知識

  • 2007/08/14 16:19
  • カテゴリー:備忘録

 MacBookを買った友人は,この1週間ですっかりMacに慣れたようで,特に不満もなく使っている様子です。

 Macは何も知らなくてもそれなりのことがすぐに出来てしまう敷居の低さがある一方で,より使い込もうと努力する人に対する施しを忘れない豊かさがあります。

 そこで,今回はそのとっかかりとして,主として機能に関係する基礎的な用語を少しだけまとめてみます。

・Finder(ファインダ)
 WindowsのExplorerに相当するもので,ファイルブラウズ機能を持つ独立したシェルアプリケーションである。

・インテルMac(いんてる-まっく)
 インテルのCPUを搭載したMacのこと。これまでのMacはPowerPCをCPUに利用してきたが,突如インテルのCPUにスイッチすることが発表され,現行機種にインテルのCPU以外を搭載する機種は存在しない。
 UNIXを除くクラシカルなOSはCPUのアーキテクチャに強く依存する傾向があり,初期のMacOSも例外ではなかったが,モダンなOSであるMacOSXはもともとポータビリティを意識して開発されたと言われ,秘密裏にインテルCPUで動作するバージョンが開発され続けていたと言われている。

・Core2Duo(こあ-つー-でゅお)
 現行のMacに搭載されるインテルCPUのブランド名。「Core」はPentiumuに続くブランドとしてのCoreを示し,「2」はCoreブランドの最新であるCore2マイクロアーキテクチャを表しており,「Duo」はデュアルコアのプロセッサであることを示している。
 Core2は消費電力と処理能力を両立させる全く新しいマイクロアーキテクチャであり,インテルはこれを「Intel Core Architecture」と呼んでいる。
 クロックを上げるために複雑なCISC命令を内部でRISC風の命令に置き換えてきたのがこれまでのインテルのCPUであるが,Core2ではこのRISC風の命令を複数まとめて別の命令に置き換えるなど,見方を変えるとCISCへの回帰とも取れる仕組みを内蔵して,1クロックあたりの処理能力を向上させている。
 なお,Core2は64ビット拡張がなされた64ビットプロセッサであるため,現行のMacは全機種が64ビット対応になっていることも重要な点である。MacOSXは32ビットと64ビットをユーザーに区別させないため,自然に64ビットへの移行が進んでいくことが予想される。

・Darwin(だーうぃん)
 Mach3とFreeBSDをベースとしたBSD系のUNIXライクなOSで,オープンソースで開発されている。また,MacOSXのカーネルでもある。

・UniversalBinary(ゆにばーさる-ばいなり)
 現行のMacで採用されているインテルのCPUと,これまで使ってきたPowerPCの間には,全く互換性がない。そこでいずれのMacでも動作するアプリケーションとして,それぞれのCPUにあわせたバイナリを両方持つアプリケーションが作成できるようになった。これをUniversalBinaryと呼ぶ。
 MacOSXのアプリケーションの実態は,.appという拡張子を持つフォルダである。このフォルダの中にバイナリやDLL,多言語対応のリソースなどが収められているが,ユーザーはこのフォルダをアプリケーションとしてダブルクリックすれば直ちに実行することが出来る。(この仕組みをバンドルという)
 このフォルダの中に,PowerPCとインテルの両CPUに対応したバイナリを用意しておくことで,どちらのCPUでもネイティブ実行が可能となる。

・Rosetta(ろぜった)
 インテルCPUで互換性を維持する仕組み。PowerPCのバイナリを適当なサイズごとに動的に変換するもので,すべてのコードを一括してリコンパイルするわけでもなく,また1命令ごとにコードを変換するエミュレーションとも異なる。
 Rosettaの完成度は高く,ユーザーはこれまでのPowerPC用のアプリケーションの大部分をそのままインテルMacで実用的に使用することが可能となっており,2GHzのCore2Duoなら,1GHzのPowerPC程度の実行速度であると言われている。
 ただし,アプリケーション以外のドライバなどには対応できず,両方のコードが混在したプロセスを実行することも出来ない。

・iSight(あい-さいと)
 Apple純正の,いわゆるWebカメラ。元々はオートフォーカスにも対応した高画質Webカメラとして別売りのオプションとして販売されていたが,最近のマシンには内蔵されることが多い。

・Bonjour(ぼんじゅーる)
 当初はRendezvousと呼ばれた機能で,設定を行うことなくネットワーク接続を可能とするプロトコル。ネットワークに接続すると自動的にマシン名とIPアドレスの割り当てが行われ,サービスの自動検索が行われる。
 WindowsでいうUPnPに相当する機能であるが,普及の進んだUPnPに比べて機能が低い上,対応機器も少ないため,あまり一般的ではない。

・SuperDrive(すーぱー-どらいぶ)
 DVD-Rを書き込むことの出来る光学ドライブを,AppleではSuperDriveと呼んでいる。かつて2HDのフロッピーディスクを読み書きできるフロッピーディスクドライブをSuperDriveと呼んでいたが,そのことはもう忘れて良い。

・BootCamp(ぶーと-きゃんぷ)
 インテルMacにWindowsXPおよびVistaをインストールするためのキット。MacOSXを残したままWindowsをインストールするパーティションを用意したり,Windows用のドライバCD-ROMを作成するなど,Windowsにインストールに必要な作業を簡単に行う事が出来る。
 現在はβ版であるが,MacOSX10.5のリリースで正式版が出ると言われている。

・FrontRow(ふろんと-ろう)
 最近のMacには標準で付属するリモコン「AppleRemote」によって操作されるアプリケーション。iTunesでの音楽再生,DVDの再生などがAppleRemoteによって可能となる。

・Widget(うぃじぇっと)
 手軽に使えるミニアプリケーションであるが,通常のアプリケーションがC++やObjective-Cで記述,コンパイルされたものであるのに対し,WidgetはDHTMLベースで作成されるものである。

・DashBoard(だっしゅぼーど)
 Widgetを実行する環境を提供するアプリケーション。HTMLのレンダリングエンジンであるWebKitをベースに持つアプリケーションで,F12キーの押下により起動する。

・Expose(えくすぽぜ)
 デスクトップ上のウィンドウを一時的に整理して表示する機能で,その動作は非常になめらかで素早く行われる。
 Exposeは3つの機能を持つ。
 1.すべてのウィンドウをすべて縮小し画面上に整列して表示する。この状態でウィンドウを選択すると,すべてのウィンドウが元の位置,元の大きさに戻され,選択されたものを最前面に表示する。F9で動作。
 2.アクティブなアプリケーションが管理するウィンドウを縮小し画面上に整列して表示する。この状態でウィンドウを選択すると,すべてのウィンドウが元の位置,元の大きさに戻され,選択されたものを最前面に表示する。F10で動作。
 3.すべてのウィンドウを画面の領域外に追い出し,デスクトップを表示する。F11で動作。

・Spotlight(すぽっとらいと)
 ファイル名やファイル属性だけではなく,メタデータを用いデスクトップた検索機能のこと。検索機能そのものはSearchAPIとしてOSによって提供され,iTunesやMailでも利用可能である。
 あらかじめ作成されたインデックスを用いて高速検索が実現しており,インクリメンタルサーチによって候補を絞り込んでいくことが可能となっている。

・HFSX(えいちえふえす-えっくす)
 MacOSXのファイルシステム。階層化されたファイルシステムとして登場したHFSを32ビット化したものがHFSPlusで1998年に実装されたが,これに大文字と小文字のファイル名を区別することや,Spotlight用にメタデータ部の追加,ジャーナリングを行うなど新たに拡張された部分を含む場合,特にHFSXと呼ぶ。

・Quartz(くおーつ)
 MacOSXにおける描画エンジン。前身であるNEXTSTEPのDisplayPostscriptに代わって用意されたもので,PDFをベースにしており,三次ベジェ曲線をプリミティブに持つベクトル型のエンジンである。
 解像度に依存しない,浮動小数点による座標系,アンチエイリアシング,アルファチャネルのサポート,多言語文字描画といった先進的な機能を装備しており,MacOSXの洗練された機能は,これらの意欲的な実装によるところも大きい。

・Cocoa(ここあ)
 MacOSXのネイティブフレームワーク。源流はNEXTSTEPであり,Objective-Cでの記述が前提となる。これに対し,従来のMacOSのAPIを引き継いだフレームワークはCarbonと呼ばれており,こちらはC/C++での記述が可能である。
 


 分かっているようで,実は正確に分かっていないことって多い物です。たかだかこれだけの基礎的な言葉でさえも,真面目に調べないとちゃんと書けないので,なかなか面倒臭い作業になりました。

 従来のMacOSは今で言ういう組み込みプログラムに近いくらい,べったりと記述されていたものですが,MacOSXはさすがにモダンなOSであり,最新のソフトウェア工学を反映した構造をしています。

 だから表面的に見えるある機能が,どのレイヤーのどの部分に実装されているのかを知るためには,かなり正確な資料を見なければなりません。極端な例として,Finderは現在でこそ単独のアプリケーションに過ぎませんが,初期のMacOSにおいてはOSそのものの一部であり,OSの構造を視覚的に表現したものでもありました。

 こうした機能の実装のエレガントさが,なめらかな操作感や素早い動作に繋がっていることも事実であり,iPhoneがMacOSXの構造をそのまま引き継いでいることがどれほどあの製品を洗練された物にしているかは,想像に難くありません。

 MacOSXではそれぞれウィンドウごとに内部の座標を管理しています。そうして構成されたウィンドウを合成してフレームバッファに書き込んでいるので,Exposeでウィンドウを縮小しても,ウィンドウ内部のオブジェクトの位置関係を演算し直す必要はないため,あれだけ軽快な動きを見せ,かつ縮小時もリアルタイムで更新がなされるのです。

 Exposeを単純に真似しようとしても,なかなかうまく真似できないのは,こうしたOSレベルの「美しさ」によるところがあるということ,もっと知っていても良いのかも知れません。

試験に出るショートカット

  • 2007/08/08 18:42
  • カテゴリー:備忘録

 先日の友人のために,MacOSのショートカット一覧を作ることにしました。

 ショートカットはMacを使うには避けて通ることの出来ないものなのですが,逆にこれが使えるようになると,間違いなくMacと脳の距離が縮むように感じることが出来ます。

 歴史的経緯から言うと,Macは生まれたときからマウスとビットマップディスプレイを使ったGUIが実現されていたわけですが,現在に至るまでマウスのボタンは1つだけです。

 これはMacのこだわりというかJobsのこだわりというのが理由だったりしますが,マウスという直感的な入力デバイスにおいて,右と左のボタンを使い分けるために「考える」というプロセスがどうしても許せなかったという話を聞けば,良いか悪いかは別にしてそういう思想なら仕方がないかと思うんじゃないでしょうか。

 1ボタンであらゆる操作が可能なように設計されたMacのGUIですが,このことで2段階,3段階という操作ステップが必要になってしまうことは困るだろうというということで,開発のある段階からショートカットが用意されるようになりました。

 このショートカット,私はすごい発明だと思います。慣れればサクサクと思い通りの処理がこなせるようになりますし,私がまだMacを使ってなかった頃,熟練者のショートカットさばきに目を見張ったことがありました。反面,その手さばきを見ていても何をやっているかがわかりにくく,まるでまじないをしているように見えてしまうところが,Macの敷居の高さに繋がっているように思えます。

 前置きはこのくらいにして,MacOSのFinderの「試験に出るショートカット」です。

・ファイル操作(まず覚えよう)
Cmd + N 新しいウィンドウを開く(New)
Cmd + O ファイルを開く(Open)
Cmd + W ファイルを閉じる
Cmd + S ファイルを保存(上書き)する(Save)
Cmd + I ファイルの情報を見る(Information)
Cmd + D ファイルを複製する(Duplicate)
Cmd + L エイリアスを作る
Cmd + Delete ゴミ箱に入れる
Cmd + Shift + N 新規フォルダの作成
Cmd + Shift + S 新規保存
Cmd + Shift + Delete ゴミ箱を空にする

・編集(まず覚えよう)
Cmd + A 全選択(All)
Cmd + X カット
Cmd + C コピー(Copy)
Cmd + V ペースト
Cmd + Z アンドゥ

・表示(次に覚えよう)
Cmd + 1 アイコン表示に切り替える
Cmd + 2 リスト表示に切り替える
Cmd + 3 カラム表示に切り替える
Cmd + J 表示オプションを表示

・その他(次に覚えよう)
Cmd + P 印刷する(Print)
Cmd + F 検索する(Find)
Cmd + K サーバーに接続


 FInderのショートカットとしてはほとんど全部なわけですが,大半が他のアプリケーションでも共通のショートカットに割り当てられているので,ここで覚えたことは無駄にはなりません。覚え直しも必要ありません。(このあたりがWindowsとは違うところ)

 右利きの人なら,左手の親指を常にコマンドキーに置きつつ,他の指を駆使してショートカットを操ります。やってみれば分かりますが,頻繁に使うものは,左手の指で押せるキーに割り当てられています。こうすることで,マウスを持つ右手をいちいちマウスから放すことなく,ショートカットを素早く入力できるのです。

 とりあえずこれだけ覚えれば,もう一人前のマカーです。精進して下さい>友人

やらんにゃいかんこと

  • 2006/08/18 01:21
  • カテゴリー:備忘録

 幸いなことに,頭がさえているんですね,今は。やりたいことを次々に思いつくとても幸せな時ではあるのですが,こんな時に限って時間がない。まとまった時間が取れない。

 ということで,備忘録です。

・IC-R5のメモリをPCで管理
 IC-R5というマニアックなレシーバがあるのですが,キーが少ない機種なのでメモリの使いこなしが鍵を握ります。その割に液晶表示が貧弱なので,記憶に頼るしかないと事がつらいです。
 そこでメモリの管理をPCで行えば,万が一忘れていてもPCを見れば思い出せます。
 純正のケーブルとソフト使えば即解決なのですが,そのためには5000円の出費が必要で,買いに行く手間もかかります。でもケーブルは自作,ソフトはフリーウェアを使えば決着します。
 昔から基本的にはケーブルは自分で作るもの,と決めていた私にとっては,当然やるべきテーマだと思っていて,そうなるとやはり欲しいのは時間です。作業見積もりは2時間。

・EF500-901の製作
 読者の評判が悪いので模型の話は最近取り上げませんが,きちんとやってますよ,鉄道模型。
 ワールド工芸が5月に限定販売として最強の機関車EF500-901のキット化を予告し,予約していたのですがそれがようやく10日程前に届き,こつこつ作ってます。
 おかげで塗装を残すのみとなっているのですが,塗装も結構まとまった時間がかかる上,特に湿度に左右される世界なので,なかなか決行できません。作業見積もりは4時間。

・ES2の修理と調整
 ペンタックスのES2の調子が悪くなってしまったことは以前書きましたが,実はこの問題が全然解決していません。メモリブロックを交換しても時々露出計が動作しなくなることがあって,摺動抵抗を分解清掃しましたがそれでも改善されず,困っています。
 ここの確認もさることながら,実は露出計が1/3段ほど狂っていることがわかったので,ここを調整する必要があります。ただ,単に露出計をあわせればいいかというとそうではなく,ES2の調整マニュアルを見てみると,開放測光時の高速側と低速側のオートのシャッター速度,絞り込み測光時のオートのシャッター速度,そして露出計の指示,バッテリチェックの指示の,合計6項目を順番にあわせないといかんのだそうです。
 これってとても手間なんですね。でもこのままでは使えないので,やらないわけにはいきません。作業見積もりは8時間。

・PC110の復活
 実家に置いてあるのですが,PC110というIBMの小型パソコンを私は持っていて,一時期Windows95を導入して生活マシンとして活躍していた時期があります。
 結局VAIO-Uを経てiBookG4に移行した今は必要がなくなっていますが,この時代においてもPC110というのは魅力の薄れない,不思議なマシンです。
 数年経過しているうちにもマニアが頑張っていたようで,1GBのマイクロドライブを内蔵したり,LinuxやWindows2000を導入したりと,なかなか面白そうな感じです。
 33.6kのモデムや24MBのメモリ増設など,私もかなりはまりこんだだけに,やっぱりついて行きたいですよね。
 実家に戻るのは9月末。この時までにプランを立てておきたい所です。作業見積もりは6時間。

・バックロードホーンの設計
 昨年,学研の大人の科学でスピーカを自作するのがありましたが,私も2冊購入して製作は済ませてあります。
 そうなるとエンクロージャをどうするかなのですが,せっかく小さいスピーカユニットで,強力にドライブすると力強く動きそうな感じですから,ここは超小型のバックロードホーンを作ろうと,設計プランまでは考えてあります。
 後は細かい設計を残すのみなのですが,これがなかなか先に進みません。
 なんで今こんな話をするかと言えば,近所の東急ハンズが閉店した今,9月末の実家に帰省したときに大きなホームセンターでカッティングまでやってもらおうと考えているからです。作業見積もりは2時間。

・ワンセグ用アンテナの手配
 先日購入したカーナビにはワンセグの受信機能がありますが,車内ではそれでも外部アンテナが欲しいところです。いつでも手に入ると油断していたら,実は品薄のようです。
 先日,楽天のポイントを使ってやろうと注文したら,在庫切れ。最初から在庫などないのに注文だけ受ける業者じゃないのかと勘ぐりながらも,お盆休みが明けて納期の回答を待ってる状態です。頼むよ三洋さん・・・

・プジョー306のタッチアップペイント
 数年前に購入した,プジョー306の純正タッチアップペイントが,もうガビガビになってることでしょう。使いにくい容器に入れたままにせず,小瓶に移し替えてシンナーで希釈し復活させないとまずいなあと思っている(今新品が欲しいといっても買えないかも知れませんしね)のですが,これもなかなか取りかかれません。作業見積もりは30分。

 はあ・・・頑張らねば。

ページ移動

  • ページ
  • 1
  • 2
  • 3
  • 4
  • 5

ユーティリティ

2026年01月

- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

過去ログ

Feed