zoukankan      html  css  js  c++  java
  • 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 
    ",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);
    

    然后再重复操作

  • 相关阅读:
    MarkDown的快速入门
    openCV打开摄像头,用openGL实现纹理贴图和视频预览
    tensorflow中的dropout是怎么实现的?
    BEEPS-仿美图秀秀磨皮算法,让美女的皮肤更光滑
    鄙人提出的PBDRLSE分割算法(绝对原创)
    怀旧风格照片特效
    铅笔特效算法
    背光图像的增强
    关于push和concat的性能问题
    小程序日历签到
  • 原文地址:https://www.cnblogs.com/vizen/p/11602811.html
Copyright © 2011-2022 走看看