learningOS开源操作系统社区
  • 首页
  • 训练营
  • 明星学员
  • 共建单位
  • 项目实习
  • 问答论坛
登录
    Copyright © 2024 opencamp.ai All rights reserved.
    【lab4】proc_run中的中断开闭问题
    匿名2023/07/31 19:51:22提问
      lab4student
    488

    local_intr_save(intr_flag);
    {
        current = proc;
        load_esp0(next->kstack + KSTACKSIZE);
        lcr3(next->cr3);
        switch_to(&(prev->context), &(next->context));
    }
    local_intr_restore(intr_flag);

    这是proc_run中的一段。

    有2个疑问:

    ①在进行switch_to操作时,ret时,已经将运行环境的8个寄存器从from进程的换成了to进程的,因此在ret后直接跳转到forkret,进而iret到kernel_thread_entry处开始运行main,那么上述代码中的最后一行将迟迟不能执行,也就是说中断被关闭后迟迟不能开启,导致中断堵塞,直到main进程执行do_exit操作。这是合理的吗?或者是我理解错了?

    ②local_intr_save(intr_flag)是一个宏,其内容为

    #define local_intr_save(x)   do { x = __intr_save(); } while (0)

    为什么要采用while(0)这种奇怪的写法?

    回答(1)
    即可发布评论
      推荐问答
        Simple Empty
        暂无数据