問題タブ [memory-segmentation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - リアル モード メモリ アドレッシングにおけるセグメントとオフセットとは何ですか?
メモリアドレッシングについて読んでいます。セグメント オフセットについて読み、次に記述子オフセットについて読みました。リアル モードで正確なアドレスを計算する方法を知っています。これはすべて問題ありませんが、正確にオフセットが何であるかを理解できませんか? 私が読んだところはどこでも:
リアル モードでは、レジスタは 16 ビットしかないため、最大 64k までしかアドレス指定できません。より多くのメモリのアドレス指定を可能にするために、アドレスは から計算され
segment * 16 + offset
ます。
ここで、最初の行を理解できます。16 ビットなので、最大 2^16 = 64k までアドレス指定できます。
しかし、この2行目は何ですか?セグメントは何を表していますか? なぜそれを16倍するのですか?オフセットを追加する理由。このオフセットが何であるか理解できませんか?誰か私に説明したり、これのリンクを教えてもらえますか?
memory-management - 線形アドレスと物理アドレス
リニアアドレスとは?物理アドレスとどう違うのですか?
protection - 8086セグメントセレクター
「ユーザースペース」に次のようなことをさせないための「スーパーバイザー」ビットがいくつかあります。movCS、200h?
どんな保護がありますか?
ありがとう
linux-kernel - Linux on x86がユーザープロセスとカーネルに異なるセグメントを使用するのはなぜですか?
つまり、Linuxはx86プロセッサに4つのデフォルトセグメント(カーネルコード、カーネルデータ、ユーザーコード、ユーザーデータ)を使用しますが、それらはすべて同じベースと制限(0x00000000と0xfffff)を持ち、各セグメントが同じにマップされることを意味します線形アドレスのセット。
これを考えると、なぜユーザー/カーネルセグメントさえあるのでしょうか?コードとデータに別々のセグメントが必要な理由は理解していますが(x86プロセッサがcsレジスタとdsレジスタを処理する方法のため)、単一のコードセグメントと単一のデータセグメントがないのはなぜですか?メモリ保護はページングによって行われ、ユーザーセグメントとカーネルセグメントはとにかく同じ線形アドレスにマップされます。
winapi - Win32 の FS レジスタ
Win32 で SEH がどのように実装されているかを読んでいて、FS registerと呼ばれるものに出会いました。Google で良いものを見つけることができませんでした (ほとんどの場合、間違ったものを検索している可能性があります)。それで、誰がそれが何であるかを説明できますか?
x86 - ユーザーモードでのx86セグメンテーション
プログラムをユーザーモードで実行しているときに、x86でセグメント化されたメモリを使用することは可能ですか?もしそうなら、これを容易にするツール(例えばC / C ++コンパイラ)はありますか?これは本当に強力なメカニズムのようで、プログラム内でプログラムを実行できます。
Chromiumがネイティブクライアントのサンドボックス化にセグメンテーションを使用していると聞きましたが、その方法、またはアセンブリまたは組み込みのコンパイラサポートを使用しているかどうかはわかりません。
assembly - MOV AX,CS、MOV DS,AXのコンセプト
誰かがこれらの 3 つの命令の機能を説明できますか?
コード、データ、および余分なセグメントが理論上何であるかはわかっていますが、次のとおりです。
それらはこのプログラムでどのように実装されていますか?
セグメント全体が別のセグメントに移動したのはなぜですか? (
MOV AX,CS
とMOV DS,AX
)
これらの 2 つの命令は実際に何をしますか?
ハイライトされた 3 つの命令を除いて、このコードの他のすべての命令の意味を理解できます。
(プログラムは正常に動作します。0 がヒットするまで入力を受け入れます。amov ah,01h
と anがありint 21h
、比較al
して、そうで'0'
あればal
に'0'
ジャンプしlast
、そうでない場合は にジャンプしback
ます。)
(編集者注:.com
プログラムはオフセットでロードされ100h
、すべてのセグメント レジスタは互いに等しく設定されます 。これはプログラムのように見えるため、org 1000h
おそらくタイプミスです。このプログラムは絶対アドレスを使用せず、相対アドレスのみを使用するため、壊れません。ジャンプします。)org 100h
.com
memory - セグメンテーションを使用した 32 ビット x86 用の 64 テラバイトの仮想メモリ: どうやって?
Intel x86 メモリ モデルには、セグメンテーションとページングがあります。システムが最大 64 テラバイトの仮想メモリに対応できるとはどういう意味ですか? 私の理解では、アドレス指定できるのは 4GB の仮想メモリのみです。ここのギャップは何ですか?これはすべて 32 ビット プロセッサのコンテキストにあります。
数学は次のとおりです。
2^13 (セグメントセレクター) * 2 (LDT または GDT) * 2^32 = 2^46 = 64 テラバイト。これは、文献では総仮想メモリと呼ばれています。彼らはそれを間違って仮想メモリと呼んでいますか? 私を混乱させているのは、プロセッサ自体に 32 ビットのアドレス行しかないことです。
それとも、これが (すべてのプロセスにわたって) 合計で割り当てることができる仮想メモリの合計であると言おうとしていますか?
assembly - What is a paragraph (when referring to memory)
I feel silly for asking something that seems like it should be so easy to look up, but as you might guess, searching for paragraph gets a lot results that have nothing to do with what I want to know.
I've been learning assembly these past few days (writing a tiny bootloader, that sort of practice stuff) and I've seen a few references to chunks of memory called a paragraph. I have a distant memory that a paragraph is two words, but I'm really not sure. What exactly is a paragraph and what is its significance?
operating-system - 仮想メモリのページングとセグメンテーション、どちらが優れていますか?
ほとんどの OS は、仮想メモリにページングを使用します。どうしてこれなの?セグメンテーションを使用しないのはなぜですか? ハードウェアの問題だけですか?特定のケースでは、一方が他方よりも優れていますか? 基本的に、どちらかを選択する必要がある場合、どちらを使用しますか?またその理由は何ですか?
議論のためにx86だとしましょう。