操作系统原理——实验三:CPU调度器_Debug

问题一:
在这里插入图片描述
可能的原因及解决办法:
(1)在machdep.c中定义这两个系统调用实现函数所致,需要在task.c文件中定义这两个实现函数,并且需要定义在get_task()函数之后(或者提前声明get_task()函数)

问题二:
在这里插入图片描述
可能的原因及解决办法:
(1)g_load_avg全局变量需要定义在task.c文件中

问题三:
在这里插入图片描述
可能的原因及解决办法:
(1)
在这里插入图片描述
删除“#”,make clean之后再make run即可。

问题四:
QEMU界面不断重启(界面循环)

可能的原因及解决办法:
内核出错,可能是调度器算法出错或者定时器ISR出错,需要调整正确。

问题五:
一个线程结束之后再开始下一个进程。

可能的原因及解决办法:
直接原因:调度器或者ISR错误。
根本原因:
(1)ISR函数里面添加内容的位置错误,应该添加到下图的else块里。
在这里插入图片描述
(2)fixedpt类型使用错误,不可以使用普通的+ - * /运算,需要使用fixedpt的专有运算符。
(3)调度器或者ISR算法错误。

问题六:
出现下面的界面,但是不进入图形界面
在这里插入图片描述
可能的原因及解决办法:
main.c的主函数里需要等待线程结束task_wait函数。

问题七:
在这里插入图片描述
图形界面的绘图区域交叉,或者部分绘图不完整。

可能的原因及解决办法
(1)没有创建栈空间或者创建了栈空间但是传入堆栈的参数错误
在这里插入图片描述
如图,把右边线程的堆栈指针误传入了控制线程。

问题八:
如何结束控制进程?

解决办法:
(1)先定义两个wait变量,设定初值(非0)
(2)设置等待被控制线程结束,task_wait()函数,并将返回值赋值给wait变量
(3)在控制线程函数的 “等待输入循环” 中,判断wait变量是否均为0,均为0则被控制的两个线程皆已经退出。

PS: 如果对你有帮助的话,帮忙点个赞吧!有任何问题欢迎在评论区留言!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值