课堂练习3.4:进程的切换

本文详细分析了Linux内核中第一次进程切换时,涉及的寄存器变化(如CS:EIP,SS:ESP,TR),以及TSS(任务状态段)和GDT(全局描述符表)的对应地址。通过mygdb和dbg调试,揭示了进程切换前后各寄存器值和GDT描述符的变更情况。
摘要由CSDN通过智能技术生成

第1关:第一次进程切换过程分析

任务描述

本关任务回答问题:

在第一次进程切换时:

1.是从几号进程切换到几号进程?0 号进程和 1 号进程的剩余时间片分别是多少?

2.在(ljmp)切换前,寄存器对 CS:EIP 和 SS:ESP 的值是多少?其下一条指令的地址是多少?0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?

3.在(ljmp)切换后,寄存器对 CS:EIP 和 SS:ESP 的值是多少?0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?

实验准备

本关卡对版本 1 内核进行修改,内核文件存放在/data/workspace/myshixun/exp1中。

代码及答案

1.首先配置环境

cp /data/workspace/myshixun/exp1/1.tgz ~/os/
cd os/linux-0.11-lab
tar zxvf ../1.tgz
rm -rf cur
ln -s 1 cur
cd 1/linux/
make
cd ../..
./rungdb

如图所示

 2.然后打开mygdb,先新建一个终端,再运行mygdb

在新建终端输入以下代码:

//在一个终端里切换到目录~/os/linux-0.11-lab
cd os/linux/0.11-lab
./mygdb

执行后如下图所示

3.创建断点。

先在sched.c的第136行创建一个断点,查询进程0和进程1的剩余时间片。

跟踪到 switch_to,反汇编找到 ljmp 指令

 查询下一条指令的地址

查询寄存器 CS:EIP 和 SS:ESP 的值

查询0 号进程的 TSS 中 cs:eip 和 ss:esp ,以及1 号进程的 TSS 中的字段 cs:eip 和 ss:esp 的值

用si单步执行ljmp指令切换进程,查询CS:EIP 和 SS:ESP 的值

查询0 号进程的 TSS 中 cs:eip 和 ss:esp ,以及1 号进程的 TSS 中的字段 cs:eip 和 ss:esp 的值

4.填写txt,提交测评

第一次进程切换时:
1.是从几号进程切换到几号进程?(0)(1)
2.0号进程和1号进程的剩余时间片分别是多少?(13)(15)
3.在(ljmp)切换前,寄存器对 CS:EIP 和 SS:ESP 的值是多少?(0x8:0x6f33)(0x10:0x1f9cc)

其下一条指令的地址是多少?(0x6f37)

0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?(0x17:0x0)(0x17:0x0)

1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?(0xf:0x690a)(0x17:0x25740)
4.在(ljmp)切换后,寄存器对 CS:EIP 和 SS:ESP 的值是多少?(0xf:0x690a)(0x17:0x25740)

0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?(0x8:0x6f37)(0x10:0x1f9cc)

1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?(0xf:0x690a)(0x17:0x25740)

(记得ctrl+s保存文档内容哦~)

最后在gdb调试里面quit一下

第2关:第一进程切换时TR寄存器的变化分析

任务描述

本关任务回答问题:

1.第一次进程切换前,CPU 中 TR 寄存器的值是多少?它所指向的 GDT 描述符中的段起始地址是多少?是几号进程的 TSS 地址?

2.第一次进程切换后,CPU 中 TR 寄存器的值是多少?它所指向的 GDT 描述符中的段起始地址是多少?是几号进程的 TSS 地址?

实验准备

本关卡实验版本 1 内核进行修改,使用 gdb 和 dbg 共同调试分析。

代码及答案

1.用第一关搜索到的0x6f33 ljmp地址进行dbg调试

cd os/linux-0.11-lab
./rundbg

1.第一次进程切换前,CPU 中 TR 寄存器的值是多少?(0x0020)它所指向的 GDT 描述符中的段起始地址是多少?(0x0001ed08)是几号进程的 TSS 地址?(0)
2.第一次进程切换后,CPU 中 TR 寄存器的值是多少?(0x0030)它所指向的 GDT 描述符中的段起始地址是多少?(0x00fff2e8)是几号进程的 TSS 地址?(1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值