FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

「30日でできる!OS自作入門」を読み始めた (8. 9日目前半)

遅まきながら、「30日でできるOS自作入門」を読み始めた。

30日でできる! OS自作入門

30日でできる! OS自作入門

9日目はメモリ管理について。まずはメモリのサイズを取得してみる。 これは、WriteしてReadすることでメモリ領域かどうかを判定するプログラムを使用する。

このとき、コンパイラの最適化によって、Write / Read のコードが消えてしまうというストーリーなんだけど、GCCだと消えなかったぞ? 別に問題なく動いてしまった。 っていうか、最適化によるコード化消えてしまう問題を回避するんだったら、アセンブラをわざわざ書く必要もなくて、volatileを付けるだけでOKではないかな?

unsigned int memtest_sub(unsigned int start, unsigned int end)
{
  unsigned int i, old, pat0 = 0xaa55aa55, pat1 = 0x55aa55aa;
  volatile unsigned int *p;
  for (i = start; i <= end; i += 0x1000) {
    p = (volatile unsigned int *)i;
    old = *p;
    *p = pat0;
    *p ^= 0xffffffff;
    if (*p != pat1) {
    not_memory:
      *p = old;
      break;
    }
    *p ^= 0xffffffff;
    if (*p != pat0) {
      goto not_memory;
    }
    *p = old;
  }
  return i;
}

まあもとも消えなかったわけだから、volatile を付けようが付けまいが結果は変わらなかったのだけれども...

念のため、QEMUは現在はデフォルトのメモリサイズが128MBになっているらしい。オプションで変更できるので32MBに変更して、メモリサイズが変わるかやってみた。

run: $(TARGET).img
        qemu-system-i386 -m 32M -fda $^
f:id:msyksphinz:20180315005659p:plain
図. QEMUのメモリサイズを変更して計測してみる。

ちゃんとメモリサイズの変更を認識できた。よしよし。

関連記事