x86_64

gccのインラインアセンブラ内からcのラベルにgotoでジャンプ

最近のgccはインラインアセンブラ内からcのgotoラベルに飛べる仕組みがあるのでそれのメモです。 ドキュメントはUsing the GNU Compiler Collection (GCC): Extended AsmとUsing the GNU Compiler Collection (GCC): Extended Asmです。たしかLKMLに送られて…

Linux: pud_alloc()周りのメモ

前回はPGD周りをみたので今回はPUD周りを。PUDを作るのはpuc_alloc()でこれはいくつかの呼び出しパターンがあるのだけど(lxrでIdentifier Searchした結果からして)、一番基本であろうページフォルトの時で調べる。 ページフォルト発生時は__handle_mm_faul…

Linux x86_64のPaging:Page Global Directory辺りの扱いを見てみる

Linux(x86_64)のpagingをちゃんと理解したいな〜ということで。見ているのはLinuxカーネル3.15。 まずはx86_64アーキテクチャのページングの仕組みとLinuxでの対応(どんな型で表すのか)を調べる。 | name | bits | c type | |----------- ----|-------|-…

linux:x86_64のpageing_init()での最後の処理、zone_sizes_init()を読む。

paging_init()の続きで残りの2行を。。 node_clear_state()は特に見るほどではないのでzone_sizes_init()を見る。 650 void __init paging_init(void) 651 { 652 sparse_memory_present_with_active_regions(MAX_NUMNODES); 653 sparse_init(); 654 655 /* 6…

linux:sparse_init()で細かいメモリ領域の断片達を管理できるように

paging_init()の2行目、sparse_init()のところを読む。 sparse_init()の関数にあるコメントを見るとやろうとしていることはなんとなくわかる。 ここで言っているaccumulated non-linear sectionsというのは前回までの記事で見てきた部分で、e820のメモリマッ…

linux:sparse_init()の前にalloc_usemap_and_memmap()を見ておく

paging_init()の2行目で実行するsparse_init()を見る前にここで使っている関数を先に軽く見ておく。 alloc_usemap_and_memmap()はこのようなI/Fの関数。 引数の最後のdataはalloc_func()の一番目の引数として使う。 469 static void __init alloc_usemap_and…

linux:x86_64のpaging_init()を読み進める。

今日はx86_64のpaging_init()から呼ばれるsparse_memory_present_with_active_regions()とそこで使われるmemory_present()のあたりを読む。 ディレクトリ的にはarch/x86/以下ではなくてmm/になる。 まずはsparse_memory_present_with_active_regions()を。 …

linux:x86_64のメモリ管理のうちe820のメモリマップを扱っている部分読む

x86_64のページングを設定している部分を読もうと思って読み始めて前回の続きになるsparse_memory_present_with_active_regions()を読もうと思ったんだけど、この関数で使う変数(struct memblockのメンバ変数のmemory(型はstruct memblock_type))を調べた…

linux:x86_64のページング初期化処理周りを読んでみる

Linuxカーネルの解説本は何種類か出版されているけど大概はx86_32が対象なんですよね。ということでx86_32を基本として大まかな内容は解説本を参考にしつつ、実際のx86_64の処理はコードを読む必要があるのです。。。 ということでx86_64の場合のページング…

φ(.. )メモシテオコウ x86_64のセグメントディスクリプタ(主にGDTで確認)

x86_64をちゃんと覚えようということで資料はIntel®のSDM(使ったのはIntel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual Volume 3 (3A, 3B & 3C):System Programming Guide)とLinuxのカーネルを見つつ。見ているカーネルのバージョンはv3.9.1…