Linux内核分析——操作系统的工作原理

    xiaoxiao2021-03-25  147

    一、实验过程:

    实验内容为完成一个简单的时间片轮转多道程序内核代码

    1.根据老师指导按照实验步骤,在实验楼环境下打开shell:

    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

    然后 cd mykernel

    看到mymain.c和myinterrupt.c.

    2.将老师github的mypcb.h/mymain.c/myinterrupt.c拷贝到实验楼环境的mykernel下,再按照实验步骤进行,即可看到实验的调度过程.修改这三个文件:

    mypcb.h:

    mymain.c:

    myinterrupt.c:

    3.重新make编译一下,然后执行会看到结果:

    二、分析该精简内核的源代码。

    1.mypcb.h对结构体和函数进行了定义.定义了线程的ip与sp 线程的结构,其中SP寄存器指向当前线程栈的栈顶,这样通过SP就能完成出入栈的操作;IP指向当前操作指令,一开始指向线程启动函数,后面按照代码的一层层调用,执行相应指令,接下来定义了进程控制块PCB的初始信息。

    2.mymain.c中__init my_start_kernel 函数是内核的入口,它完成了初始化进程并启动进程的工作。 进程创建完毕后,将my_current_task指针指向0号进程,通过嵌入式汇编代码,开始执行。这个嵌入式代码实际上是开辟了新的栈帧空间,类似于上一课,也与myinterrupt.c的进程切换类似。 每个进程都执行my_process(void),i000000 == 0,打印进程号,略小于1s的时间。

    3.myinterrupt.c中my_timer_handler被内核的定时器周期性调用,当计数到1000时执行进程切换。

    4.其中的内嵌汇编代码为核心:

    “pushl %

    转载请注明原文地址: https://ju.6miu.com/read-6036.html

    最新回复(0)