Bochs源码分析 - 15:bochs对于call far(tss_sel)指令的实现机制

本文探讨了Bochs在保护模式下如何处理call far(tss_sel)指令。通过分析段描述符、段寄存器、代码段寄存器加载以及call_protected函数,揭示了Bochs内部实现call far机制的细节,包括段选择子解析、描述符获取和任务切换等关键步骤。
摘要由CSDN通过智能技术生成

前言

        所谓“保护模式”,重点是“保护”,可保护的是什么呢?答案是:内存中的数据与代码。有几种保护手段呢?段保护与页保护。这篇文章我尝试结合intel手册来重新梳理一下intel保护模式中的段保护有关机制。

保护模式的两种保护机制

        The memory management facilities of the IA-32 architecture are divided into two parts: segmentation and paging. Segmentation provides a mechanism of isolating individual code, data, and stack modules so that multiple programs (or tasks) can run on the same processor without interfering with one another. Paging provides a mechanism for implementing a conventional demand-paged, virtual-memory system where sections of a program’s execution environment are mapped into physical memory as needed. Paging can also be used to provide isolation between multiple tasks. When operating in protected mode, some form of segmentation must be used. There is no mode bit to disable segmentation. The use of paging, however, is optional.

         上面是intel卷三 3.1节 关于“保护模式内存管理”的摘要,注意黑体和下划线部分,intel明确指出其内存管理被分成两部分,段式管理(segmentation)和页式管理(paging)。另外,段式管理是必须强制选用的,而页式管理是可选的。

        如下图,是intel说明的保护模式内存管理机制。其首先通过段保护确定具体的线性内存地址,然后通过页保护来确定对应的物理地址。其实在有关资料中很多人都注重Intel的分页机制而忽视分段机制,我猜想很可能是因为各个段的Base都为零,不容易觉察到段保护的存在,段更重要的是其权限检查机制。

 段描述符

        一个段由其段描述符所描述,其不同的段类型存在不同的段描述符,但其可以认为由三部分组成:段权限(Access),段机制(Base),段线程(Limit)。

       

        当然,因为其历史遗留问题,其实际的段描述符数据结构往往相当难看,是为了兼容有关结构体,如下图。 

         段描述符分为类,系统段描述符和代码-数据段描述符(其由S位),其中系统段描述符分为分为六类,存储在LDT或GDT表中。值得注意的是,要区分段描述符与门描述符,门描述存储在IDT表中,门描述符中存储着段选择子,通过段选择子可以从GDT/LDT表中找到段描述符。      

        

段寄存器

        CPU通过段寄存器来管理段描述符,比如我们如果调用汇编指令 "mov [0x1100],eax",其隐含着 "ds:[0x1100]",该ds就是段寄存器。

        段寄存器由两部分组成:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值