OS自作入門─2日目&3日目

今日のタイトルは、「アセンブラ学習とMakefile入門」
ほうほうなるほどね。
1日目のアセンブラの詳細解説とMakefileの作り方でも書いてるのかな。


へ〜アセンブラってCPUのレジスタを直接指定してプログラミング出来るんだね。
なるほど、一番ハードウェアレベルに近いって言われる理由が分かった気がする。
ほえほえ。。。んで、ここで気になったんだけどCPUのキャッシュってレジスタとは違うのかね。
というわけで、キャッシュをググってみた。

メモリシステムの高速化技法の1つであるキャッシング(caching)に使われるメモリ。データをやり取りする2つのデバイス間に速度差が存在すると、遅いほうのデバイスボトルネックになり、速いほうのデバイスが本来の性能を発揮できない。この速度差を緩衝するのがキャッシュメモリの役目である。一般的に、メインメモリに使われているDRAMのスピードはCPUに比べてかなり遅く、CPUの命令実行速度を下げる原因となっている。この問題を解決するために、CPUとメインメモリの間にキャッシュメモリと呼ばれる高速/小容量のメモリを配置する。そして、CPUがアクセスする頻度の高いコード/データをなるべくキャッシュメモリに格納しておくよう、外部回路でコントロールする。たとえばCPUがメインメモリのあるアドレスからデータを読み込むとき、キャッシュにそのデータを蓄えておく。その後CPUが再び同じアドレスからデータを読み込もうとしたら、メインメモリの代わりにキャッシュからデータを供給する。こうすれば、CPUは低速なメインメモリに待たされることなく、必要なデータを読み込める。また書き込みの場合は、ライトスルーやライトバックといったアルゴリズムによりキャッシュの性能は変化する。 メモリシステムの高速化のために、キャッシュメモリが2段、3段と重ねて実装されることがある。この場合、CPUに近い位置にあるほうから1次キャッシュ、2次キャッシュ…と呼ばれる。486以降のx86 CPUは1K〜16Kbytes程度の1次キャッシュをCPU内部に内蔵している。また現在のPC互換機では、高速SRAMを用いて64K〜1Mbytes程度の2次キャッシュを実装していることが多い。この場合のCPUに内蔵されているキャッシュは内部キャッシュ、CPUの外部に実装されるのは外部キャッシュと呼ばれる。

なるほどね。
まぁ少し考えたらレジスタがキャッシュなわけないやん。。。いえ、私がバカなので分からんかったけど。


次は、メモリ番地の指定方法か。。。なんかC言語のポインタと同じ話してるな。
実際やってることは一緒なんだろうけど。こっちの説明の方が分かりやすい気がするな。


おぉ〜〜BIOSって「basic input output system」の略だったんだ。。。知らんかった。
もともとはOS開発者のための基本的な関数の集まりだったらしい。
PCのブート順序とかなんかその辺の適当な設定とかするものだと思ってたよ。
ふむふむ。。BIOSってチップの中にメモリとかを持ってるわけじゃなくて、起動時にメモリに展開されるみたいだね。
本に直接そう書いてあるわけじゃないんだけど、BIOSが占有してるメモリ領域があるらしい。


読み進めると、今までバッチファイルを作成していたのをMakefileで一括して記述したりしてる。
まぁこの変はそりゃそうだよな〜って感じだ。だってバッチファイルって数が増えるといろいろと面倒だし。
でも最近私はAntに頼っているのでmakeってそんなのもあったな状態ってのは秘密。