用python写系统内核_基于mykernel 2.0编写一个操作系统内核(示例代码)

本文详细介绍了如何利用mykernel 2.0在Ubuntu环境下配置Linux内核,并分析了操作系统内核的核心功能。通过编写PCB结构体和修改mymain.c、myinterrupt.c,实现了基于时间片的进程轮换。实验展示了进程切换的关键汇编代码,加深了对汇编和进程管理的理解。
摘要由CSDN通过智能技术生成

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

按照https://github.com/mengning/mykernel 的说明配置mykernel 2.0,熟悉Linux内核的编译;

简要分析操作系统内核核心功能及运行工作机制

一、实验环境配置

1.操作系统环境

腾讯云Ubuntu

2.内核环境配置

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

运行结果如下:

二.内核编写

1.添加PCB结构体

#define MAX_TASK_NUM 4

#define KERNEL_STACK_SIZE 1024*2

/* CPU-specific state of this task */

struct Thread {

unsigned long ip;

unsigned long sp;

};

typedef struct PCB{

int pid;

volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */

unsigned long stack[KERNEL_STACK_SIZE];

/* CPU-specific state of this task */

struct Thread thread;

unsigned long task_entry;

struct PCB *next;

}tPCB;

void my_schedule(void);

Thread结构体中,ip和sp变量用来在进程切换时,保存或者恢复当前指令指针寄存器和栈指针寄存器的值。也就是需要用这个结构来保存部分的上下文信息。

PCB结构体中,pid是进程的id进程号,state表示进程状态,-1、0、1分别表示阻塞、就绪、终止三种状态,stack数组用来模拟进程的栈。task_entry是进程的运行入口,

而从next指针可以看到,进程PCB之间用链表结构连接。

2.修改mymain.c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值