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

一.配置实验环境

首先,参考GitHub上的文档,搭建实验环境,这里用的是虚拟机上的Ubuntu18.04,搭建环境时用到的命令如下:

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 # Default configuration is based on 'x86_64_defconfig'
make -j$(nproc) 
sudo apt install qemu # install QEMU
qemu-system-x86_64 -kernel arch/x86/boot/bzImage

  

虽然文档上是这么写的,但我个人遇到了些问题,比如wget不成功,总是显示failed connect,不得已,只能采用git clone。用axel下载的时候也比较慢,需要有耐心。执行qemu-system-x86_64 -kernel arch/x86/boot/bzImage启动程序,截图如下:

 

 

二.基于mykernel 2.0编写一个操作系统内核并进行分析 

1.创建mypcb.h文件:vim mypcb.h

mypcb.h用来定义进程控制块。其中ip为指令指针,sp为栈顶指针,pid为进程id。state为进程当前状态,-1代表阻塞态,0代表可运行态,>0代表暂停状态

 

 2.修改mymain.c中的my_start_kernel函数,并且在mymain.c中添加my_process函数。My_process用来模拟进程,进行调度,完成进程之间的切换。

 

 

 

 3.修改myinterrupt.c,其中的my_timer_handler用来记录时间片,当时间片消耗完时完成调度。并实现my_schedule(void)函数。

 

 

 

 4.重新编译,结果如下

make clean
make

 

 

 

posted @ 2020-05-12 20:18  一剑破甲两千六  阅读(194)  评论(0)    收藏  举报