回答
对于绝大部分,不使用分割硬件。大多数当前操作系统设置CS,DS,SS和ES都指向所有内存(基址为0,4Gig的限制)。每个设置为允许完全访问所有内存(CS->执行,DS,ES,SS->读/写)。
这意味着几乎所有的真正的访问控制都是通过分页单元完成的。基本思想是可以将特定进程可访问的页面映射到该进程。虚拟内存中的页面被映射,但标记为不存在,因此尝试读取/写入它们会导致异常;操作系统从分页文件读取数据到RAM中,将数据标记为存在,然后重新开始该指令。至于页面如何标记,大多数可执行代码将被标记为只读,并且将在进程之间共享。大多数数据和堆栈将被标记为读/写,并且不会被共享。根据确切的系统,堆栈空间通常会设置NX位来防止它被执行。
还有一些有点不同的其他零件。例如,大多数操作系统(包括OS/X,如果有内存服务的话)都会建立一个堆栈保护页面 - 堆栈顶部的页面不允许访问。当/如果尝试访问它时,操作系统会捕获异常,分配另一页堆栈空间并重新启动该指令。这意味着你可以为堆栈分配(比如说)4兆字节的地址空间,但只能为实际使用的空间分配实际的RAM(显然是以页面大小为增量)。
该硬件还支持“大”(4兆字节)页面。这些主要用于映射大块连续内存,如显卡上可直接看到的内存部分。
这只是一个非常高层次的看法,但很难提供更多的细节,而不知道你在乎的是什么。尝试覆盖整个操作系统的所有分页使用可能会占用整本(大型)书籍。
1级的Windows(其它大部分系统)确实让极少使用分割 - 它设置了FS作为一个指向线程信息块(TIB),它可以访问有关的一些基本信息当前线程。这特别适用于Windows的结构化异常处理(和向量异常处理)。
Thx,Jerry。你打了我想知道的。 – grok12
- 1. 什么是“分段故障:11”? (MAC OS X GCC汇编运行时错误)
- 2. FREAD错误 - 分段故障
- 3. 分段故障
- 4. 如何设置x86分页?获取三重故障错误
- 5. 分段故障
- 6. 分段故障
- 7. 分段故障
- 8. 分段故障
- 9. 分段故障
- 10. 分段故障
- 11. 分段故障
- 12. 分段故障
- 13. 分段故障
- 14. 分段故障
- 15. 分段故障
- 16. 分段故障
- 17. 分段故障
- 18. 分段故障
- 19. 分段故障
- 20. 分段故障
- 21. 分段故障++
- 22. 分段故障
- 23. 分段故障
- 24. 分段故障
- 25. 分段故障
- 26. 分段故障
- 27. 分段故障
- 28. 分段故障
- 29. 分段故障
- 30. 赛格故障
请不要在同一个问题中提出多个问题。如果你有多件事要问,请提出多个问题。在一个问题中要求不止一件事情会阻止人们回答,如果他们只知道部分多问题的答案,并且使得难以得到单一的接受答案。 – bdonlan
好的,我除去了一个问题。 Jerry,Thx, – grok12