More Related Content
PDF
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17) PDF
PPTX
PDF
About GStreamer 1.0 application development for beginners PDF
PDF
PDF
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38) PDF
What's hot
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~ PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例 PDF
ARM CPUにおけるSIMDを用いた高速計算入門 PDF
PDF
OSC2011 Tokyo/Fall 濃いバナ(virtio) PDF
【Unite Tokyo 2019】Understanding C# Struct All Things PDF
PPT
PDF
Dockerイメージの理解とコンテナのライフサイクル PDF
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜 PPTX
PDF
PDF
PDF
GPU仮想化最前線 - KVMGTとvirtio-gpu - PPTX
PDF
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management) PDF
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説 PPTX
PDF
組み込み関数(intrinsic)によるSIMD入門 PDF
Viewers also liked
PPTX
PPTX
YoctoをつかったDistroの作り方とハマり方 PDF
Yocto Project ハンズオン プレゼン用資料 PDF
Yocto Project ハンズオン / 参加者用資料 PDF
Introduce Toaster (Toasterのご紹介) PPTX
Linux kernelのbspとupstream PPTX
PDF
Introduce Yocto Project Japan and What want to make using Yocto Project ARM LinuxのMMUはわかりにくい
- 1.
- 2.
- 3.
MMUとは?
• MMU(Memory ManagementUnit)とは?
• CPUのメモリ管理を行うハードウェア
• コンピュータサイエンスの教科書では、OS(Operating System)の仮想記憶
を実現するための仕組みとして紹介される
• 全てのユーザプログラムに固有のアドレス空間が与えられる
• 他のプログラムから隔離・保護される
VA0-00
VA0-01
VA0-02
VA0-03
VA0-04
VA0-05
VA0-06
PA-00
PA-01
PA-02
PA-03
PA-04
PA-05
PA-06
VA1-00
VA1-01
VA1-02
VA1-03
VA1-04
VA1-05
VA1-06
httpd
仮想アドレス 仮想アドレス
smbd
物理アドレス
- 4.
- 5.
ARMのMMU
• ARMのMMUは何ができるのか?
• アドレス変換
•仮想記憶のためのアドレス変換
• プロセスモデルを実現するために必要
• メモリアクセス許可
• データ領域の実行をできなくしたり、ユーザーモードではアクセスできな
くしたりできる
• 不正なメモリアクセスをブロックすることで、アプリケーションに触らせたく
ないハードウェアレジスタを見えなくする
• 攻撃されて任意のデータをメモリに流し込まれても、データ領域は実行属性を
付けないことで実行できなくする
• メモリ属性の指定
• キャッシュの有効・無効
• コード領域やデータ領域はキャッシュ有効にしてアクセス速度を速くする
• ハードウェアのレジスタは、ハードウェアの状態を直接見ないといけないので
キャッシュ無効
- 6.
ARMのMMU
• ARMのMMUは何ができるのか?
• アドレス変換,メモリアクセス許可, メモリ属性の指定
• これらはページテーブルに記録される
この設定はアクセス不許可を意味する
1ページ4KByteの時の設定
(さらにLv2テーブルをルックアップする)
0x00000000-0x000FFFFF用仮想アドレス
0x00100000
Lv1ページテーブル
0x00100000-0x001FFFFF用
0x00200000-0x002FFFFF用
0xFFF00000-0xFFFFFFFF用
・
・
・
Lv1ページテーブルは
1MByte単位のLUTに
なっている
1ページ1MByteの時の設定
1ページ16MByteの時の設定
(使われているのを見たことがない)
Lv1ページテーブルのフォーマット
- 7.
- 8.
- 9.
- 10.
犯人はこいつ
• Linuxカーネルソースのarch/arm/mmの下に犯人発見
ENDPROC(cpu_v7_set_pte_ext)
/*
* Memoryregion attributes with SCTLR.TRE=1
* n = TEX[0],C,B
* TR = PRRR[2n+1:2n] - memory type
* IR = NMRR[2n+1:2n] - inner cacheable property
* OR = NMRR[2n+17:2n+16] - outer cacheable property
* n TR IR OR
* UNCACHED 000 00
* BUFFERABLE 001 10 00 00
* WRITETHROUGH 010 10 10 10
* WRITEBACK 011 10 11 11
* reserved 110
* WRITEALLOC 111 10 01 01
* DEV_SHARED 100 01
* DEV_NONSHARED100 01
* DEV_WC 001 10
* DEV_CACHED 011 10
*/
.equ PRRR, 0xff0a81a8
.equ NMRR, 0xc0e040e0
SCTLR.TRE=1にすることで、PRRRとNMRRレジスタを使って設定を上書きできることが判明
Kernel 4.9の場合、WRITEALLOC設定なのにL1はライトバックライトアロケート、L2がライト
バックのみになっている
0xc
11 00
0x4
01 00
- 11.
まとめ
• ARM Linuxのキャッシュ設定を調べていてぶつかった謎
•キャッシュ設定はページテーブルでコントロールしている
• ところが、ページテーブルの設定と挙動が違う
• カーネルのARM依存部分を調査した結果、ページテーブル設定をさらに
レジスタ設定で変更できることが判明
• ちなみにこの部分、カーネルのバージョンアップでたまに設定が変わりま
す。。。
• 参考資料
• http://infocenter.arm.com/help/index.jsp
• ARMの資料はここに集約されています。ユーザ登録をしてダウンロードで
きないものもありますが、困ったときはまずここで調べてください