问题标签 [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。
但这第二行是什么?段代表什么?为什么要乘以 16?为什么我们添加偏移量。我只是无法理解这个偏移量是什么?任何人都可以解释我或给我这个链接吗?
memory-management - 线性地址和物理地址
什么是线性地址?它与物理地址有何不同?
protection - 8086 段选择器
有一些“主管”位不允许“用户空间”执行以下操作: mov CS, 200h ?
有什么样的保护?
谢谢
linux-kernel - 为什么 x86 上的 Linux 对用户进程和内核使用不同的段?
所以,我知道 Linux 使用 x86 处理器的四个默认段(内核代码、内核数据、用户代码、用户数据),但它们都有相同的基数和限制(0x00000000 和 0xfffff),这意味着每个段映射到相同一组线性地址。
鉴于此,为什么还要有用户/内核段?我理解为什么代码和数据应该有单独的段(只是由于 x86 处理器如何处理 cs 和 ds 寄存器),但为什么不具有单个代码段和单个数据段?内存保护是通过分页完成的,用户和内核段无论如何都映射到相同的线性地址。
winapi - Win32中的FS寄存器
我正在阅读 SEH 在 Win32 中是如何实现的,我遇到了这个叫做FS register的东西。我在 Google 上找不到任何好东西(很可能我正在寻找错误的东西)。那么任何人都可以解释它是什么吗?
x86 - 用户模式下的 x86 分割
当您在用户模式下运行程序时,是否可以在 x86 中使用分段内存?如果是这样,是否有任何工具(例如 C/C++ 编译器)来促进这一点?它似乎是一个非常强大的机制,允许在程序中运行程序。
我听说 Chromium 在 Native Client 中使用分段进行沙盒,但我不确定它如何使用,或者它是否使用程序集或内置编译器支持。
assembly - MOV AX、CS 和 MOV DS、AX 的概念
有人可以解释这三个指令的功能吗?
我知道理论上的代码、数据和额外段是什么,但是:
它们是如何在这个程序中实现的?
为什么整个段移动到另一个段?(
MOV AX,CS
和MOV DS,AX
)
这两条指令实际上是做什么的?
我可以理解这段代码中所有其他指令的含义,除了突出显示的 3 条指令。
(程序运行良好。它接受输入直到 0 被击中——有 amov ah,01h
和 an int 21h
,然后它比较al
,'0'
如果al
是'0'
,它跳到last
,否则它跳到back
。)
(编者注:.com
程序在 offset 加载100h
,所有段寄存器设置为彼此相等。 org 1000h
可能是错字,org 100h
因为这看起来像一个.com
程序。这个程序不会中断,因为它不使用任何绝对地址,只使用相对地址跳跃。)
memory - 使用分段的 32 位 x86 的 64 TB 虚拟内存:如何?
Intel x86 内存模型有分段和分页。系统可以寻址高达 64 TB 的虚拟内存是什么意思?我的理解是只有 4GB 的虚拟内存是可寻址的。这里的差距是什么?这都是在 32 位处理器的上下文中
这是数学:
2^13(段选择器)* 2(LDT 或 GDT)* 2^32 = 2^46 = 64 TB。这在文献中被称为总虚拟内存。他们是否错误地将其称为虚拟内存?令我困惑的是,处理器本身只有 32 位地址线。
或者,他们是否试图说这是可以分配的总虚拟内存(跨所有进程?)
assembly - 什么是段落(当提到记忆时)
问一些看起来应该很容易查找的东西,我觉得很傻,但正如您可能猜到的那样,搜索段落会得到很多与我想知道的内容无关的结果。
过去几天我一直在学习汇编(编写一个小型引导加载程序,那种练习的东西),我看到了一些对称为段落的内存块的引用。我有一段遥远的记忆,一段是两个词,但我真的不确定。段落到底是什么,它的意义是什么?
operating-system - 虚拟内存的分页或分段,哪个更好?
大多数操作系统对虚拟内存使用分页。为什么是这样?为什么不使用分段?仅仅是因为硬件问题吗?在某些情况下,一种比另一种更好吗?基本上,如果你必须选择一个而不是另一个,你想使用哪一个,为什么?
为了论证,我们假设它是 x86。