2023-2024-1 20232822《Linux内核原理与分析》第六周作业

一、实验过程

1、打开实验楼,进入LinuxKernel,从github中克隆menu

2、在menuos中添加函数

(1)在test.c中添加getpid和 getpid-asm函数,并在main函数中添加

(2)make rootfs自动编译脚本

3、进行调试

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

gdb  file linux-3.18.6/vmlinux

gdb  target remote:1234

4、在sys_getpid处设置断点,发现在执行getpid_asm时停下了,一直按n进行若干次单步执行进入schedule函数

二、实验流程图

三、使用chatgpt

四、实验总结

用户态进程通过 int 0x80 或 system_call 进行系统调用的过程:

1. 用户态进程通过 int 0x80 这个中断指令(或者 system_call)发起系统调用请求。中断号 0x80 是预留给系统调用的中断向量号。

2. 当进程发起系统调用请求时,CPU会从用户态切换到内核态,进入特权模式,并执行相应的中断处理程序。

3. 中断处理程序会保护当前进程的现场。它会保存进程被中断时的状态,如程序计数器 PC、寄存器内容以及其他重要的进程信息,通常保存在内核栈中。

4. 然后,中断处理程序会进行一系列的检查和调度,根据系统调用的类型和参数,选择相应的系统调用处理子程序进行处理。

5. 在系统调用处理子程序中,内核会执行与系统调用相关的任务。这可能包括文件操作、进程管理、内存管理、网络通信等。

6. 处理子程序完成后,中断处理程序会恢复被中断进程的现场,将先前保存的状态信息加载回寄存器和程序计数器,并使用 iret 指令返回到用户态。

7. 用户态进程再次恢复执行,继续执行系统调用之后的指令。

总结来说,用户态进程通过 int 0x80 或 system_call 中断指令切换到内核态,触发中断处理程序来处理系统调用请求,并在处理完后恢复现场返回到用户态,以实现用户程序与内核之间的协作和资源访问。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值