关于g-bios的中断问题
我回家想了一下,中断问题可否如下处理
先建立一个数据结构
struct isr_call{
int (*fun)(void*) //中断返回处理函数
void *data //中断返回处理函数所需的数据
struct isr_call *next //单链表
int status //相关的一些状态信息(如网卡是收中断还是发中断等)
int irq //中断号
int id //用于区分相同的中断号其中断返回处理函数
//如有两个函数都同时产生相同的中断,则根据此id号进行区别,在回调时选择正确的中断返回处理函数
//可以是进程id或线程id
//由于现在是单进程.可以不考虑,不过可以为以后扩展使用(不会永远是单进程吧-_-!)
}
struct isr_call irq_call[32] //对应于中断数组队列
如网卡收到数据,发生中断,从网卡中取出数据后,初始化struct isr_call(也可一开始就初始化好,像初始化irq一样,不过........^_^)
isr_call->fun = netif_ix
isr_call->data = sockbuff
add_tail(isr_call)
则中断返回后,在相应的地方根据中断号访问irq_call[irq],进行调用中断返回处理函数即可
但不知如果中断返回处理函数中又包含中断会如何?如中断返回处理函数执行时间过长又该如何处理?
顺便问一下内核代码问题
在schedule()方法中,将task的状态设置为TASK_RUNNING,进程就会执行?(如果没记错的话)
是否先将其链入运行队列,然后再执行?
那又是如何链入的?又如何执行的?
能否说明其详细过程?(以2.6.26或2.6.28内核为标准进行说明)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论