20242828《Linux内核原理与分析》第三周作业
实验准备
# 注意路径是区分大小的
$ cd ~/LinuxKernel/linux-3.9.4
$ rm -rf mykernel
$ patch -p1 < ../mykernel_for_linux3.9.4sc.patch
$ make allnoconfig
# 编译内核请耐心等待
$ make
$ qemu -kernel arch/x86/boot/bzImage
-
patch -p1 < ../mykernel_for_linux3.9.4sc.patch
使用patch
命令应用补丁文件mykernel_for_linux3.9.4sc.patch
到当前目录下的内核源码。-p1
选项用于指定补丁的路径层次。 -
make allnoconfig
生成一个最小化配置文件,该配置文件禁用了内核中的所有可选配置选项。allnoconfig
会创建一个“最小配置”内核。 -
make
开始编译内核,使用默认的Makefile
配置。该过程可能需要较长时间,因为这会根据配置生成内核及其模块。 -
qemu -kernel arch/x86/boot/bzImage
使用 QEMU 启动刚编译好的内核镜像。bzImage
是 Linux 内核的可引导镜像文件,位于arch/x86/boot/
目录下。
实验步骤:
1、使用实验楼的虚拟机打开 shell,进入到linux-3.9.4文件夹下
2、删除名为 mykernel
的文件夹及其所有内容。删除此文件夹通常是为了确保之后的编译过程是从干净的状态开始。
3、使用 patch
命令应用补丁文件 mykernel_for_linux3.9.4sc.patch
到当前目录下的内核源码
4、生成一个最小化配置文件,该配置文件禁用了内核中的所有可选配置选项。
5、make
开始编译内核,使用默认的 Makefile
配置
6、使用 QEMU 启动刚编译好的内核镜像。出现死循环,可以看到my_start_kernel这个内核的初始化入口点在执行,同时my_timer_handler时钟中断处理程序周期性执行。
6、进入mykernel文件夹下修改 mymain.c(主函数)、myinterrupt.c(中断控制函数),并且新增内容mypcb.h(进程控制块)
7、回到上一级目录make重新编译内核
8、使用 QEMU 启动刚编译好的内核镜像。qemu -kernel arch/x86/boot/bzImage
总结
时间片轮转(Time Slice Round-Robin) 是 Linux 内核中最简单和常见的调度算法之一,通常用于实时系统或公平调度中的一部分。其核心思想是:每个可运行的进程都会被分配一个固定的时间片(Time Slice),即该进程可以连续执行的最大时间量。时间片结束后,调度器强制暂停该进程,并将 CPU 分配给下一个就绪队列中的进程,从而实现多任务处理和公平性。它确保了多任务系统中每个进程都能公平地分配 CPU 资源,但同时面临时间片长度的权衡问题。通过与现代调度器(如 CFS)的结合,Linux 实现了高效、灵活的任务调度,从而能处理各种类型的工作负载。
实验中遇到的问题及解决方案:
实验中在mykernel目录下使用make会报错,一定要返回到上一目录后再使用make即可解决问题。