zoukankan      html  css  js  c++  java
  • xv6-----CPU alarm

    本次实验也是整理自网络,,,

    参考:

    1.添加alarm系统调用(和第一次实验的题目二类似,将halt修改为alarm就行,函数sys_alarm的代码作业网页已给出 链接:  xv6之添加halt系统调用

    2.添加_alarmtest 在makefile中 (和第一次实验的添加_halt 一样,详情见上面链接博客)

    3.在proc.h 的

    stuct proc结构体内添加如下代码

    1 int alarmticks;          
    2 void (*alarmhandler)();  
    3 int curalarmtick;  

    4.在trap.c文件中的函数

    void
    trap(struct trapframe *tf)中switch的第一个case修改如下:

     1 case T_IRQ0 + IRQ_TIMER:
     2     if(cpu->id == 0){
     3        acquire(&tickslock);
     4        ticks++;
     5 
     6       wakeup(&ticks);
     7       release(&tickslock);
     8     }
     9       if(proc && (tf->cs & 3) == 3){
    10         proc->curalarmtick++;
    11         if(proc->alarmticks == proc->curalarmtick){  // 到达了周期
    12           proc->curalarmtick = 0;
    13 
    14     //下面两句将eip压栈
    15           tf->esp -= 4;    
    16           *((uint *)(tf->esp)) = tf->eip;
    17     // 将alarmhandler复制给eip,准备执行
    18           tf->eip =(uint) proc->alarmhandler;
    19         }
    20       }
    21     lapiceoi();
    22     break;

    5.其余的都是按照网页上的提示来,基本都很简单

    诸如在 user.h 中添加声明:

    1 int alarm(int ticks, void (*handler)());

    在第一步中所需的sys_alarm()函数代码:

     1 int
     2     sys_alarm(void)
     3     {
     4       int ticks;
     5       void (*handler)();
     6 
     7       if(argint(0, &ticks) < 0)
     8         return -1;
     9       if(argptr(1, (char**)&handler, 1) < 0)
    10         return -1;
    11       proc->alarmticks = ticks;
    12       proc->alarmhandler = handler;
    13       return 0;
    14     }

    完成以上步骤后,重新编译xv6并运行,输入alarmtest命令应该会出现下面的反应

    $ alarmtest
    alarmtest starting
    .....alarm!
    ....alarm!
    .....alarm!
    ......alarm!
    .....alarm!
    ....alarm!
    ....alarm!
    ......alarm!
    .....alarm!
    ...alarm!
    ...$ 

    就这样,,,如果有什么问题就检查下哪一部忘做了,,其实作业网页上说的很详细的,,
  • 相关阅读:
    PowerDesigner将PDM导出生成WORD文档
    哨兵机制
    redis 主从数据同步
    redis RDB
    redis AOF机制
    redis数据结构
    dependencyManagement 和 dependencies的区别
    同源策略 跨域资源共享
    高可用 可扩展 多层反向代理架构演进
    String 杂记
  • 原文地址:https://www.cnblogs.com/tjulym/p/5001585.html
Copyright © 2011-2022 走看看