一、实验准备
在实验开始之前,需要虚拟化一个x86-64的CPU硬件平台
使用实验事先准备的虚拟cpu平台,在Ubuntu18.04LTS操作系统上依次运行以下命令行
wget https://raw.github.com/mengning/mykernel/master/mykernel-2.0_for_linux-5.4.34.patch sudo apt install axel axel -n 20 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.34.tar.xz xz -d linux-5.4.34.tar.xz tar -xvf linux-5.4.34.tar cd linux-5.4.34 patch -p1 < ../mykernel-2.0_for_linux-5.4.34.patch sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev make defconfig
make -j$(nproc)
sudo apt install qemu
qemu-system-x86_64 -kernel arch/x86/boot/bzImage
以下是配置过程中的部分截图以及配置完成后的运行截图


二、实验过程
实验的主体是通过修改目录 /linux-5.4.34/mykernel下的mymain.c和myinterrupt.c文件
从而实现多进程与进程切换的功能
首先我们需要为新文件写个头文件mypcb.h
该头文件定义了线程和进程控制块PCB的结构
新的mymain.c和myinterrupt.c文件如下:
三、实验结果
添加多进程与进程调度模块之后
对原有的虚拟CPU平台重新编译
再次运行的结果如下
四、实验感想
通过此次实验,首先我对cpu中的各个寄存器的功能有了更深的印象;其次通过手动添加嵌套汇编语言的C代码,使我对进程切换时相关堆栈的操作以及寄存器内容的变动有了更深入的理解;最后,这次实验使我对linux系统内核的认识更加清晰,不再有畏难情绪,也对操作系统的内核有了更高的兴趣。
原文:https://www.cnblogs.com/codingrookie/p/12871290.html