博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xv6-----CPU alarm
阅读量:6873 次
发布时间:2019-06-26

本文共 1577 字,大约阅读时间需要 5 分钟。

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

 

参考:

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

 

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命令应该会出现下面的反应

 

$ alarmtestalarmtest starting.....alarm!....alarm!.....alarm!......alarm!.....alarm!....alarm!....alarm!......alarm!.....alarm!...alarm!...$ 就这样,,,如果有什么问题就检查下哪一部忘做了,,其实作业网页上说的很详细的,,

 

转载于:https://www.cnblogs.com/tjulym/p/5001585.html

你可能感兴趣的文章
物联网数据卡系统源码——通信模块整体概述
查看>>
《学习OpenCV3》目录和全书划分
查看>>
翻转字符串
查看>>
生活娱乐 24岁姑娘端22碗米粉面不改色
查看>>
2-05. 求集合数据的均方差(15) (数学啊 ZJU_PAT)
查看>>
城市公交网建设问题
查看>>
Android图片加载框架Picasso最全使用教程5
查看>>
静态与伪静态
查看>>
SAML
查看>>
安装配置PhoneGap开发环境(一)
查看>>
设计模式学习笔记--备忘录(Mamento)模式
查看>>
OGG目的端的checkpoint table被drop的修复方法
查看>>
android 通过bitmapfactory得到图片真实像素的方法,以及没有得到真实像素的原因
查看>>
SVN 常见命令
查看>>
poj 2299 Ultra-QuickSort
查看>>
mysql写注释的几种方法
查看>>
MFC窗口去边框、置顶、全屏、激活
查看>>
SSH-CLIENT : gSTM
查看>>
HTML5 Audio/Video 标签,属性,方法,事件汇总 (转)
查看>>
HDU 3572 Task Schedule(ISAP模板&amp;&amp;最大流问题)
查看>>