No.1ベストアンサー
- 回答日時:
Intelの命令セットでは、メモリにアクセスする場合にはセグメントセレクタ(16bitであればセグメントレジスタ)を用いて、論理アドレス(仮想アドレス)を物理アドレスに変換します。
16bitモードで動いている場合には、セグメントレジスタ(16bit)の値に16を乗じた値を論理アドレス(16bit)に加算して、物理アドレスを決定します。但し、計算結果が21bitになってしまう場合で、A20GATEが閉じている場合には、計算されたアドレスの最上位ビットを無視するという例外があります。
32bit/64bitの場合では、セグメントセレクタの値を用いてディスクリプタテーブルと呼ばれるテーブルを引き、それを用いて論理アドレスを丁度良く変換してやると物理アドレスになります。
この質問の場合でも、ESで参照しているので、論理アドレスになる筈です。
尚、この命令の実行の際にページフォールトが起きる場合、
ins命令発行→PF→OSが例外をキャッチし、PFを解消する→ins命令続行
となります。
# 例外をキャッチしない場合は、概ね
# PFが発生
# →OSがPFをキャッチしなかった場合はDF(Double Fault)が発生
# →OSがDFをキャッチしなければTF(Triple Fault)が発生してマシンが停止する
# という動作になったような気がします。調べるのも実験するのも面倒臭いので確認はしていませんがご愛嬌。
この回答への補足
ありがとうございます。
実は古いLinuxのソースを読んでまして妙な気がしたのです。
linux0.12のswap.cのtry_to_swap_outにて、ページの物理アドレスを取得してファイルに書き込んでいるのですが、
この時すでにページングはONですし、スワップアウトはもちろんユーザエリアのページが対象です。
それで調査を続けますとlinuxはinsw,outswを使ってディスクデータの読み書きを行っているのを見つけました。
しかし、何度確認しても物理アドレスに対してinsw,outswしているのです。
もしもカーネルエリアのページならストレートマップで物理アドレスでも仮想アドレスでも同じ値ということも
あり得るのでしょうけれど、そうではなさそうだと感じています。
それでインテルのマニュアルみてもinswのアドレスについて特別なことは書いてないので
物理アドレスではないのかなぁと思い質問させて頂きました。
ES:DIが論理アドレスだとしますと、ますますlinuxのコードがわからなくなってきましたσ(^_^;)
あれから調べてES:DIが論理アドレスだということがわかりました。
Linux0.12のカーネルが単に物理メモリをリニアマップしてただけでした。
どうもありがとうございました。
No.2
- 回答日時:
ページングをしてる状況で「物理アドレスにデータを置く」って, 何のメリットがあるの?
この回答への補足
ありがとうございます。
下のかたの補足にも書いたのですが、ページング中にページイン、ページアウト処理するのは楽なのかなぁ
という気がしますがよくわかりません。
linuxではページテーブルエントリを壊してからページをページアウトしてます。
ですのでページアウト対象のページはもはや物理アドレスでしかさわれない気もするのですが、
ins,outswが物理アドレス対象でないとするとわけがわからなくなりますσ(^_^;)し、
期待する情報は全然見つかりません(~_~;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
VB.NETのテキストボック...
-
VB.NET でのLaod/unLoad につ...
-
vc++2005エラーメッセージ
-
テキストボックスからフォーカ...
-
フォームを開く時のイベント処理
-
vba メモリーリーク
-
メディアンフィルタ
-
コンピュータ言語paythonのエデ...
-
C言語の関数の実引数と仮引数の...
-
VBのレコードセットを閉じない...
-
項目数は英語で
-
一部の文字のみ文字化けします
-
word
-
数式中の文字をCambria Math以...
-
PowerPoint SmartArtの箇条書...
-
illustratorとExcelは連携出来...
-
バイナリファイルの編集
-
Illustratorテキストエリアへ塗...
-
画像からテキストデータを正確...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
『μg』の読み方と意味。
-
NumericUpDownの数値を選択済み...
-
VB.NET でのLaod/unLoad につ...
-
テキストボックスからフォーカ...
-
VB.NETのテキストボック...
-
項目数は英語で
-
mailの送信音がしなくなったの...
-
シリアル通信について
-
vba メモリーリーク
-
CPUを2個搭載できるマザーボー...
-
フォームを開く時のイベント処理
-
TextBoxにカーソルがあるかない...
-
一部の文字のみ文字化けします
-
スマホが水に濡れてしまい、中...
-
C++の例外処理
-
PDFの余白、黄ばみ除去等の加工...
-
ob_start()した後、ob_flush()...
-
ヒント表示について
-
シリアルフラッシュメモリをな...
おすすめ情報