基于mykernel 2.0编写一个操作系统内核

一、实验准备

  在实验开始之前,需要虚拟化一个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
  
 以下是配置过程中的部分截图以及配置完成后的运行截图
基于mykernel 2.0编写一个操作系统内核_第1张图片

 

 基于mykernel 2.0编写一个操作系统内核_第2张图片

 

 

 

基于mykernel 2.0编写一个操作系统内核_第3张图片

 

 

 二、实验过程

  实验的主体是通过修改目录 /linux-5.4.34/mykernel下的mymain.c和myinterrupt.c文件

  从而实现多进程与进程切换的功能

  首先我们需要为新文件写个头文件mypcb.h

  该头文件定义了线程和进程控制块PCB的结构

基于mykernel 2.0编写一个操作系统内核_第4张图片

 

 

 

  新的mymain.c和myinterrupt.c文件如下:

基于mykernel 2.0编写一个操作系统内核_第5张图片

 

 

 

基于mykernel 2.0编写一个操作系统内核_第6张图片

 

 

 

三、实验结果

  添加多进程与进程调度模块之后

  对原有的虚拟CPU平台重新编译

  再次运行的结果如下

基于mykernel 2.0编写一个操作系统内核_第7张图片

 

 

 

四、实验感想

  通过此次实验,首先我对cpu中的各个寄存器的功能有了更深的印象;其次通过手动添加嵌套汇编语言的C代码,使我对进程切换时相关堆栈的操作以及寄存器内容的变动有了更深入的理解;最后,这次实验使我对linux系统内核的认识更加清晰,不再有畏难情绪,也对操作系统的内核有了更高的兴趣。

 

你可能感兴趣的:(基于mykernel 2.0编写一个操作系统内核)