• Linux 抢占和上下文切换


    4.6

    上下文切换,也就是从一个可执行进程切换到另一个可执行的进程,由定义在/kernel.sched.c中的context_switch()函数负责处理。每当一个新的进程被选出来准备投入运行时,schedule()就会调用该函数。

    context_switch()主要完成两项工作:

    1)调用声明在<asm/mmu_context.h>中的switch_mm(),该函数负责把虚拟内存从上一个进程映射切换到新进程中。

    2)调用声明在<asm/system.h>中的switch_to(),该函数负责从上一个进程的处理器状态切换到新进程的处理器状态。这包括保存、恢复栈信息和寄存器信息,还有其它任何与体系结构相关的状态信息,都必须以每个进程为对象进行管理和保存。

    内核必须知道在什么时候调用schedule()。内核提供了一个need_resched标志来表明是否需要重新调度一次。当某个进程应该被抢占时,schedule_tick()就会设置这个标志;当一个优先级高的进程进入可执行状态时,try_to_wake_up()也会设置这个标志。内核检查该标志是否被设置,设置了则调用schedule进行调度。

    用户抢占:

    从系统调用返回用户空间时;

    从中断处理程序返回用户空间时。

    内核抢占:

    中断处理程序正在执行,且返回内核空间之前;

    内核代码再一次具有可抢占性的时候;

    如果内核中的任务显示地调用schedule();

    如果内核中的任务阻塞(这同样也会导致调用schedule())。

  • 相关阅读:
    网络安全笔记1-局域网、DOS、用户与组、远程、NTFS、文件共享、DHCP、DNS、WEB、FTP、域、PKI、扫描与爆破
    ASM入网小助手卸载
    列表拖拽排序 ----vue.js
    如何让谷歌索引你的页面
    命令导入大数据库

    大数据-快读
    微服务参考文章
    Java-BigDecimal踩坑记录
    CF1285F Classical?
  • 原文地址:https://www.cnblogs.com/cjj-ggboy/p/12618002.html
Copyright © 2020-2023  润新知