经过长时间的阅读,我真的很困惑。据我所知:
维基百科(
为什么我们需要它?linux是如何使用它的呢?
发布于 2020-11-08 23:18:22
现代操作系统(对于64位80x86)仍然使用段寄存器;只是它们的使用对用户空间“大部分是隐藏的”(而且大多数用户空间代码可以忽略它们)。具体来说,CPU将确定从操作系统负载(从GDT或LDT)到CS的代码是否为64位(或32位或16位),中断仍然为中断的代码保存CS和SS (并再次加载到iret),GS和/或FS通常用于线程本地和/或CPU本地存储等。
GDT用于在内存中定义一个段(包括constraints). )
代码和数据段只是GDT的用途之一。另一个主要用途是定义任务状态段的位置(用于查找IO端口权限映射、在中断导致特权级别更改时加载到CS、SS和RSP中的值等)。64位代码(以及在64位内核下运行的32位代码/进程)仍然有可能使用GDT中定义的调用门,但大多数操作系统不对64位代码使用该功能(它们使用syscall )。
是。页表的监控程序位决定在CPL=3上运行的代码是否可以/不能访问页面(或者代码必须是CPL=2、CPL=1或CPL=0才能访问页面)。
维基百科(
是的-维基百科是对的。通常,操作系统会在启动的早期(对于TSS、CS、SS等)设置GDT,然后在启动后没有任何理由修改它;并且段寄存器不是用于“分段内存保护”(而是用于其他事情-确定代码大小,如果中断处理程序应该返回到CPL=0,等等)。
https://stackoverflow.com/questions/64741681
复制相似问题