1
A
回答
4
我觉得地址空间指segment。
在真实模式下(intel的XT和286)段只是一种使程序独立于内存空间的方法。当一个程序被编译时,地址(可变参数,标签 - 函数)被硬编码到一个程序中。 - 这样就很难同时加载两个程序,因为它们都希望使用相同的地址。
我们需要使用相对地址而不是绝对个。相对和物理地址之间的分辨率是相对于段进行的。如果从段0x200
开始加载一个程序,并且从0x600
开始加载另一个程序,则它们可以自由使用相同的地址(例如0x41
),因为这将相对于它们各自的段。在我们的情况下(实模式),段0x200
将被转换为物理地址0x2000
(通过将其乘以0x10
),并且在添加相对地址后,生成的物理地址将为0x2041
。
有很多可以使用的段。数据操作默认是相对于程序的数据段(保存在CPU的DS
寄存器中)并且代码操作是相对于代码段(保存在CS
寄存器中)进行的。使用堆栈段(SS
寄存器)将堆栈地址解析为物理地址。
但是在实模式下,您可以自由使用这些段,您可以访问其他程序的段或输入任意值,这些值将被解析为任意物理地址。
在保护模式下,整个概念发生了变化。细分受众群不再拥有地址。他们持有选择器。它们只能引用表中保存真实基地址的元素。该表还包含限制,因此您不能再寻址任何物理地址,只能在由操作系统提供给您的程序的内存部分内。这引入了进程对内存块所有权的概念。
我认为这已经足够了,请随时阅读Wikipedia或其他好消息。这个话题很有文献记载。
相关问题
- 1. 为什么内核说在进程地址空间?
- 2. 在Linux用户空间进程中,vsyscall页面的地址是什么?
- 3. 用户进程的有效地址空间是什么? (OS X和Linux)
- 4. 进程的内存地址空间
- 5. 地址空间库或进程
- 6. 虚拟地址系统上的进程地址空间
- 7. Linux进程虚拟地址空间的地址范围
- 8. TCP Buffer是否在进程内存的地址空间?
- 9. 什么是插入+进入网址,而不是例如空间
- 10. linux内核的内核地址空间的布局是什么?
- 11. 为什么这行不会被复制到子进程的地址空间中?
- 12. 为什么我们需要在RAM中锁定进程的地址空间?
- 13. 什么是地址空间布局随机化
- 14. 为什么子进程和父进程的变量的地址是相同
- 15. 虚拟内存是否总是为进程提供更大的地址空间?
- 16. 使用Rails/Mongoid进行地理空间查询的最佳教程是什么?
- 17. 多线程相同的地址空间
- 18. 线程在别人的地址空间
- 19. 处理虚拟地址空间和内核地址空间?怎么样?
- 20. 图形卡内存和进程的虚拟地址空间
- 21. DLL在进程地址空间中使用的页面
- 22. 什么是IP地址':: 1'?
- 23. 什么是标签地址?
- 24. 关于进程修改和地址空间
- 25. 进程地址空间和虚拟内存
- 26. 是否有私有MAC地址空间?
- 27. 多线程虚拟地址空间?
- 28. 线程返回到坏空间地址
- 29. 是整个过程的虚拟地址空间分割成页
- 30. 在32位为什么地址空间限制为2^31?