30天自制操作系统day16

本文详细介绍了在自制操作系统中实现任务自动化、任务休眠和任务优先级的具体步骤。通过创建任务数组实现任务切换自动化,使用任务休眠功能处理IO操作,通过优先级调整任务切换的时间间隔,并采用多级队列确保不同优先级任务的执行顺序。
摘要由CSDN通过智能技术生成

任务自动化

今天要实现任务切换的自动化。最好能够有一个任务数组,每次定时器timeout就切换到下一个,这样就不用写很复杂的taskswitch()了。
首先执行task_init(),这里创建TASKCTL结构,为task数组的每一个TASK在段表中注册。最后设置当前的任务,也就是把调用task_init()函数的这个程序变成一个任务。之后便可进行任务切换了。
task_run()只是将任务加入running列表,真正的运行是在task_switch()切换到该任务时。

让任务休眠

如果任务主要是IO操作,没有IO的时候没事干,这时可以让它休眠。当IO中断时再把它叫醒。休眠的方法是将任务从running列表中删除,需要唤醒时再次task_run()即可。
task_sleep():将指定的task移出running列表。如果要sleep的任务是当前正在执行的任务(taskctl->now),则立刻进行切换。

具体的做法是:
1. 为FIFO结构添加task成员变量,表示当这个FIFO来数据时,唤醒哪一个task。
2. 在fifo32_put()中,当有数据来时,判断task是否处于休眠,是则调用task_run()。
3. 在主程序for循环中,判断fifo的状态。如果fifo中没有数据则让task休眠。

实现任务的优先级

之前的任务切换都是以0.02秒为固定间隔。要实现优先级,则应该能够以不同的时间间隔切换。

  1. 为TASK结构添加priority成员变量。可以在task_init()中设置,也可以在task_run()中改变。
  2. 在task_switch()中,通
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值