课后作业3.4:进程的切换

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

任务描述

本关任务回答问题:

在第二次进程切换时:

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

2.在(ljmp)切换前,寄存器对 CS:EIP 的值是多少?1 号进程的 TSS 中的字段对 cs:eip 的值是多少?0 号进程的 TSS 中的字段对 cs:eip 的值是多少?

3.在(ljmp)切换后,寄存器对 CS:EIP 的值是多少?其上一条指令的地址是多少?1 号进程的 TSS 中的字段对 cs:eip 的值是多少?0 号进程的 TSS 中的字段对 cs:eip 的值是多少?

4. 0 号进程是在执行哪一条指令时首次切换到 1 号进程的?当 0 号进程后来恢复运行时,是从哪一条指令开始执行的?

实验准备

本关卡使用版本 1 内核,使用 gdb 调试分析。

代码及答案

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

打开mygdb,新建一个终端,输入以下内容

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

2.创建断点并跟踪到switch to语句

反汇编找到指令

再跟踪到该指令

上图可以看到0号进程和1号进程的剩余时间片。

下面查看在(ljmp)切换前,0号进程和1号进程对TSS的值( cs:eip 和 ss:esp

用si单步执行ljmp指令切换进程,并查看此刻寄存器 CS:EIP 和 SS:ESP 的值

(这里简写输入为“info reg”也可以)

在(ljmp)切换后,进程对TSS的值:

3.填写txt,准备测评

(gdb 调试过程中输入单词请一次输入正确,如果字母输入错误请重新输入整条命令,否则会影响评测结果!!!) 通过 gdb 调试查找答案,将第三关的答案填写在/data/workspace/myshixun/第三关.txt中。

相关推荐

  1. c++作业

    2024-01-26 22:56:01       28 阅读
  2. 等保作业

    2024-01-26 22:56:01       29 阅读
  3. Linux第三次作业

    2024-01-26 22:56:01       51 阅读
  4. Linux第一章作业

    2024-01-26 22:56:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-26 22:56:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-26 22:56:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-26 22:56:01       87 阅读
  4. Python语言-面向对象

    2024-01-26 22:56:01       96 阅读

热门阅读

  1. [Oracle] [最全] 服务及文件

    2024-01-26 22:56:01       57 阅读
  2. oracle、oracle functions、oracle calls

    2024-01-26 22:56:01       65 阅读
  3. 力扣295:数据流的中位数

    2024-01-26 22:56:01       55 阅读
  4. redis在rhel7/centos7环境下的安装与配置指导

    2024-01-26 22:56:01       46 阅读
  5. 前端笔试题(十)

    2024-01-26 22:56:01       67 阅读
  6. 69.x 的平方根(力扣LeetCode)

    2024-01-26 22:56:01       50 阅读
  7. mysql sql查询

    2024-01-26 22:56:01       58 阅读
  8. 学习 canvas标签 这一篇文章足以

    2024-01-26 22:56:01       40 阅读
  9. Git的常用命令

    2024-01-26 22:56:01       63 阅读