2019-2020-1 20199322《Linux内核原理与分析》第三周作业

前面的实验楼给的操作步骤,不再赘述

mykernel里的mymain.c下面的这段代码

void _init my_start_kernel(void)
{
       int i=0;
       while(1)
                     {
                          i++;
                          if(i%100000==0)
                               printf(KERN_NOTICE"my_start_kernel here %d \n",i);

                      }
}

很明显这是内核的启动函数,while循环里每执行10万次,然后输出一行,如下图

当我们把10万,修改成100万,然后make一下,就会发现,输出的频率就不一样了,如下图

下面再看看 myinterrupt.c里的代码, 根据注释也知道,这是调用时钟中断了,然后输出一条语句

根据庖丁解牛上的二维码9给的地址,我们更新一下,上面的几个mymain.c,myinterrupt.cmypcb.c

然后make一下,然后输出一下,如下图。感觉和没更新前,好像没什么区别

更正

上次说没有变化,应该是编译错误了,执行的是没改之前的mykernel

经过反复查找,问题被定位在mypch.h

删除 #unsigned long

/*
 *  linux/mykernel/mypcb.h
 *
 *  Kernel internal PCB types
 *
 *  Copyright (C) 2013  Mengning
 *
 */

#define MAX_TASK_NUM        4
#define KERNEL_STACK_SIZE   1024*2 # unsigned long
/* 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);

然后再重复操作

posted @ 2019-09-28 13:21  汪振_20199322  阅读(138)  评论(0编辑  收藏  举报