More Related Content
PDF
PDF
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17) PDF
SpectreとMeltdown:最近のCPUの深い話 PDF
PDF
PDF
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone) PDF
PDF
What's hot
PDF
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring) PDF
ARM Trusted FirmwareのBL31を単体で使う! PPTX
PDF
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話 PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~ PDF
ストリーム処理を支えるキューイングシステムの選び方 PDF
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021 PDF
PPTX
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料) PDF
PPTX
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring... PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例 PDF
PDF
PDF
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management) PPTX
PDF
Viewers also liked
PDF
Introduce Yocto Project Japan and What want to make using Yocto Project PPTX
Linux kernelのbspとupstream PDF
Yocto Project ハンズオン プレゼン用資料 PPTX
PDF
Yocto Project ハンズオン / 参加者用資料 PPTX
PPTX
YoctoをつかったDistroの作り方とハマり方 PDF
Introduce Toaster (Toasterのご紹介) More from wata2ki
PPTX
PPTX
PDF
PDF
PPTX
PPTX
PPTX
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の資料はここに集約されています。ユーザ登録をしてダウンロードで
きないものもありますが、困ったときはまずここで調べてください