c⌒っ(*´∀)っφメモメモ armのページング周り

今日は池袋バイナリ勉強会(24)でarmのページング周りを調べていたのでいくつかメモ。
やることはわかっても、その意味まではまだ理解できてない部分もあるのでマニュアルを読まねば。

最初にDomain access controlのところ。
まず基本となるのがDomain Access Control Register c3。これは32bitsの大きさで16個のドメイン(具体的にどう使うかはまだ不明。。。)に対するアクセス制御を行うためのもの。1ドメインあたり2bitsでマニュアルによるとこんな感じの設定。

value 内容
00 常にdomain faultを発生させる
01 section or page descriptorのパーミッションビットでアクセスチェックを行う
10 予約済み
11 アクセスチェックをしないのでparmission faultが出ることもない

ここでドメイン毎に設定した内容がどこで使われるかというと、First-level descriptorとSecond-level descriptor。この辺もsmall pageとかlarge pageがあるので、ここではsmall pageで見ていく。

First-level descriptorはsmallだと Fine page table descriptor。これのbit5:8の4ビットがアクセス制御に使用するところで、これはどのドメインを使用するかってことだと思います。
Domain Access Control Register c3で16個のドメインを設定しているので、この中の一つを選択する感じですね。

Second-level descriptorはsmall pageの場合、bit4:5、bit6:7、bit8:9、bit10:11の2bit×4個の設定となっています。4個な理由は???
access permissionは4種類の値にさらにControl Register c1 bits [9:8]の値の組み合わせとなっている。
c1の8ビット目はSビットと呼ばれていて、MMU protection systemによって変更される。9ビット目はRビットと呼ばれていてROM protection systemによって変更される。
このSビットとRビットにAccess permissionビットの組み合わせで7通りの組み合わせになっている。

その次はページング関連の細かいめも。
MMUを有効にするのはControl bit functions register c1のMビット。有効にする場合は1にする。
c1のAビットはアクセスしようとしたアドレスがword-alignedで無い場合にAlignment faultを発生させるかどうかを設定する。マニュアルのどこかのページでページングの設定に関する場所として、A、M、S、Rbitは設定必要そうなことが書いてあった記憶が。

githubはこちら。。