一.配置实验环境
首先,参考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
原文:https://www.cnblogs.com/nwpuustc/p/12878380.html