質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

1回答

1481閲覧

非連続メモリ割り当てと固定マップ用リニアアドレスの違い

kazuyakazuya

総合スコア193

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/05/08 21:59

Linuxでは高位物理アドレスを直接マッピングできるだけのリニアアドレスがないので(ない場合)
最後の128MBを使って一時的にマッピングできない部分をマッピングするようです。

カーネル空間のリニアアドレス0xc0000000を物理アドレス0x00000000へ線型にマッピングする。

この際、高位アドレスへマッピングする方法として

・永続的カーネルマッピング
・一時的カーネルマッピング
・非連続メモリ割り当て

といったものがあるようですが

イメージ説明

この固定マップ用リニアアドレスとは何ですか?
非連続メモリ割り当てと何が違うんですか?

リンク内容

>固定用マップリニアアドレスでは通常のマッピングよりも効率的に物理メモリを参照できる。
通常のマッピングでは固定用マップリニアアドレスに比べると一回余分なメモリ参照が必要。

私にも理解できるようにわかりやすく教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/05/09 00:33

理解できないから教えろ、と丸投げされても、もっと勉強しましょう、としかいいようがないですねー
kazuyakazuya

2020/05/09 00:48

固定マップ用リニアアドレスという用語自体調べても出てきません 少なくても詳解linuxという本には"固定マップ用リニアアドレス"という用語で出てきています。 では言い方を変えて・・・ どうやって調べたら 詳解Linuxで出てくる"固定マップ用リニアアドレス"の意味がわかるんですか? 一般的に"固定マップ用リニアアドレス"という言い方はしないのでしょうか?
dodox86

2020/05/09 03:18 編集

> 一般的に"固定マップ用リニアアドレス"という言い方はしないのでしょうか? 一般的に、と言いますか、この話の文脈で言う"固定マップ用リニアアドレス(Fix Mapped Linear Addresses)"とはLinuxカーネルのメモリ管理機構においてあえて名付けた単語だと思います。話の前後の関係もあるでしょうから、リファレンスや説明、カーネルのソースを読み込まないと理解は難しいかもしれません。 https://www.kernel.org/doc/gorman/html/understand/understand012.html https://www.halolinux.us/kernel-reference/fixmapped-linear-addresses.html (理解できるように説明するのは到底私には無理なので、コメントのみです)
kazuyakazuya

2020/05/10 06:56

わかりました。 もうちょっと自分で調べてみます・・・
guest

回答1

0

固定用マップリニアアドレスでは通常のマッピングよりも効率的に物理メモリを参照できる。

通常のマッピングでは固定用マップリニアアドレスに比べると一回余分なメモリ参照が必要。

概念だけ説明すると、
[1, 2, 3] という連続するデータを表現する場合。addr=0から読み取るとして

addr0123456789
data123xxxxxxx

データがそのまま 1, 2, 3 になる。

addr0123456789
data579xx1x2x3

アドレス 5, 7, 9 を参照し 1, 2, 3 という値を得る、という感じの違いです。

x の所は、他のデータが利用します。

投稿2020/05/09 01:21

編集2020/05/10 09:49
teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyakazuya

2020/05/10 06:53

回答ありがとうございます。 すみません なぜこれで一回分余計なメモリ参照をしなくていいのかがよくわかりません。 ここでいう通常のマッピングとは固定メモリマップ以外の方法ですよね。
teamikl

2020/05/10 09:45

引用元リンクの更に元の引用は、Linux Kernel 「2.5.6 固定マップ用リニアアドレス」だと思うのですが > カーネルは値の変わらないポインタ変数の代わりに固定マップ用リニアアドレスを使用します。(略) > 固定マップ用リニアアドレスは、ポインタ変数よりも効率的に利用できます。 > ポインタ変数の関節参照は、固定のアドレスに対する直接参照よりも一回分余分なメモリ参照が必要です。 ”効率的”の理由のひとつは、直接参照が可能な点です。(メモリの参照回数を数えて見て下さい) 実際にも offset 計算のみで物理アドレスを求めることができます。 通常のマッピング(といっても色々ありますが、原文の意図するところではポインタ変数)関節参照となり、 これが「一回分余分なメモリ参照」です。 メモリのマッピングに関しては、実際にはページング等も絡みます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問