tr寄存器

AI助手已提取文章相关产品:

任务寄存器tr保存 16 位的段选择子、32 位基地址、16 位段界限和当前任务的 TSS属性。它引用 GDT 中的 TSS 描述符。基地址指明 TSS 的第一个字节(字节 0)的线性地址,段界限确定 TSS 的字节个数。TR寄存器包含了当前正在CPU运行的进程的TSSD(任务段描述符)选择符。也包含了两个隐藏的非编程域:TSSD的base 和limit域。通过这种方式处理器就能直接对TSS寻址,而不用从GDT中索引TSS的地址

TR寄存器---->GDT中的TSS描述符---->硬件上下文的具体数据。任务切换中

cpu会把当前寄存器的数据保存到当前(旧的)tr寄存器所指向的tss数据结构里,然后把新的tss数据复制到当前寄存器里。这些操作是通过cpu的硬件实现的

您可能感兴趣的与本文相关内容

第1关:任务寄存器TR)的分析 100 任务要求 参考答案 记录 评论 任务描述 相关知识 环境准备 CPU 是如何找到当前进程的任务状态段的 用 gdb 调试内核,跟踪到 main 函数入口 如何查看 1 号进程的 TSS 和核心栈栈底的位置 如何查看 1 号进程运行时TR寄存器的值 如何查看 TR 寄存器指向的任务状态段描述符的值 如何从段描述符的值计算出段的起始地址 编程要求 测试说明 任务描述 分析版本1内核,回答下列问题: 1 号进程的任务状态段(TSS)的地址是多少?1 号进程的核心栈栈底的位置是多少? 1 号进程运行时,任务寄存器TR)的值是多少?它指向的任务状态段描述符的值是多少?该描述符里记录的任务状态段起始地址是多少? 相关知识 为了完成本关任务,你需要掌握: 1.CPU 是如何找到当前进程的任务状态段的; 2.用 gdb 调试内核,跟踪到 main 函数入口; 3.如何查看 1 号进程的 TSS 和核心栈栈底的位置; 4.如何查看 1 号进程运行时 TR 寄存器的值; 5.如何查看 TR 寄存器指向的任务状态段描述符的值; 6.如何从段描述符的值计算出段的起始地址。 环境准备 本实训需要设置内核版本 1 为调试分析的对象,用 gdb 调试内核,内核版本 1 的压缩文件存放在/data/workspace/myshixun/exp1中。 CPU 是如何找到当前进程的任务状态段的 任务状态段里记录的是进程现场和核心栈位置等信息,CPU 通过 TR 寄存器可以找到当前进程的任务状态段,整体结构如下: 可见,TR 寄存器通过 GDT 中的描述符间接指向了当前进程的任务状态段。GDT 的位置是根据 GDTR 寄存器的值来确定的。 用 gdb 调试内核,跟踪到 main 函数入口 方法与之前的实训中方法一样。 如何查看 1 号进程的 TSS 和核心栈栈底的位置 首先跟踪到1号进行运行时,例如函数task1的入口处: 此时current指向1号进程的进程控制块,可以查看该进程控制块的内容: 进程控制块的类型为 struct task_struct ,定义如下: 其中最后一个成员tss即为进程的任务状态段,可以直接查看其地址: 任务状态段的类型定义如下: 其中成员 esp0 记录的即为进程的核心栈栈底位置。 如何查看 1 号进程运行时TR寄存器的值 首先退出gdb调试模式,开始用bochsdbg进行调试(应首先确保cur指向目录1): 再次跟踪到函数 task1 的入口(该地址在前面进行 gdb 调试时出现过): 使用命令 sreg 查看所有的段寄存器: 这时就会显示出 TR 寄存器的值。 如何查看 TR 寄存器指向的任务状态段描述符的值 a.计算描述符在 GDT 中的索引。 TR寄存器(共16位)的高13位是所指向的任务状态段在全局描述符表(GDT)中的索引,因此将TR寄存器右移3位即可得到此索引,例如: 可以单独打开一个终端来运行 gdb ,就可以在其中进行计算。 b.查看 GDT 中该索引下的段描述符 首先查看 GDT 的地址,该地址记录在寄存器 gdtr 中: 可见 GDT 的地址为 0x5cc0 。 现在可以查看 GDT 中的描述符了,例如 0~4 号描述符的内容如下: 其中 4 号描述符的值为 0x00008901ed080068 。 如何从段描述符的值计算出段的起始地址 一个段描述符占 64 位,其中段的起始地址由 3 部分拼接而成,如下图中的红色部分所示: 可见前面的 4 号描述符 0x00008901ed080068 里记录的段起始地址是 0x0001ed08 。 编程要求 根据相关知识,回答问题:(将答案填写在/data/workspace/myshixun/第一关.txt中) 1 号进程的任务状态段(TSS)的地址是多少?1 号进程的核心栈栈底的位置是多少? 1 号进程运行时,任务寄存器TR)的值是多少?它指向的任务状态段描述符的值是多少?该描述符里记录的任务状态段起始地址是多少? 测试说明 平台会对你的操作进行检测,同时会对文档的内容进行检测。请完成操作并且填写文档内容之后再点击评测。 开始你的任务吧,祝你成功!
09-16
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值