2023-2024 20232808《Linux内核原理与分析》第九周作业

1、clone一个menu,并用test_exec.c覆盖test.c

clone
在这里插入图片描述
运行
在这里插入图片描述

2、回退到LinuxKernel目录,启动调试:

qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img -s -S
gdb
file linux-3.18.6/vmlinux
target remote:1234

打断点
在这里插入图片描述
逐步调试
在这里插入图片描述

3、总结

1.Linux系统的一般执行过程
一般情况:

1.1正在运行的用户态进程X

1.2发生中断——save cs:eip/esp/eflags(current) to kernel stack,then load cs:eip(entry of a specific ISR) and ss:esp(point to kernel stack).

1.3SAVE_ALL //保存现场

1.4中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换

1.5标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)

1.6restore_all //恢复现场

1.7iret - pop cs:eip/ss:esp/eflags from kernel stack

1.8继续运行用户态进程Y

几种特殊情况:

1.1通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常类似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换;

1.2内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般的情况略简略;

1.3创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;

1.4加载一个新的可执行程序后返回到用户态的情况,如execve;

4、ChatGPT

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值