我的学习之旅(36) sched.c

49 篇文章 0 订阅
49 篇文章 0 订阅
/*硬中断时候触发调用*/
void do_timer(void)
{
    unsigned int task_id;
    int ret;
    static long tmp = 0;    
    /*扫描timer列表并处理timer对应的fn()*/
    if (next_timer) {
        next_timer->jiffies--;
        while (next_timer && next_timer->jiffies <= 0) {
            void (*fn)(void);

            fn = next_timer->fn;
            next_timer->fn = NULL;
            next_timer = next_timer->next;
            (fn)();
        }
    }
    /*刷新所有任务的 sleep_time并将重新苏醒的任务的计数器设置为预算值。*/
    refresh_sleep_time();

    /*刷新当前任务的计数器*/
    if( current->counter > 0 ) {
        current->counter--;      
    }
    /*找到下一个要执行的任务并刷新到current中*/
    task_id = schedule();
    current = &g_task_tbl[task_id];
    current->stat_counter++;
    return;
}
/*软中断时候触发调用*/
void do_syscall_timer(void)
{
    unsigned int task_id;
    task_id = schedule();
    /*找到下一个要执行的任务并刷新到current中*/    
    current = &g_task_tbl[task_id];
    current->stat_counter++;   
    return;
}
static  void task0_timer(void)
{
    add_timer(HZ, task0_timer );
}
void main_task(void)
{
    int cbuf_addr;
    cbuf_t *cbuf;
    my_queue_t *cbuf_queue; 
    my_queue_t *mbuf_queue;
    unsigned int sec, block, cyl, head;
    int sect = 63;
    int header = 16;
    int hehe = 0;
    /*Make sure interrupt pin is INTA*/   
    if ( g_card_init_ok == 0 && get_int_pin() == 1) {        
        set_intr_gate((32+get_int_line()), &pcnet32_call_interrupt);//10+32
        outb(inb_p(0x21)&0xfb,0x21);
        outb(inb_p(0xa1)&0xfb,0xa1);   
        cli();
        pcnet32_open(g_io_address);
        sti();
    }
    for(;;){
        /*处理cbuf queue*/
        cbuf_queue = ¤t->cbuf_queue;
        while(( cbuf_queue->head != cbuf_queue->tail )  ) {
            cbuf_addr = cbuf_queue->buf_list[cbuf_queue->tail];          
            cbuf = (cbuf_t *)cbuf_addr;
            cbuf_queue->tail = (cbuf_queue->tail +1) &(MAX_CBUF_NUM-1);                        
        }
        /*处理mbuf queue*/
        delay(HZ);/*1 second*/
   }
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值