免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1867 | 回复: 0
打印 上一主题 下一主题

关于g-bios的中断问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-17 23:55 |只看该作者 |倒序浏览
我回家想了一下,中断问题可否如下处理

先建立一个数据结构

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内核为标准进行说明)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP